linux內核編譯步驟

     linux內核編譯步驟

對於linux新手來說,編譯內核相對有一些難度,甚至不知道如何入手,我通過在網上收集這方面的資料,最終編譯成功.現在我歸納了一下,寫出這一篇還算比較詳細的步驟,希望能對各位新手有一些

幫助。


1、  準備工作

(1)整理出系統需要支持的硬件、文件系統類型以及網絡協議等內容。

(2)建議用命令uname –r 查看一下系統的版本號,如果你的系統版本與將要編譯的內核版本一致,建議將/lib/modules下的內容備份,否則將來的make modules_install 步驟產生的文件會覆蓋這個路徑下的內容。

(3) A:下載並解壓linux內核,建議從http://www.kernel.org/pub/linux/kernel/ 下載內核,因爲安裝系統時所安裝的源代碼默認情況下支持很多設備,這樣給內核裁減增加了難度。以下假設你已經下載了內核的爲linux-x-y-z.tar.gz。一般都將linux內核源代碼放在/usr/src下,這裏仍然遵守這個習慣,如果你的這個路徑下已經存在這個版本的內核,建議將已有的改個名稱。

B:如果內核已經安裝(/usr/src/目錄有linux子目錄),跳過。如果沒有安裝,在光驅中放入linux安裝光盤,找到kernel-source-2.xx.xx.rpm文件(xx代表數字,表示內核的版本號), 比如RedHat linux的RPMS目錄是/RedHat/RPMS/目錄,然後使用命令rpm -ivh kernel-source-2.xx.xx.rpm安裝內核


2、清除從前編譯內核時殘留的.o 文件和不必要的關聯  

 cd /usr/src/linux

 make mrproper

確保源代碼目錄下沒有不正確的.o文件和文件依賴關係,執行該命令後,內核選項會回到默認的狀態下。如果你是下載的內核源碼,而且是第一次編譯,就沒有必要執行這一步操作


3、配置內核,修改相關參數,請參考其他資料

   在圖形界面下,make xconfig;字符界面下,make menuconfig

   在內核配置菜單中正確設置個內核選項,保存退出


4、正確設置關聯文件

   make dep

   根據上一步所選擇的選項,建立文件的依賴關係。

5、make clean

清理一些不必要的文件,如果你在上次編譯的基礎上,刪去了一些選項,建議你執行這一步操作,否則,就沒有必要了。


6、編譯內核

對於大內核(比如需要SCSI支持),make bzImage

對於小內核,make zImage


7、編譯模塊

make modules

編譯可加載模塊(即內核選項中選擇爲M的選項),編譯時間跟M選項的數量有關。


8、安裝模塊

make modules_install

  即將編譯好的modules拷貝到/lib/modules下,這就是爲什麼在“準備工作”的第三步提醒你備份的原因了。


9、使用新內核

方法一:

(1)更換內核:A、mv /usr/src/linuxX.X.X/system.map    /boot/system.map

           B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage   /boot/vmlinuz

(2)然後修改/etc/lilo.conf文件,加一個啓動選項,使用新內核bzImage/zImage啓動。格式如下:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

linear

default=linux-new    ### 告訴lilo缺省使用新內核啓動linux ###

append="mem=256M"


image=/boot/vmlinuz-2.2.14-5.0

       label=linux

       read-only

       root=/dev/hda5


image=/boot/bzImage(zImage)

       label=linux-new

       read-only

       root=/dev/hda5


保留舊有的啓動選項可以保證新內核不能引導的情況,還可以進入linux進行其他操作。


保存退出後,不要忘記了最重要的一步,運行/sbin/lilo,使修改生效

方法二:使用GRUB(修改grub.conf文件)

(1)更換內核:A、mv /usr/src/linuxX.X.X/system.map    /boot/system.map

           B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage   /boot/vmlinuz

(2)修改引導管理程序Grub,/etc/grub.conf

內容如下:

#boot =/dev/had

default =0

timeout =10

splashimage =(hd0, 0)/grub/splash.xpm.gz

title Red Hat Linux(2.4.20-8)

  root(hd0, 0)

  kernel /vmlinuz -2.4.20-8  ro root =LABEL =/

  initrd /initrd-2.4.20-8.img


方法三:修改啓動配置文件

現在大多數使用的都是grub啓動,需要修改/boot/grub/grub.conf,添加相應的啓動信息,添加內容的最簡單格式如下:

title 顯示在啓動菜單上的名稱

root 根文件系統掛載分區

kernel 壓縮過的內核文件名

initrd 根文件系統文件名

             如:

             title My new kernel

             root (hd0,2)

             kernel /boot/vmlinuz-x.y.z

             initrd /boot/initrd-x.y.z.img

10、重新生成ram磁盤

如果您的系統中的/etc/lilo.conf沒有使用了ram磁盤選項initrd,略過

如果您的系統中的/etc/lilo.conf使用了ram磁盤選項initrd,

使用mkinitrd initrd-內核版本號 內核版本號命令重新生成ram磁盤文件,例如我的Redhat 6.2:

mkinitrd initrd-2.2.14-5.0 2.2.14-5.0

之後把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:

initrd=/boot/initrd-2.2.14-5.0


ram磁盤能使系統性能儘可能的優化,具體參考/usr/src/linux/Documents/initrd.txt文件


11、重新啓動,OK!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章