CentOS 5.4 添加系统调用函数及内核编译(4)

第一次编译linux系统内核,真的花了不少时间。我对linux系统内核一共编译了6次,其中三次把内核搞坏了,好在我的电脑里装了几个版本的内核,电脑还能正常进入。大概用了两天加一个通宵的时间,这个期间内,我的电脑一直在运行。

其实,我以前并不是很喜欢用linux系统,第一感觉不熟悉,第二感觉不方便。这次之所以会坚持编译内核,而且在系统崩溃了三次,五次失败的基础上仍然坚持,仅仅是因为我想挑战一下自己。每一次的失败并没有让我灰心,反而更激发了我挑战的决心。

在这个过程中我遇到的几个问题如下:

(1)由于linux内核更新的比较快,我开始用的是2.6.27.11版本的,而我下载的内核是2.6.29.1版本的。按照老师给的课件,或是按照网上的一些文章修改内核时,发现有一个文件unistd_32.h这个文件找不到。于是我就用搜索,把所有这样的文件都找出来,但有不知道改那个文件,于是干脆都改了。

(2)在配置系统内核时,开始我用的是make menuconfig,因为网上的文章这样推荐,我于是照着做,结果发现里面的选项根本不懂。后来就按照以前的配置直接跳过了:make oldconfig

(3)有几次在安装内核是突然提示磁盘空间不够,我又迷惑了,然后打开添加删除程序,把一些不常用的软件都删了,可空间仍然不够,我又不知道那些东西能删,那些东西不能删,就干脆直接把以前的内核删了,结果就成功了。

(4)内核编译成功之后,写程序测试我的系统调用,结果就是不出结果,我还以为是我的内核改错了,就有重新修改编译。结果发现仍然不行,机子没有崩溃,人都快崩溃了。最后发现系统的printk不会直接打印出来,而是需要命令:dmesg,于是照着做,竟打印出很多东西,最后一行会有我的名字,最后在网上查了一下这个命令的使用,发现它有一个参数:

-c,清除缓存中的系统信息。于是每次用dmesg时,都加上这个参数,结果就只打印我需要的信息。

注:我用的内核是2.6.28,编译内核步骤:

make oldconfig(使用make menuconfig可以自己配置编译选项)

make -j5(我的机器为4核,可以多个进程同时编译)

make modules

make modules_install

make install

reboot

Then write test prog for added syscall,printk不会直接打印出来,在执行测试程序后可以使用dmesg,最后的部分既为测试程序的输出,可以使用dmesg -c只参看自己打印的信息

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpdsf.html