核心更新的目的
1. 原來的核心太臃腫,為了系統更加穩定,去掉不需要的功能
2. 新功能的需求
3. 為了適應更新的硬體,需要編譯核心
4. 嵌入式系統的需要
核心的版本
? 版本的組成--:『[主].[次].[釋出]-[修改]』
? 次版本位為奇數則說明此版本位測試版本(2.5.x),為偶數說明是穩定版本(2.6.x)。
? 不同版本間升級要注意核心函數庫的變更情況,如變動大不建議升級核心以免造成依賴的軟體不可用
? 核心釋放的官方網站為:www.kernel.org
? 核心patch的升級要連續版本升級,查看patch說明才能決定
核心源碼的下載安裝
1. 源碼的解壓縮位置
a) 一般位於/usr/src/kernels/
b) 命令為tar -jxvf linux-2.6.30.3.tar.bz2 -C /usr/src/kernels/
arch :與硬體平台有關的項目,大部分指的是CPU 的類別,例如x86, x86_64, Xen 虛擬支援等; |
block :與區塊裝置較相關的設定資料,區塊資料通常指的是大量儲存媒體!還包括類似ext3 等檔案系統的支援是否允許等。 |
crypto :核心所支援的加密的技術,例如md5 或者是des 等等; |
Documentation :與核心有關的一堆說明檔案,若對核心有極大的興趣,要瞧瞧這裡! |
drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等; |
firmware :一些舊式硬體的微指令碼(韌體) 資料; |
fs :核心所支援的filesystems ,例如vfat, reiserfs, nfs 等等; |
include :一些可讓其他程式呼叫的標題(header) 定義資料; |
init :一些核心初始化的定義功能,包括掛載與init 程式的呼叫等; |
ipc :定義Linux 作業系統內各程式的溝通; |
kernel :定義核心的程式、核心狀態、執行緒、程式的排程(schedule)、程式的訊號(signle) 等 |
lib :一些函式庫; |
mm :與記憶體單元有關的各項資料,包括swap 與虛擬記憶體等; |
net :與網路有關的各項協定資料,還有防火牆模組(net/ipv4/netfilter/*) 等等; |
security :包括selinux 等在內的安全性設定; |
sound :與音效有關的各項模組; |
virt :與虛擬化機器有關的資訊,目前核心支援的是KVM (Kernel base Virtual Machine) |
2. 源碼下面的目錄,以及用處
3. 核心編譯前的處理和核心功能選擇
a) 檢測硬體
b) 核心功能需求
4. 編譯前的做法
a) 保持乾淨的源碼
·Make dep 保證所需要的檔案都在相關位置
·make mrproper 將會刪除所有的設定檔,包括之前編譯過核心留下來的配置
·make clean 只刪除編譯中間產生的中間代碼,保留之前配置的核心配置
b) 開始挑選核心功能
·Make menuconfig 用文本目錄模式來挑選核心功能
·Make oldconfig 通過已存在的設定檔,來修改核心功能
·Make xconfig 以Qt為基礎的圖形介面來顯示,需要用Qt設計的X Window,KDE可以使用
·Make gconfig 以ftk為基礎的圖形介面來顯示,GNOME可以使用
·Make config 老是方法,文本問答模式,無法復原,不建議
c) 核心功能的細項解釋
· 設定方式:
1. 『左右方向鍵』:可以移動最底下的<Select>, <Exit>, <Help>項目;
2. 『上下方向鍵』:可以移動上面大框框部分的反白光柱,若該行有箭頭(--->) 則表示該行內部還有其他細項需要來設定的意思;
3. 選定項目:以『上下鍵』選擇好想要設定的項目之後,並以『左右鍵』選擇<Select> 之後, 按下『Enter 』就可以進入該項目去作更進一步的細部設定囉;
4. 可挑選之功能:在細部項目的設定當中,如果前面有[ ] 或< > 符號時,該項目才可以選擇, 而選擇可以使用『空白鍵』來選擇;
5. 若為[*] <*> 則表示編譯進核心;若為<M> 則表示編譯成模組! 盡量在不知道該項目為何時,且有模組可以選,那麼就可以直接選擇為模組囉!
6. · 當在細項目選擇<Exit> 後,並按下Enter ,那麼就可以離開該細部項目囉!
· 解釋
1. General setup
與Linux 最相關的程式互動、核心版本說明、是否使用發展中程式碼等資訊都在這裡設定的。這裡的項目主要都是針對核心與程式之間的相關性來設計的,基本上,保留預設值即可! 不要隨便取消底下的任何一個項目,因為可能會造成某些程式無法被同時執行的困境喔! 不過底下有非常多新的功能,如果你有不清楚的地方,可以按<Help> 進入查閱,裡面會有一些建議! 你可以依據Help 的建議來選擇新功能的啟動與否!
d) 編譯命令:
·Make vmlinux 編譯未經壓縮的核心
·Make modules 編譯核心模組
·Make bzImage 編譯經過壓縮後的核心
·Make all 進行以上三個動作
e) 安裝核心以及核心模組
· 把產生的核心檔案copy到boot目錄
·Make modules_install 安裝核心模組
1. mkinitrd -v /boot/initrd-2.6.30.3vbird.img 2.6.30.3vbird
·Mkinitrd –v 目標檔案 核心版本 產生initrd檔案
· 修改grub.conf檔案,來引導新核心啟動
f) 額外單一模組的編譯
· 模組編譯的準備工作
1. Make GCC 等編譯工具
2. Kernel-devel軟體
· 單一模組的編譯
1. 核心中有的功能沒有編譯,需要核心源碼編譯
a) 源碼所在目錄下達make menuconfig講選項設定沒模組
b) 然後make fs/ntfs編譯出所需要的模組
c) 將該模組複製到相關的目錄裡面
d) Depmod –a產生依賴性關係
2. 核心中沒有的功能,需要第三方源碼編譯
a) 源碼解壓
b) 源碼編譯出目標檔案
c) 安裝模組
i. make install
ii. install -m 744 -c r8168.ko /lib/modules/2.6.30.3vbird/kernel/drivers/net/
d) 更新模組依賴性資訊 depmod –a