如何編譯內核
內容提要:本文介紹編譯內核的具體操作和簡單原理,請各位高手品評並希望給學習Linux的新手一些幫助.
版權聲明:本文版權屬於岳光。本文件可以在非商業目的下自由傳播,但必須保持本文的完整,並包含本版權聲明。如果要將本文的全部或部分用於商業目的,需要得到本人同意。(請聯系:[email protected]同時歡迎大家提問)
准備工作:
內核(Kernel)即是Linux系統的最重要部分.它負責為軟件提供硬件設備的抽象,處理進程資源的分配,管理內存和文件系統,及網絡等.因此要想讀寫NTFS文件系統,就必需將核心編譯為包含NTFS模塊,要想撥號上網就必需使核心支持PPP協議…有了核心的強大功能才能使pppd,FTP,bash等程序得以有效的運行和開發.Linux的源代碼是公開的因此內核可定制編譯以適應不同的需要.(注意:編譯內核並不是重新安裝系統.)
要想編譯內核需先獲得其源代碼,源代碼可從安裝盤安裝,亦可下載解壓/usr/src/linuxxxxxx目錄中.(linuxxxxxxx目錄名可自定)
配置內核:(我的系統是Red Hat9)
首先make mrproper進行清理工作
其次必需配置要把什麼編入內核.執行make menUConfig進入配置程序.進入其中的分類後可見<>[]形式的條目移動光標按空格可選擇'*'M'空'.*表示編入內核.M表示編譯為模塊(即內核中並不含該部分有需要時自動載入,一定時間不用時自動卸載,以增強kernel的靈活性節省系統資源,減小kernel體積).'空'表示不編入,即新內核不支持該功能.配置完畢保存.
注意:由於內核配置繁瑣,有時只是想改變有限的條目,而對其它的配置一竅不通.這樣可使用默認配置並稍加修改.未經修改的/usr/src/linuxxxxx/.config及/usr/src/linuxxx/configs下的文件都是默認配置.可在make mrproper後cp /usr/src/linuxxx/configs/所選文件 usr/src/linuxxxx/.config(如直接使用.config自然就不用cp了)再make menuconfig 略加修改.配置完畢保存!還有其他類似menuconfig的工具如:xconfig(需在XWindows中運行)
等.
配置完成後make dep;make clean進行聯接 清除
編譯內核:
執行make bzImage
make modules
make modules_install
編譯成功!/usr/src/linxxxxxxx/arch/i386/boot/bzImage即為編好的內核.
配置LILO:
配置後即可引導內核.
將bzImage拷貝至/或/boot下(可更名)
編輯/etc/lilo.conf(編輯前內容類似下面)
prompt
timeout=50
default=WindowsXP
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
image=/boot/vmlinuz-2.4.20-8bigmem
label=Linux
initrd=/boot/initrd-2.4.20-8bigmem.img
read-only
append="root=LABEL=/"
other=/dev/hda1
optional
label=WindowsXP
在此文件中加入:
image=”bzImage”的路徑/bzImage
label=自定(即是啟動時的標識)
read-only
配置後應類似:
prompt
timeout=50
default=WindowsXP
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
image=/boot/vmlinuz-2.4.20-8bigmem
label=Linux
initrd=/boot/initrd-2.4.20-8bigmem.img
read-only
append="root=LABEL=/"
other=/dev/hda1
optional
label=WindowsXP
image=/boot/bzImage
label=Linuxnew
read-only
然後保存,執行lilo命令.
重起後即可使用新內核了.
附: 編譯內核詳細請看kernelHOWTO(http://www.chinalinuxpub.com/doc/howto)
核心不宜過大否則影響速度.執行dmesg命令後有Memory:一項可觀察kernel大小
支持/ /boot文件系統的條目應以*編入否則內核無法使用.