开发内核的几条经验

Wednesday, 14. February 2007, 12:20:41

作者:王聪@西邮

1. 永远不要使用sleep_on及其变种,那是不安全的,而且即将被剔出。
2. 老的/proc接口是有害的,如果你不能彻底理解它,千万别使用!尽量不要再往/proc里面放东西了,因为那里现在已经够乱了。
3. wait_event的一个变种──wait_event_interruptible_exclusive──是可以执行独占等待的。LDD中这一点错了,不,过时了。
4. 不要使用lock_kernel(),这个锁太大了,会让系统性能下降。
5. 信号量本身就是一种高级的lock,它能比普通的lock,比如spinlock,实现更多的语义。就像分配了内存后必须释放一样,一个进程对一个信号量进行down操作后,必须在退出前执行up。切记:不要在拥有锁时睡眠!
6. Unix的errno具有丰富的含义,请认真小心地处理它们,在用户空间如此,在内核空间更要如此,因为内核空间的一个错误状态直接影响到现有用户程序的表现。
7. oops是严重的错误,不能信任存在oops的内核。
8.
关于补丁:
a) 稳定内核的补丁只能应用于基版本的内核,比如:2.6.17.*补丁只能应用于2.6.17版本的内核;
b) 基版本内核补丁只能应用于上一个版本的内核,比如:2.6.18补丁只能应用于2.6.17;
c) 增量型补丁只能从一个指定的版本应用于另一个指定版本,比如:补丁patch-2.6.17.10-11.bz2只能应用于2.6.17.10,把它升级为2.6.17.11;
d) 如果你需要升级的版本间隔比较大,比如从2.6.17.1到2.6.17.11,可以先从2.6.17.1退回到2.6.17,然后再一次升级到2.6.17.11;
e) 稳定内核的补丁和基版本内核补丁都在源代码目录中,而增量型补丁在一个单独的目录/pub/linux/kernel/v2.6/incr中。