第二章 从内核出发
1. 内核就如性格怪异的猛兽,但并非不可驯服,让我们来驾驭他
2. 不要和/usr/src/linux的目录混在一起
3. 使用补丁:patch -p1<../patch-x.y.z
4. CONFIG_FEATURE来标识。二选一,或者三选一(yes,no,module)
5. make config, make menuconfig, make xconfig, make gconfig, make defconfig,然后就是make
6. make -jn, 或者用distcc,ccache等工具。
7. 配置grub或lilo等。
8. make modules_install
9. System.map的作用
------------------------------------------------------
与编译应用程序的不同,导致内核成了一只性格迥异的猛兽
1. 没有C库
-先有鸡还是先有蛋的问题
-C库太大且效率不能接受
-printk
2. GNU C
-inline 函数:static inline void dog()
-内联汇编
-likely 和 unlikely
3. 缺乏内存保护机制
-内核错误会导致oops
-内存都不分页
4. 浮点数很难使用
-保存和恢复浮点寄存器外,还有...
-别这么做了,不要在内核中使用浮点数
5. 内核只有很小的定长栈
-一般是2page
6. 注意并发和同步
-(抢占多任务,多处理器系统,中断的异步性,内核可抢占)
-自旋锁,信号量,原子操作
7. 可移植性
-大部分C代码应该与体系结构无关
-字节序,对齐,不假定字长,页面大小等。
8. 作者最后的总结
内核不外乎是一个程序,它与我们司空见惯的程序没有多大区别,不必望而生畏:
直面它,呼唤她,摆布她。
必须要全身心的投入,阅读代码,剖析代码,并毫不气馁。