天天看點

編譯自己的UBUNTU核心 STEP BY STEP

ubuntu環境下編譯核心step by step

聲明:本文是個人參考網上有關資料,編譯2.6.25核心的總結,如按本文步驟編譯核心造成的責任和本文作者無關。

本文放在本人的blog上面:http://hi.baidu.com/ffbp89/

本文還有姊妹篇《老筆記本編譯2.6.20核心指導》

如果有修改,也在blog上。

歡迎轉載本文,但是請不要取消本聲明。

寫這篇東西主要是教學目的,學生可以結合編譯核心複習shell的有關指令。

機器配置:dell vostro 1400,t8100,nvidia 8400cs顯示卡,内置SigmaTel STAC9228晶片的聲霸卡,4965無線網卡,BCM5906M前兆網卡,3G記憶體,160G硬碟,combo刻錄。

編譯系統:ubuntu 8.04桌面版.

一、下載下傳源代碼和編譯軟體的準備

下載下傳核心源代碼:http://www.kernel.org/

注意,點選2.6.25核心的F版,即完整版。

如果你懶得去網站點聯接,運作下列指令:

[code]$cd ~

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.10.tar.bz2

[/code]

安裝有關編譯程式。安裝make ,gcc, make-kpkg,運作menuconfig等等和編譯核心相關的工具。

安裝不了,請檢查/etc/apt/sources.list 檔案。

有關指令:

[code]

$sudo apt-get install build-essential kernel-package libncurses5-dev

[/code]

二、解壓源代碼

注意,網上很多教程上說應該解壓到 /usr/src,純屬以訛傳訛,linux掌門人linus說解壓到任何目錄上都可以。當然,linus的說法是正确的。我放在自己的主目錄下的src目錄。

如果你下載下傳源代碼是放到自己的主目錄下或者運作上面的wget下載下傳的,那麼運作下列指令:

[code]

$ cd ~

$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/

[/code]

現在,源代碼就在 ~/src/linux-2.6.25.10

進入源代碼的目錄,準備下一步的工作。後面都在這個目錄裡面進行。

[code]

$ cd ~/src/linux-2.6.25.10

[/code]

三、開始編譯前的準備工作。

首先,清理以前編譯時留下的臨時檔案。如果是剛剛解開的包,不需要執行這步。如果是第二次或者是第n次編譯,那麼一定要執行。

相關指令如下:

[code]

$ sudo make mrproper

[/code]

網上很多教程上說把現在使用的核心的config拷貝過來參考,據實驗,是不需要的,ubuntu還有

debian會自動做這步。不過這條指令倒是可以學習一下。當然你可以将以前的配置拷貝過來。

指令:

[code]

cp /boot/config-`uname -r` ./.config

[/code]

四、開始配置核心選項。

相關指令:

[code]

$sudo make menuconfig

[/code]

配置用到的鍵隻有幾個,esc退出菜單;空格改變選項狀态;光标鍵上下左右移動,回車標明。

選項意義:M是編譯成可以随時加入的子產品,*是編譯進入核心,空就是不要。

配置選項非常多,具體配置可以參考金步國先生翻譯的資料:Linux 2.6.19.x 核心編譯配置選項。

參考網址:http://lamp.linux.gov.cn/Linux/kernel_options.html

為了一次成功,請大家遵循一個原則,如果你自己使用的核心已經選用了某個選項,如果你沒用充分的理由,不要随便改動。這樣雖然核心不那麼精簡,但是不容易出現問題。

我們可以精簡的部分是硬體子產品部分,對于自己沒有的硬體要毫不猶豫的清除。

如果你很執着,或者你有潔癖,你也可以一項項對過去,按照金步國先生的資料描述去選擇基本上沒有問題。

五、必須強調的幾個選項:

1、在“General setup”裡面的“Prompt for development and/or incomplete code/drivers”金步國認為是不需要。但是如果你的硬體比較新,那幾乎是必須選的,這樣,我們才可以找到4965無線網卡,alsa聲音驅動等等。

Kernel log buffer size 我選15,雙核。如果你用ia64,要選16。

Control Group support 叢集支援?可以不要

Choose SLAB allocator (SLUB (Unqueued Allocator)) 記憶體管理模式slab和slub選擇slub。

