Ubuntu內(nèi)核基本系統(tǒng)裁減與編譯
Ubuntu內(nèi)核是用系統(tǒng),于是我學(xué)習(xí)研究了Ubuntu內(nèi)核,在這里對大家詳細(xì)介紹下Ubuntu內(nèi)核系統(tǒng)應(yīng)用,希望對大家有用。Ubuntu操作系統(tǒng)內(nèi)核裁減與定制。
一、Ubuntu內(nèi)核裁減與編譯
1、安裝make ,gcc, make-kpkg,運行menuconfig等等和編譯Ubuntu內(nèi)核相關(guān)的工具。安裝命令如下$sudo apt-get install build-essential kernel-package libncurses5-dev如果無法安裝請檢查/etc/apt/sources.list
2、解壓源代碼可以解壓到任意目錄,我們在這里解壓到/usr/src
- tar -xvf linux-2.6.28.N -C /usr/src
- cd /usr/src/linux-2.6.28.N
3、開始編譯前的準(zhǔn)備工作
$ sudo make mrproper
網(wǎng)上很多教程上說把現(xiàn)在使用的Ubuntu內(nèi)核的config拷貝過來參考,據(jù)實驗,是不需要的,ubuntu還有debian會自動做這步。不過這條命令倒是可以學(xué)習(xí)一下。當(dāng)然你可以將以前的配置拷貝過來。命令:代碼:cp /boot/config-`uname -r` ./.config
4、開始配置Ubuntu內(nèi)核選項
a、sudo make menuconfig,根據(jù)需要進(jìn)行Ubuntu內(nèi)核配置。
5、編譯Ubuntu內(nèi)核
$sudo make-kpkg clean 這條命令好像不要超級權(quán)限,很多資料上說要,不過這不是原則問題。$ sudo make-kpkg --initrd [--append-to-version=任意名稱] kernel_image [kernel-headers]
例如:make-kpkg –initrd kernel_image
kernel-headers(kernel具體版本號如2.6.28.3,如果***編譯時如果指定kernel-headers會報錯。)說明可以用make -j2代替。
6、安裝Ubuntu內(nèi)核
編譯完成就是安裝工作。編譯好的Ubuntu內(nèi)核在上一層目錄。包括linux-headers-...-_i386.deb和linux- image-...-i386.deb兩個文件,如果你不搞開發(fā)的話,只要安裝Ubuntu內(nèi)核就可以,頭文件以后要用的時候再說。
安裝相關(guān)命令:$ cd ..
$ sudo dpkg -i linux-image-(按tab鍵)說明:1、如果用make -j2編譯,則可以用 make install 和make modules_install進(jìn)行代替
2、如果用make 直接編譯,則需要用,mkinitramfs -o initrd.img-2.6.28.N 2.6.28.N生成initrd文件并進(jìn)行/boot/grub/menu.lst增加新Ubuntu內(nèi)核選項。
3、在/boot/grub/menu.lst中可以不實用uuid,方法可以將/etc/initramfs-tools/conf.d/resume內(nèi)容用#號注釋,update-initramfs -u -k `uname -r`(如果報Kinit: no resume image,doing normal boot...)如果報此錯誤可以用該方法解決。
二、基本系統(tǒng)裁減
一般有兩種方法,將原有系統(tǒng)上進(jìn)行刪除,刪除無用的文件;另一種方法就是在新的文件系統(tǒng)中增加文件,我們可以采用***種辦法來作,比較簡單的辦法就是將所有文件拷貝到一個新的磁盤分區(qū),進(jìn)行操作系統(tǒng)文件裁減,如果刪除文件導(dǎo)致系統(tǒng)無法啟動可以將文件從原始系統(tǒng)中拷貝過來。
1、首先我們對命令進(jìn)行刪除,刪除那些不常用的命令。
2、對動態(tài)庫進(jìn)行刪除,使用ldd comand 確定文件使用的動態(tài)庫。(可以盡量將所有模塊編譯到Ubuntu內(nèi)核而不是編譯成模塊,這樣可以減小文件系統(tǒng)裁減的難度。),刪除多余的動態(tài)庫。
3、對/dev目錄進(jìn)行裁減,默認(rèn)可以保留MAKEDEV,console,null,random,urandom,以及bus,pts hm這些文件和目錄。
4、對/usr目錄進(jìn)行裁減,僅保留bin,lib,sbin,share,local幾個目錄即可。
a、bin,sbin根據(jù)需要保留必要命令即可。
b、lib保留gconv,i686,locale,sudo,ssl,udev目錄和必要的動態(tài)庫即可。
c、share目錄保留command-not-found file i18n terminfo zoneinfo即可,并且可以將這些目錄中不需要的文件刪除。
5、裁減var目錄保留 lock log mail run spool 幾個目錄即可,根據(jù)需要刪除這些目錄中多余文件。
6、裁減etc目錄,根據(jù)需要進(jìn)行裁減。
說明:
1、/usr/bin/tput命令和/etc/lsb-*文件可以導(dǎo)致系統(tǒng)重啟時[0K]不顯視,裁減時必須主義。
2、命令行下修改時區(qū)a、 sudo tzselect 進(jìn)行選擇;b、將/usr/share/zoneinfo/Asia/Shanghai/etc/localtime
7、boot目錄裁減
根據(jù)需要修改initrd.img-2.6.28.N
1、可以使用gzip -cd /boot/imagefile.img |cpio -imd –quiet對initrd.img-2.6.28.N進(jìn)行解壓,修改參數(shù)。
2、用find . |cpio –quiet -H newc -o |gzip -9 -n > /boot/initrdfile.img生成壓縮的initrd文件?;蛘呤褂茫╢ind . |cpio –quiet -c -o |gzip -9 -n > /boot/initrdfile.img,不過高版本Ubuntu內(nèi)核使用前面的壓縮方式。
3、可以用mkinitramfs -o initrd.img-2.6.28.N 2.6.28.N生成initrd文件,也可以用update-initramfs -u -k `uname -r` 升級現(xiàn)有initrd進(jìn)行升級。
8、重啟進(jìn)行必要的調(diào)整。
說明:
1、如果報error:”kernel.maps_protect” is an unknow key”可以在/etc/sysctl.conf將該行屏蔽。
2、如果報error:”vm.mmap_min_addr” is an unknow key可以設(shè)置Security option選項 重新編譯Ubuntu內(nèi)核。
【編輯推薦】