首先,ULK3分析的主要对象是2.6.11内核,而现在的各种发行版本采用高版本的GCC,GCC似乎不太愿意向后兼容,所以在现在这些发行版本中基本不能正常编译2.6.11内核。在网上搜索之后,发现 Fedora4 跑的是2.6.11内核、GCC 4.0.0和glibc 2.3.5,所以在搭建内核调试环境时就采用 Fedora4 作为开发机系统。
其次,搭建内核调试环境的思路和方法与《利用Qemu搭建内核调试环境》一文中的讨论基本一致,但有些细节方面还是有所区别的。
-
QEMU的运行依赖zlib和SDL两个库,在Fedora4的安装光盘中有zlib的RPM包,直接安装即可;而为了安装SDL,可以将整个图形开发环境一并安装,这样可以避免寻找软件包依赖关系的繁琐工作。
Desktop --> System Settings --> Add/Remove Applications
然后选择“X Software Development” 和“GNOME Software Development”两项。 - 高版本的QEMU和Busybox建立在一些新的系统调用和库特性基础之上,这些系统调用在2.6.11版本的内核中并不存在;它们引用的一些库特性在glibc 2.3.5中也没有定义。所以,需要选择适当版本的QEMU和Busybox。经过一些尝试,最后选择了QEMU0.10.0和Busybox 1.15.0。
-
尽管Busybox的大多数工具可以在Fedora4中编译,但还是存在个别不能编译的工具。这几个工具与搭建内核调试环境并没有什么关系,可以将其剔除。
Miscellaneous Utilities
--> ionice
--> watchdog
Networking Utilities
--> ifenslave
-
在目标机启动并挂载开发机根文件系统后,不能正常执行chroot命令,屏幕上不停出现:
nfs:server is not responding,still trying
错误信息。参考《nfs:server is not responding,still trying的解决方法》一文获知问题的原因可能在于NFS默认采用的UDP协议,尝试执行:
mount -t nfs -o tcp,nolock 192.168.0.24:/ /mnt
然后再执行:
chroot /mnt /bin/bash --login
就顺利切换了根文件系统。