2、在“Block layer”裡,假如沒有2TB的硬碟,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,誰有2TB的檔案?

3、Processor type and features中是關于cpu的,要認真選。

Symmetric multi-processing support是打開多核的開關,我的cpu是雙核的,選中。

Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu後,把Generic x86 support選項取消。

Subarchitecture Type 選(PC-compatible)

Maximum number of CPUs 輸入自己的核心數目,我輸入2。

SMT (Hyperthreading) scheduler support說的是超線程技術,P4有支援的,我的t8100不支援,目前大部分市場上的家用cpu都不支援。

High Memory Support (4GB) 1G以下選1G;我是3G,選4G;4G以上的選16G

在“ Timer frequency ”裡,預設是250Hz,較新的cpu都可以選擇了1000Hz,性能更好。

4、Power management options中把APM (Advanced Power Management) BIOS support關閉。現在的電腦都用acpi了。

CPU Frequency scaling 是筆記本cpu節電技術

Default CPUFreq governor (conservative) cpu節電模式有四個,筆記本預設選conservative比較好。

ACPI Processor P-States driver 必須選,不然CPU Frequency就不能用。

後面的可選自己硬體相關的,我選的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的統統消滅。

5、Bus options的選擇:

Bus options (PCI, PCMCIA, EISA, MCA, ISA)

PCI support

PCI Express support 現在新買的機器基本上都是PCI Express了

ISA support 較新的新機器沒有ISA裝置,可以去掉

MCA support 去掉

NatSemi SCx200 support 去掉

PCI Hotplug Support

Support for PCI Hotplug (EXPERIMENTAL) 如果沒有PCI熱插拔裝置,去掉

這裡的選項可以考慮全部編譯進核心,而不是以子產品形式存在。

6、Device Drivers是重點,由于linux不但面向個人工作站,更多的是面向伺服器的應用,是以可以把自己機器上沒有的硬體全部去掉,而不用面面俱到。但是通用型的選項要慎重。

比如在網卡的部分,除了我的千兆網卡 Broadcom Tigon3 support和4965無線網卡Intel Wireless WiFi 4965AGN,其餘的硬體支援統統去掉。

再比如聲霸卡部分,我的是hd聲霸卡,我隻是在PCI devices中,選intel hd 聲霸卡,再選Build IDT/Sigmatel HD-audio codec support,除此之外的硬體支援全部去掉。

聲霸卡還有一個細節,在ubuntu7.10裡面, 需要在/etc/modprobe.d/alsa-base後面添加options snd-hda-intel probe_mask=1 model=3stack,這樣我的筆記本喇叭才可以發聲,不然隻有外接耳機或者音箱。這次編譯以後,這個動作就不必了,但是兩個耳機插口隻有一個可以用了。

再比如我的電腦中沒有agp,就可以直接把agp相關的選項全部取消。

要注意的:

ATA/ATAPI/MFM/RLL support

Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬碟上,那麼這裡一定要選*,選M都不行。否則啟動時會出現“waiting for root file system”的提示而停滞不前。

SCSI emulation support 要用刻錄機,必須選。

SCSI device support 現在都是SATA硬碟,一定要選*

SCSI disk support 如果你的/boot放在SATA硬碟上,一定要選*。

SCSI CDROM support 雖然康寶刻錄機是ide接口的,但是必須把它當成scsi接口的,這是老問題了。用刻錄機,必須選。

Graphics support

Support for frame buffer devices 選中,進入選擇

VESA VGA graphics support 選上,不然字元界面啟動會有問題,

後面的顯示卡選擇:由于我的顯示卡是nvidia 8400gs,要自己安裝nvidia公司的驅動,是以一個都沒有選。這樣導緻ubuntu開機動畫會出問題,我索性在grub中的splash字元全部删除,把開機動畫關閉。字元界面很正常。

Console display driver support 有人開機後字元控制台錯誤,就是這部分選項沒有選,出問題了。

Framebuffer Console support 需要打開。

Bootup logo 開機圖示,會在自檢的畫面上加上個性圖示。需要在grub上添加“vga=”的選項,可以參考http://dotimes.com/articles/t23-slackware-framebuffer.html

7、File systems

Filesystem in Userspace support 簡稱fuse。是必選的,如果你要用windows分區。

