有人尝试QNX内核代码分析吗?

呵,我觉得XTANG能组织一下像CLF一样做一些内核代码的分析工作,我想QNX参与的人会更多。

如果大家业余时间还有精力分析代码的话,这个想法很好,我赞成。

顶一下! 主要是分一下大家各自分析的模块。

QNX的真正内核部份的代码量相对较小,应该比Linux的工作要少。不过,不像Linux,你写个模块,或是驱动,就要跟内核打交道。QNX内核部份的代码,通常大家不会用到的。所以有些犹豫。

比较“情景分析”,网络、文件系统、USB等都是核外的东西。反而是这些框架界面,加上IPL/Startup的分析说明,会对大家更有帮助?

几个小问题请教一下:

  1. 我下载了IDE4.5和svn neutrino 的代码,整了半天,没有明白如何用IDE编译这个代码?

  2. 不知IDE内有模似器吗?我昨天刚开始看到代码,在_start.S 中看到一个startup_stack 的符号,应该是预留的一个stack内存,可我用SI 找了半天没有找到。如果有模似器跟踪一下,理解应该很快。

  3. 还没有想到。。。

呵呵,.S应该是汇编源文件吧,里面看到的符号在编成二进制后当然不会再保留,找不到很正常。

模拟器没有,虚拟机很好用啊

我建议还是研究下内核的内存管理,毕竟如果能去掉分页,QNX在某些应用上更强悍。

那个statrup_stack 是一个lable,是一个内存stack的头地址。
我觉得它的定义应该在一个配置文件中,让用户可以方便配置,所以我用SI 找不到它。
哈哈,MMU还是OS中最重要的一块。

根据我反汇编IPL和Startup的分析,这个stack应该是没法定义大小的。
应为Startup运行是在实模式下,可用内存大小受限制。

可惜我对X86不熟,对ARM比较了解一些,所以我从ARM开始看。arch 比较相关的部分也就interrupt 和MMU,其它的一样。

x86的startup,第一件事就是转换到保护模式,大部份的startup代码是在保护模式下运行的。

在切换保护模式之前,startup还是会有一些操作的。
比如构造GDT,以及确定内核入口地址等。
关键是这个stack是切换之前还是切换之后的。

在ARM中,会先在system mode 中设置一个stack,我想就如X86的实模式吧,不然如何在后面的程序中做一些push / pop stack 的工作,做完实模式的工作后,才会到保护模式。

最近又看了一下反汇编的结果,stack应该是实模式下使用的。而且是在IPL里面