網上找的linux內核編譯各種資料

mv /home/zhb/Downloads/ linux-2.6.38.4.tar.bz2 /usr/src

tar
-xvf linux-2.6.38.4.tar.bz2

## 使用make install#一步到位或者繼續使用下面的指令

make mrproper
#確保目錄下沒有不正確的.o文件和文件依賴

make menuconfig
#需要Ncures庫支持,xconfig需要qt庫支持,config和oldconfig不需要,配置好內核需要的功能後保存爲.config文件

make dep
#對內核的配置文件.config執行完整性和依賴性檢測

make clean
#清除不必要的文件

make bzImage
#大內核用它否則用zImage,可執行內核的壓縮格式,此時生成內核文件arch/x86/boot/bzImage

make modules
#編譯可加載模塊

make modules_install
#將編譯好的模塊移動到/lib/modules/2.6.38.4/對應的目錄中去;insmod 會查找這些目錄

mkinitrd initramfs
-2.6.38.4.img 2.6.38.4 #生成initramfs-2.6.38.4.img 根文件系統初始化文件

mv arch
/x86/boot/bzImage /boot/vmlinuz-2. 2.6.38.4

mv initramfs
-2.6.38.4.img /boot/initramfs-2.6.38.4.img

mv System.map
/boot/System.map

vi
/boot/grub/menu.lst #模仿老的內核啓動項添加一個新的啓動項,只要修改相應的內核文件明和初始
reboot
#重啓

安裝完Ubuntu後,通常是雙系統(windows+ubuntu),以後每次啓動系統之前會出現一個菜單列表提示選擇進入哪一個系統,默認是進入Ubuntu。很多人安裝ubuntu只是出於一時興起,用一段時間以後便會慢慢”拋棄“ubuntu轉回到熟悉的windows,即便不再用ubuntu,又懶得刪掉(刪掉的代價很大,慎重!)。可是開機啓動的時候默認的啓動項是ubuntu,於是每次都需要手動選擇windows,加之一旦動作慢了便會自動進入默認的Ubuntu,只好無奈的重啓。。。

 

問題:在雙系統下,如何修改開機默認啓動項?

方案:進入Ubuntu,打開/etc/default/grub文件 sudu gedit /etc/default/grub

修改GRUB_DEFAULT = X(默認爲0)

**X的值可以這樣計算:打開/boot/grub/grub.cfg文件,其中包含了開機菜單中所有啓動項的名稱,格式如:menuentry 'Ubuntu,  whith Linux 2.6.35-25-generic',所有啓動項名稱以menuentry打頭。找到windows啓動項的序號,這個序號減1的值即爲X的值。

最後一步,sudo update-grub,更新/boot/grub/grub.cfg文件

 

網上的方法多數是直接修改/boot/grub/grub.cfg, set default = X (X值同上)。雖然更簡單了,但是這裏不建議直接修改該文件。

 

Note: 以上方法適用於grub 2,對應的Ubuntu版本爲9.10以後。




 

Ubuntu編譯內核

