【第二章 从内核出发】
7.内核开发的差异:
①内核编程时既不能访问C库也不能访问标准的C头文件。
②内核编译时必须使用GNUC
③内核编程时缺乏像用户空间那样的内存保护机制。
④内核编程时难以执行浮点运算。
⑤内核给每个进程只有一个很小的定长堆栈
⑥由于内核支持异步中断、抢占和smp,因此必须时刻注意同步和并发。
⑦要考虑移植的重要性。
8.printk()允许通过指定一个标志来设定优先级。
如: printk(KERN_ERR "this is an error!\n" );
9.定义一个内联函数时,需要使用static作为关键字,并用inline 限定。
如:
static inline void nolf(unsigned long tail_size)
一般在头文件定义内联函数
为了类型安全和易读性,优先使用内联函数而不是宏。
10.gcc内建了一条指令用于优化【分支声明】,内核将指令封装成宏,如:
likely()和unlikely()
if(error)
{ ///......}
if (unlikely(error))
{//.....}
11.内核的内存不分页,故每用掉一个字节,物理内存就减少一个字节。
12.在探索的征途中,最重要的是阅读和修改源代码。