Kernel介紹
Kernel (核心),是整個系統中最底層也是最重要的一部份。不但負責硬體的驅動,更提供了各種系統所需的核心功能、包括防火牆機制、是否支援 LVM 或 Quota 等檔案系統等…都是靠核心所負責的。 Linux Kernel,以 C語言寫成,符合POSIX標準,採用GNU通用公共許可證釋出,是目前最受歡迎的自由電腦作業系統核心
更多詳細內容可參考 :
系統環境
Centos 5.8-x86_64-bin
Kernel linux-2.6.39.4
安裝方式
安裝相關套件
在開始設定之前,請先安裝所需的套件
gcc gcc-c++ : 用於make 編譯時使用
ncurses-devel : 用於make menuconfig 時使用
1 |
[root@localhost ~]# yum -y install gcc gcc-c++ ncurses-devel |
下載所需要的 Kernel 2.6.x
Kernel 的版本有很多,請依照自己需要的下載
以下提供幾個常見的載點
1 2 3 4 |
[root@localhost ~]# cd /usr/src/kernels [root@localhost ~]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.gz [root@localhost ~]# tar -zxvpf linux-2.6.39.4.tar.gz [root@localhost ~]# cd linux-2.6.39.4 |
配置 Kernel
在 Kernel 的配置上,請依個人需求自行選擇。若是不知該如何選擇的話,可複製原本 Kernel 的設定檔加上參考鳥哥的核心功能細項選擇來做修改。
或是參考已設定好的「.config」
1 2 |
[root@localhost ~]# cp /boot/config-2.6.18-308.el5 /usr/src/kernels/linux-2.6.39.4 [root@localhost ~]# make menuconfig |
如果在 Kernel 配置 make menuconfig 時有報錯的話請參考此篇文章解決
如果在 Kernel 配置完成後有出現警告 (warning) 訊息的話,請參考此篇文章有整理一些常見的警告。
編譯核心和核心模組
指令介紹
先來說明一下幾個常用的指令
make mrproper : 完全清除 Kernel 資料夾內編譯過和修改過的檔案,包括「.config」
1 |
[root@localhost ~]# make mrproper |
Make clean : 只會刪除類似目標檔之類的編譯過程產生的中間檔案,而不會刪除設定檔
1 |
[root@localhost ~]# make clean |
編譯核心和核心模組
執行此步驟會依據主機效能和所配置的Kernel項目,而有所差別。大約一小時左右
1 2 |
[root@localhost ~]# make clean [root@localhost ~]# make all |
make all 指的是執行以下三個動作 make vmlinux、make modules、make bzImage
make vmlinux : 未經壓縮的核心
make modules : 僅核心模組
make bzImage : 經壓縮過的核心
編譯完成後 bzImage 會存放在以下路徑
1 2 |
[root@localhost ~]# ls -ahl /usr/src/kernels/linux-2.6.39.4/arch/x86/boot/bzImage -rw-r--r-- 1 root root 3.3M Jan 6 17:36 /usr/src/kernels/linux-2.6.39.4/arch/x86/boot/bzImage |
安裝模組
在安裝好模組後,會在 /lib/modules/ 看到多出一個新的模組放置的資料夾
如果有需要重覆編譯安裝,為避免衝突可參考以下兩種方式。。
- 先將舊的模組資料夾改名字,然後在編譯安裝。
- 到 make menuconfig 裡,選 General setup 內的 Local version來修改名稱
1 2 3 4 |
[root@localhost ~]# make modules_install [root@localhost ~]# ll /lib/modules/ drwxr-xr-x 6 root root 4096 Jan 6 14:18 2.6.18-308.el5 drwxr-xr-x 3 root root 4096 Jan 6 18:39 2.6.39.4 |
安裝核心
經由剛剛的設定後知道核心已經存放在 /usr/src/kernels/linux-2.6.39.4/arch/x86/boot/bzImage,不過如果真的要使用的話必須要放到 /boot 才行。
在此部份有兩種設定方式,請選一種設定就行了
方法一
1. 複製 bzImage 和 config 到 /boot
將核心bzImage移至 /boot 且將config也備份一份到 /boot 以備不實之需
1 2 |
[root@localhost ~]# cp /usr/src/kernels/linux-2.6.39.4/arch/x86/boot/bzImage /boot/vmlinuz-2.6.39.4 [root@localhost ~]# cp /usr/src/kernels/linux-2.6.39.4/.config /boot/config-2.6.39.4 |
2. 建立 Initial Ram Disk (initrd)
/boot/initrd-2.6.39.4.img : 為檔案建立後要存放的位置和名稱
2.6.39.4 : 指的是 ll /lib/modules/ 的模組資料夾
1 |
[root@localhost ~]# mkinitrd -v /boot/initrd-2.6.39.4.img 2.6.39.4 |
若在建立 initrd 時出現「No module ata_piix found for kernel 2.6.39.4, aborting.」 請改用以下方式建立
1 |
[root@localhost ~]# mkinitrd --builtin=ata_piix /boot/initrd-2.6.39.4.img 2.6.39.4 |
3. 編輯開機選單
請手動新增以下內容
修改前
1 2 3 4 5 6 7 8 9 |
[root@localhost ~]# vim /boot/grub/menu.lst default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-308.el5) root (hd0,0) kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-308.el5.img |
修改後
在原先的 title CentOS (2.6.18-308.el5) 上面新增以下內容。並且修改 default=0,在開機選單的順序上為0、1、2…。所以原先設定為 default=1 的話就會啟動到舊的核心(2.6.18-308.el5)。因此請修改為0,讓系統能抓取最新的核心。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@localhost ~]# vim /boot/grub/menu.lst default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.39.4) root (hd0,0) kernel /vmlinuz-2.6.39.4 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.39.4.img title CentOS (2.6.18-308.el5) root (hd0,0) kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-308.el5.img |
4. 重新開機查看是否為新核心
1 2 |
[root@localhost ~]# uname -a Linux localhost.localdomain 2.6.39.4 #1 SMP Sun Jan 6 17:36:00 CST 2013 x86_64 x86_64 x86_64 GNU/Linux |
方法二
1. 使用此方式,會自動將 bzImage 和 Initial Ram Disk (initrd) 建立完成且移到 /boot 內,還會自動將開機選單設定完成。
1 |
[root@localhost ~]# make install |
2. 查看開機選單
由於已經自動新增內容,所以不需要多做修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@localhost ~]# vim /boot/grub/menu.lst default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.39.4) root (hd0,0) kernel /vmlinuz-2.6.39.4 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.39.4.img title CentOS (2.6.18-308.el5) root (hd0,0) kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-308.el5.img |
3. 重新開機查看是否為新核心
1 2 |
[root@localhost ~]# uname -a Linux localhost.localdomain 2.6.39.4 #1 SMP Sun Jan 6 17:36:00 CST 2013 x86_64 x86_64 x86_64 GNU/Linux |
參考資料:
謝謝,很有幫助!
不客氣~