核心升級
首頁

Linux 核心重編與升級

 

1. Linux核心提供什麼功能

bullet

Linux 核心是一個檔案(/boot/vmlinuz  for most case)

bullet

核心支援各項電腦硬體配備,讓所有程式可以透過核心與電腦硬體溝通。

bullet

有效率的核心必須與電腦狀況(硬體周邊)配合

bullet

核心提供周邊硬體驅動程式:網路卡、音效卡、SCSI卡等

bullet

通訊協定:TCP/IP、PPP、Router等

bullet

核心提供檔案系統支援:ext2、umsdos、iso9660...

bullet

核心提供記憶體管理、多CPU平行處理....


2.Linux核心重編(Make Kernel)與升級有何不同

bullet

核心重編利用原始碼重新編譯,目的在打造一個新核心(不一定是新版)

bullet

核心升級利用新版本原始碼,以編譯方式,產生一個新版的核心

bullet

核心升級必須經過核心重編的程序

3.Linux核心何時需要重編

bullet

為核心瘦身,去除原有核心支援但用不到的功能時

bullet

新增原有核心不支援的功能(包括模組)時

bullet

修正舊有核心錯誤(例如核心無法開機)時

bullet

核心升級時

4.Linux核心何時需要升級

bullet

舊版核心可能錯誤的修正(Bug Fix)

bullet

新周邊設備或系統功能無法由舊版核心取得支援時

bullet

核心版本落後太多時

5.新版Linux核心何處取得

bullet

官方(Official)Kernel ftp Site
ftp://ftp.kernel.org

bullet

Linux HeadQuarters
http://www.linuxhq.com

bullet

國內收集kernel網站
ftp://ftp.mgt.ncu.edu.tw/Linux/kernel
ftp://ftp.nsysu.edu.tw/Linux/metalab.unc.edu/kernel.org/pub/linux/kernel
ftp://ftp.ccu.edu.tw/pub3/linux/kernel.org-pub/linux/kernel

bullet

Kernel in nmc
ftp://nmc.nchu.edu.tw/linux/kernel

6.Linux核心版本編號所代表的意義

bullet

Linux核心版本編號格式為:major.minor.patchlevel
major : 主要版本編號,極少變動
minor : 次要版本編號,這是Linux核心版本的血統
patchlevel : 目前核心(次要)版本的修補編號

bullet

"uname -a" 可以讀取目前新的版本及核心重編的時間
Linux nmc.nchu.edu.tw 2.4.7 #1 Wed Jan 24 10:56:54 CST 2002 i686 unknown
代表核心版本為2.4.7,#1代表本版本核心重編次數,核心重編的時間為10:56:54 01/24/2002

bullet

單號的次要版本表示測試版,雙號代表正式(穩定)版本

7.Linux核心升級方式有哪些

bullet

直接由新版本核心原始檔,重編核心
優點:直接升級至該核心版本
缺點:你必須較多時間下載整個核心的原始檔(壓縮過2.2.15的核心原始檔約16MB大小)
適合作較大幅度的版本提升,例如 2.4.6 --> 2.4.17

bullet

