2009年1月13日 星期二

核心與核心模組

談完了整個開機的流程,您應該會知道,在整個開機的過程當中,是否能夠成功的驅動我們主機的硬體配備, 是核心 (kernel) 的工作!而核心一般都是壓縮檔,因此在使用核心之前,就得要將他解壓縮後, 才能載入主記憶體當中。

另外,為了應付日新月異的硬體,目前的核心都是具有『可讀取模組化驅動程式』的功能, 亦即是所謂的『 modules (模組化)』的功能啦!所謂的模組化可以將他想成是一個『外掛程式』, 該外掛程式可能由硬體開發廠商提供,也有可能我們的核心本來就支援~不過,較新的硬體, 通常都需要硬體開發商提供驅動程式模組啦!

那麼核心與核心模組放在哪?
  • 核心: /boot/vmlinuz 或 /boot/vmlinuz-version;
  • 核心解壓縮所需 RAM Disk: /boot/initrd (/boot/initrd-version);
  • 核心模組: /lib/modules/version/kernel 或 /lib/modules/`uname -r`/kernel;
  • 核心原始碼: /usr/src/linux (要安裝才會有!否則預設不安裝的!)
如果該核心被順利的載入系統當中了,那麼就會有幾個資訊紀錄下來:
  • 核心版本: /proc/version
  • 系統核心功能: /proc/sys/kernel
問題來啦,如果我有個新的硬體,偏偏我的作業系統不支援,該怎麼辦?很簡單啊!
  • 重新編譯核心,並加入最新的硬體驅動程式原始碼;
  • 將該硬體的驅動程式編譯成為模組,在開機時載入該模組
上面第一點還很好理解,反正就是重新編譯核心就是了。不過,核心編譯很不容易啊! 我們會在後續章節約略介紹核心編譯的整個程序。比較有趣的則是將該硬體的驅動程式編譯成為模組啦! 關於編譯的方法,可以參考後續的 原始碼與 tarball 那一章的介紹。 我們這個章節僅是說明一下,如果想要載入一個已經存在的模組時,該如何是好?