CD-ROM/DVD Filesystems

ISO 9660 CDROM file system support 一般選*

DOS/FAT/NT Filesystems

VFAT (Windows-95) fs support 有FAT32分區就選*吧

NTFS file system support 有NTFS檔案系統就選*吧

NTFS write support 如果想對 NTFS檔案系統進行寫操作,選*

必須将啟動盤的檔案系統編譯進核心,預設是編譯成子產品,這樣無法啟動系統。ubuntu采用的檔案系統是ext3,請把ext2,ext3相關的必要選項都編譯進入核心。

8、Virtualization這個大類是我多花幾百元買t8100的主要原因,因為t8100支援intel vt技術

使linux上的虛拟機的性能大幅度提高。這裡的選項我除了amd的,其他都編譯成子產品。

9、全部設定完成,最後一項是儲存設定。

按照我的習慣,先在上一層目錄儲存一個備份,檔案名類似 ../config20080630

然後再儲存到當起目錄,檔案名 .config

退出設定程式。

六、開始編譯核心。

ubuntu的工具是make-kpkg,和其他的發行版相比,步驟相對簡單。

相關指令:

[code]

$sudo make-kpkg clean 這條指令好像不要超級權限,很多資料上說要,不過這不是原則問題。

$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers

[/code]

上述指令中的dell1400可以用自己喜歡的字元代替,最後的字元一定是數字.

輸完上述指令回車之前,建議大家把浏覽器還有别的運用程式都關掉,機器開始的工作比較艱苦。我的機器大概十幾分鐘。

七、安裝核心

編譯完成就是安裝工作。編譯好的核心在上一層目錄。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb兩個檔案,如果你不搞開發的話,隻要安裝核心就可以,頭檔案以後要用的時候再說。

安裝相關指令:

[code]

$ cd ..

$ sudo dpkg -i linux-image-(按tab鍵)

[/code]

檔案名很長,如果不用tab自動補足是不可能的,tab鍵萬歲。

安裝完成後和老核心比較一下大小

[code]

$ ls -l /boot/

[/code]

八、重新啟動驗證新核心。

[code]

$ sudo reboot

[/code]

九、顯示卡驅動

如果你的顯示卡和我一樣是nvidia顯示卡,啟動之後往往無法正常進入x-window。即使能看到gdm登入界面,效果也是很差的。

那麼就要安裝nvidia驅動。

用ctrl+alt+f1 進入字元指令行,輸入使用者名,密碼登入。

指令:

[code]

$sudo -s

輸入密碼取得超級權限。

#ps ax

看看和gdm相關的程序,把這些程序全部關閉;用sudo /etc/init.d/gdm stop有可能有一個程序沒有關閉:

#kill 程序号

然後安裝nvidia顯示卡驅動,當然驅動要先下好,到nvidia驅動所在的目錄裡,運作:

# sh ./NVIDIA-Linux-x86-173.14.05-pkg1.run

[/code]

重新啟動以後就ok。要用nvidia的驅動,每次更新核心都要這麼做。

十、無線網卡

相關的核心選項是

Networking --->

Wireless --->

Generic IEEE 802.11 Networking Stack (mac80211)

還有4965的驅動。

4965無線網卡驅動雖然已經編入核心,但沒有firmware是沒有辦法用的。

解決辦法有兩個:一個是用原來的,另外一個辦法是下載下傳最新的。

第一個辦法:

[code]

建立一個目錄,名字和核心一緻,我的核心是linux-image-2.6.25.10dell1400,那建的目錄名就是2.6.25.10dell1400

$ cd /lib/firmware/

$ sudo mkdir 2.6.25.10dell1400

把你的老核心中的4965的firmware拷貝過來。

$ sudo cp 2.6.24-16-generic/* 2.6.25.4dell1400/

[/code]

重新啟動系統,無線網卡就正常了。

第二個辦法:

通路http://www.intellinuxwireless.org/?n=downloads&f=ucodes_4965

下載下傳新的intel官方fireware,建立目錄和前面一樣,解壓之後把檔案放到目錄裡面就ok了。

轉載于:https://www.cnblogs.com/XiaKewei2011/archive/2012/01/19/2327447.html

繼續閱讀