第二章 從內核出發
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. 作者最後的總結
內核不外乎是一個程序,它與我們司空見慣的程序沒有多大區別,不必望而生畏:
直面它,呼喚她,擺佈她。
必須要全身心的投入,閱讀代碼,剖析代碼,並毫不氣餒。