內核編譯:(部分摘錄自http://forum.ubuntu.org.cn/viewtopic.php?t=134404)

1.到http://www.kernel.org下載需要編譯的內核源碼文件;

2.安裝有關編譯程序。安裝make ,gcc, make-kpkg,運行menuconfig等等和編譯內核相關的工具。

安裝不了,請檢查/etc/apt/sources.list 文件。 有關命令:

指令:

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

3.解壓源代碼 內核源碼文件爲了編譯管理建議放在/boot/usr/src/kernel/目錄下,如果當前之目錄所在的磁盤空間不足,也可解壓到其他目錄下。

解壓指令: mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/

4.進入內核源碼文件夾 cd  /usr/src/kernel/linux-...

5.開始編譯前的準備工作。 首先,清理以前編譯時留下的臨時文件。如果是剛剛解開的包,不需要執行這步。如果是第二次或者是第n次編譯,那麼一定要執行。

相關命令如下: $ sudo make mrproper

網上很多教程上說把現在使用的內核的config拷貝過來參考,據實驗,是不需要的,ubuntu還有 debian會自動做這步。不過這條命令倒是可以學習一下。當然你可以將以前的配置拷貝過來。 命令:

代碼:

cp /boot/config-`uname -r` ./.config
6.開始配置內核選項。 相關命令:

代碼:

$sudo make menuconfig (此時最好選擇加載之前的內核.config文件在之前的配置基礎上添加新的需要添加的新特性生成新的.config文件,內核選項的具體解析請參考其他博客)

7.、開始編譯內核。 ubuntu的工具是make-kpkg,和其他的發行版相比,步驟相對簡單。 相關命令:

代碼:

$sudo make-kpkg clean 

這條命令好像不要超級權限,很多資料上說要,不過這不是原則問題。

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

編譯完成後,將會再當前目錄的上級目錄下生成兩個文件,linux-image-...,linux-headers-...文件,這就是我們需要的內核包。

8.安裝編譯好的內核包 進入當前內核源碼目錄的上級目錄,進行安裝: 指令:

cd ..

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

$ sudo dpkg -i  linux-headers-(按tab鍵)
9.安裝成功後重啓電腦,選新內核啓動:

指令: $ reboot


===================================================================
內核卸載: 首先就是使用如下命令,列出所有安裝的內核,下表中,帶有image的就是內核文件。 從中選擇要卸載的包,用apt-get來卸載
[tc@ibm:~]$ dpkg --get-selections|grep linux

libselinux1                                     install

linux-386                                      install

linux-image-2.6.15-23-386                    install

linux-image-2.6.15-27-386                    install

linux-image-2.6.15-27-686                    install

linux-image-2.6.15-28-386                    install

linux-image-2.6.15-28-686                    deinstall

linux-image-386                               install

linux-kernel-headers                           install

linux-restricted-modules-2.6.15-23-386        install

linux-restricted-modules-2.6.15-27-386        install

linux-restricted-modules-2.6.15-27-686        install

linux-restricted-modules-2.6.15-28-386        install

linux-restricted-modules-2.6.15-28-686        deinstall

linux-restricted-modules-386                   install

linux-restricted-modules-common               install

linux-sound-base                               install

util-linux                                       install

具體的卸載方法爲 sudo apt-get remove linux-image-(接內核版本) sudo apt-get remove linux-headers-(接內核版本)

執行上述兩條指令就可以實現自動刪除內核文件了,還可以釋放磁盤空間。


此時再執行 dpkg --get-selections|grep linux 可以看到需要刪除的內核文件已經不存在了-----卸載內核成功!



一、下載源代碼和編譯軟件的準備
下載內核源代碼:http://www.kernel.org/
注意,點擊2.6.25內核的F版,即完整版。
如果你懶得去網站點聯接,運行下列命令:

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

安裝有關編譯程序。安裝make ,gcc, make-kpkg,運行menuconfig等等和編譯內核相關的工具。
安裝不了,請檢查/etc/apt/sources.list 文件。
有關命令:
代碼:
$sudo  apt-get install build-essential kernel-package   libncurses5-dev


二、解壓源代碼
注意,網上很多教程上說應該解壓到 /usr/src,純屬以訛傳訛,linux掌門人linus說解壓到任何目錄上都可以。當然,linus的說法是正確的。我放在自己的主目錄下的src目錄。
如果你下載源代碼是放到自己的主目錄下或者運行上面的wget下載的,那麼運行下列命令:
代碼:
$ cd ~
$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/


現在,源代碼就在 ~/src/linux-2.6.25.10
進入源代碼的目錄,準備下一步的工作。後面都在這個目錄裏面進行。
代碼:
$ cd ~/src/linux-2.6.25.10


三、開始編譯前的準備工作。
首先,清理以前編譯時留下的臨時文件。如果是剛剛解開的包,不需要執行這步。如果是第二次或者是第n次編譯,那麼一定要執行。
相關命令如下:
代碼:
$ sudo make mrproper

網上很多教程上說把現在使用的內核的config拷貝過來參考,據實驗,是不需要的,ubuntu還有
debian會自動做這步。不過這條命令倒是可以學習一下。當然你可以將以前的配置拷貝過來。
命令:
代碼:
cp /boot/config-`uname -r` ./.config


四、開始配置內核選項。
相關命令:
代碼:
$sudo make menuconfig


配置用到的鍵只有幾個,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,和其他的發行版相比,步驟相對簡單。
相關命令:
代碼:
$sudo make-kpkg clean   這條命令好像不要超級權限,很多資料上說要,不過這不是原則問題。
$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers


上述命令中的dell1400可以用自己喜歡的字符代替,最後的字符一定是數字.
輸完上述命令回車之前,建議大家把瀏覽器還有別的運用程序都關掉,機器開始的工作比較艱苦。我的機器大概十幾分鍾。

七、安裝內核
編譯完成就是安裝工作。編譯好的內核在上一層目錄。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb兩個文件,如果你不搞開發的話,只要安裝內核就可以,頭文件以後要用的時候再說。
安裝相關命令:
代碼:
$ cd ..
$ sudo dpkg -i   linux-image-(按tab鍵)


文件名很長,如果不用tab自動補足是不可能的,tab鍵萬歲。
安裝完成後和老內核比較一下大小
代碼:
$ ls -l /boot/


八、重新啓動驗證新內核。
代碼:
$ sudo reboot


九、顯卡驅動
如果你的顯卡和我一樣是nvidia顯卡,啓動之後往往無法正常進入x-window。即使能看到gdm登錄界面,效果也是很差的。
那麼就要安裝nvidia驅動。
用ctrl+alt+f1 進入字符命令行,輸入用戶名,密碼登錄。
命令:
代碼:
下載驅動
$ wget http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/NVIDIA-Linux-x86-173.14.12-pkg1.run

$sudo -s
輸入密碼取得超級權限。
#ps ax
看看和gdm相關的進程,把這些進程全部關閉;用sudo /etc/init.d/gdm stop有可能有一個進程沒有關閉:
#kill 進程號
然後安裝nvidia顯卡驅動,當然驅動要先下好,到nvidia驅動所在的目錄裏,運行:
# sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run

重新啓動以後就ok。要用nvidia的驅動,每次升級內核都要這麼做。

十、無線網卡
相關的內核選項是
Networking --->
Wireless --->
Generic IEEE 802.11 Networking Stack (mac80211)
還有4965的驅動。

4965 無線網卡驅動雖然已經編入內核,但沒有firmware無法使用。需要把原來內核的firmware拷貝到新內核對應的目錄,名字和內核一致,我的內核是 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.10dell1400/

上面的命令和下面的命令是等價的:
$ cd /lib/firmware/
$ sudo cp -R 2.6.24-16-generic/  2.6.25.10dell1400/


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

附編譯使用的機器配置:dell vostro 1400,t8100,nvidia 8400cs顯卡,內置SigmaTel STAC9228芯片的聲卡,4965無線網卡,BCM5906M千兆網卡,3G內存,160G硬盤,combo刻錄。
編譯系統版本:ubuntu 8.04桌面版.
發佈了40 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章