修補核心原始檔(Patch)
利用這種方式升級,你所需要修補的次數為新版本與舊版本的版本修補次數編號差。例如:由2.2.12升級至2.2.15,你必須下載patch-2.2.13、patch-2.2.14及patch-2.2.15,並逐一修補後,再行編譯核心。修補的方式如下(:
####首先你必須將patch file複製至/usr/src中
#cd /usr/src
#gzip -cd patch-2.2.13.gz | patch -p0
#gzip -cd patch-2.2.14.gz | patch -p0
#gzip -cd patch-2.2.15.gz | patch -p0
接著你就可以開始重編核心了。
優點:Patch File一般比全部核心原始檔小很多(每一個Patch大小由數百KB到1 MB左右不等),下載較快。
缺點:版本差距過大不適合以此方式升級。 


8.重編核心(2.4.6 --> 2.4.17為例)

bullet

前置作業
bullet

備份舊有核心
#cp  /boot/vmlinuz /boot/vmlinuz.2.4.6
如果/boot/vmlinuz只是一個指向真正核心的符號鏈結,直接將vmlinux刪除即可。

bullet

取得新核心壓縮檔(ex.linux-2.4.17.tar.gz),或修補程式檔(Patch)(ex.patch-2.4.8.gz, patch-2.4.9.gz...)

bullet

備份/usr/src/linux
一般linux只是一個符號鏈結,你可以直接將之移除

bullet

將壓縮檔在/usr/src下解開
#tar zxvf linux-2.4.17.tar.gz
#mv linux linux-2.4.17
linux-2.4.17.tar.gz解開後,會在/USR/SRC下自動產生LINUX目錄,將之搬移(OR RENAME)linux-2.4.17只是為了辨識版本方便。

#ln -s linux-2.2.15 linux

bullet

Change Directory To /usr/src/linux

bullet

重編核心的步驟 (以2.4.6升級至2.4.17為例)

  1. make mrproper
    在linux目錄下執行"make mrproper",此一步驟目的在清除不穩定目的檔(.o),確保核心重編時順利成功。這個步驟在修補核心(patch)後重編核心時,為重要且必要。

  2. make config (make menuconfig, make xconfig)
    這是重編核心時極重要的一個步驟,你必須針對系統現況,回答上百個問題,錯誤的選項可能導致核心無法使用。
    選像設定方式有三種:"make config"、"make menuconfig"及"make xconfig";"make config"採交談式一問一答;"make menuconfig"在文字模式下,採選單方式設定核心選項;"make xconfig"則是在圖形模式(X-Window)下的選單設定模式。
    當你完成冗長的設定程序之後,如果未指定設定內容儲存檔名,你的設定將會被儲存在./usr/src/linux/arch/i386/defconfig中,下次重編核心時,這就是你的預設(default)選項來源。

  3. make dep
    這個步驟幫你設定所的附設檔案,確保include file的相依關係。

  4. make clean
    清除舊系統核心與driver,如果你第一次重編核心,你可以略過這個步驟。

  5. make zImage
    編製一個新的核心,如果你的心核心大小超過640KB,你必須改用"make bzImage"。
    如果你希望編製新核心的過程中,順帶製作一個開機片,你可使用"make zdisk" or "make bzdisk"(if new kernle is larger than 640KB)。
    這個步驟所需時間約20~40分鐘不等(or longer),端視你系統CPU與RAM數量而定。編譯成功後,新核心位置在/usr/src/linux/arch/i386/boot/zImage or /usr/src/linux/arch/i386/boot/zbImage。

  6. 改變系統使用之核心
    #cp /usr/src/linux/arch/i386/bzImage    /boot/vmlinuz-2.4.17
    #cd /boot
    #ln  -s  /boot/vmlinuz-2.4.17   /boot/vmlinuz
    ###請確定你原有核心以備份。(如前置作業所述)
    如果你為使用lilo開機,你必須在編譯核心時製作開機片,或直接用"dd"將核心載入磁片中,以便開啟新系統。

  7. 編譯系統模組
    #make modules
    #make modules_install
    你必須執行此一步驟,否則你的心核心將無法使用你的舊模組。新的模組將會被安裝至/lib/modules/2.4.17目錄下。

  8. 更新System.map
    #cp /usr/src/linux/System.map /boot/System.map-2.4.17
    #rm /boot/System.map
    #ln  -s  System.map-2.4.17 System.map
    每一版本的系統核心都有其特有的系統功能映射檔System.map,以定義該版核心的所有功能資訊。

  9. 編輯lilo.conf,保留舊核心開機選項
    沒有人可以保證編輯的新核心一定可以開啟系統,保留舊核心開機選項是一個保險做法。你的lilo.conf修改之後大約會像以下的內容:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux

image=/boot/vmlinuz
label=linux
read-only
root=/dev/hda1

image=/boot/vmlinuz-2.4.6-10
label=linux.old
read-only
root=/dev/hda1

執行過lilo -v -v -v之後你就可以準備重新開啟新核心了。(By Reboot System)

  1. uname -a 
    檢查新核心版本。(After Reboot)
    [root@nmc ~]#
    uname -r
    2.4.17  --> Kernel is now 2.4.17