(原创)第二章 Getting Started with the Kernel(Part2)

1、编译内核
在完成了对内核的配置后,接下来就是编译内核了,对于2.6系列的内核,不再需要在编译前进行make dep的步骤,依赖关系会自动进行维护,直接使用make即可,也不再需要用显式的指定编译类型如bzImage,Makefile的规则会处理一切。 编译过程还会在源代码目录的根目录下生成System.map,在调试过程中用它来将内存地址转换到函数和变量名,是非常有用的,我们将在后面说到

2、最小化编译噪声
在编译时命令行中会打印出无数的输出信息,可以通过重定向方式忽略make的输出:
make >../somefile
make > /dev/null

前者将输出重定向到文件中,后者直接忽略所有的输出。

love的观点是通常用后者,但是我个人认为需要看情况,除非在你完全确定编译器版本等没有问题时,后者是OK的; 但是对于很多跨平台开发,在不同的linux发布版本上,使用很多不同的cross-compile而言,初期很可能在出现各种编译器不匹配的情况,需要排查warnings and errors,所以前者好些吧

3、生成多个build任务
make提供了拆分build过程到多个任务的特性,各个任务可以独立的并行运行,可以显著加速多处理系统的编译速度。
make -jn 其中n表示要生成的任务数。通常的实践是一个处理器生成1-2个任务。

4、安装内核
书中love提到安装内核是和体系结构以及bootloader相关的,并且建议一定要保留1、2个确知可以正常工作的内核版本,以防新编译的内核出现问题。很通常的优秀的工作方法,不是吗?我个人可能会更倾向于使用svn之类的版本控制系统,尽管有点夸张,但是当过了10天半月,谁会完全记得改了什么呢,良好的习惯很重要。

安装内核是手动完成的,以使用grub的x86为例,将生成的bzImage copy到/boot目录下,以
vmlinuz-version方式命名,然后修改/boot/grub/grub.conf,为新内核添加一个条目即可。


安装模块和安装应用程序很类似,自动就可以完成了,root下运行
make modules_install
就会把所有编译后的模块安装到/lib下


参考资料
1、Linux Kernel Development (2nd Edition)  Robert Love 机械工业出版社

你可能感兴趣的:(linux,工作,SVN,出版)