linux內核設計與實現讀書筆記——linux內核開發準備工作與注意事項

一、下載內核源碼

linux內核官網http://www.kernel.org

二、內核源碼樹

目錄 說明
arch 特定體系結構的代碼
block 塊設備I/O層
crypo 加密API
Documentation 內核源碼文檔
drivers 設備驅動程序
firmware 使用某些驅動程序而需要的設備固件
fs VFS和各種文件系統
include 內核頭文件
init 內核引導和初始化
ipc 進程間通信代碼
kernel 像調度程序這樣的核心子系統
lib 同樣內核函數
mm 內存管理子系統和VM
net 網絡子系統
samples 示例,示範代碼
scripts 編譯內核所用的腳本
security Linux 安全模塊
sound 語音子系統
usr 早期用戶空間代碼(所謂的initramfs)
tools 在Linux開發中有用的工具
virt 虛擬化基礎結構

三、編譯內核

  1. 配置內核:$ make menuconfig 
  2. 編譯:make

四、內核開發的特點

  1. 內核編程時既不能訪問C庫也不能訪問標準的C頭文件
  2. 內核編程時必須使用GNU C,內核開發者有時會用到gcc提供的許多語言擴展部分。(gcc是多種GNU編譯器的集合,他包含的C編譯器既可以編譯內核,也可以編譯linux系統上用C語言編寫的其他代碼。)gcc 編譯器支持內聯(inline)函數、內聯彙編、分支聲明(比如likely(),unlikely())
  3. 沒有內存保護機制,在內核中不能做訪問非法內存地址,引用空指針之類的事情,否則會發成內存錯誤,內核會死掉。
  4. 不要輕易在內核中使用浮點數,因爲內核不能完美的支持浮點操作,在內核中使用浮點數時,需要人工保證和恢浮點寄存器,還有其他一些瑣碎的事情,所以,不是萬不得已,乾脆就別用浮點操作了。
  5. 內核棧容積小且固定,在X86上棧的大小在編譯時配置,可以是4KB也可以是8KB。查看內核棧大小的方法:
    ulimit -a | grep "stack size"
  6. 同步和併發,由於內核可以搶佔,是多任務操作系統,進程調度隨時可能發生;中斷處理程序與被中斷的進程訪問同一資源;內核支持對稱對處理器系統(SMP),同時在兩個或兩個以上的處理器上執行的代碼可能會同時訪問共享的資源。因此,需要同步機制保證不出現競爭條件,常用的方法有自旋鎖、信號量、互斥體。
  7. 保證可移植性,諸如保持字節序、64位對齊、不假定字節長度和頁面長度等方法有助於移植性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章