Debian編譯內核教程


個人拼湊

基本方法

先是獲取內核源碼
方法1、內核官網下載內核
官網: 在 kernel 的官網上有三種版本,mainline,stable,longterm
mainline 是主線版本,最新的,像 linux-3.7 或是 3.8-rc1 stable 是穩定版,像 linux-3.7.1
longterm 是長期支持版,目前官網上是 2 個,3.0,3.4,再加一個后娘養的 3.2
還有一個是 eol,當然就是不再支持了,3.5.3.6 就是 eol 了 選那個隨便 建議穩定版
方法2、是用git ,git 的優點是取出很快,不用打補丁,缺點是第一次比較慢
穩定版 git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
老大版 git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
先裝上 git-core 這個軟件包 一般默認是 master 這個分支,當然大家可以查看遠程分支
git branch -r 取出的話,可以看根據上面的版本 然后 git checkout 你要的版本
下次更新 直接 git pull,包下載,包整合,如果是整合失敗再手工整合,幾率比較小

首先獲取一下root權限

sudo -s -H

安裝必要的工具

make gcc gdb bison m4 autoconf automake libtool dpkg-dev libncurses5-dev build-essential kernel-package fakeroot

可選安裝:

sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt

這一步安裝qt庫 實現圖型配置 不是必須個人沒使用
找到你內核下載的目錄 把源碼復制到any directory you like然后tar -jxvf +內核文件名
然后進到解壓目錄 ls一下看下幾個目錄找到跟你下載的內核文件名一樣的文件夾
進到目錄 然后配置內核參數

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

這是用現在的內核配置新內核
內核配置 make nconfig 自定義配置 nconfig 是在 2.6.35 之后推薦用的,也建議不要再用回以前的menuconfig
恩 內核編譯重要的就是內核配置 這塊需要單獨拿出來講 先放一邊 如果嫌這樣配置麻煩的話可以從最小化配置,make defconfig,再make nconfig或者用make localmodconfig自動精簡內核
接下來就是編譯了

make-kpkg clean
(sudo)fakeroot make-kpkg --initrd --append-to-version= -內核名字 kernel_image kernel-headers -jn

n根據gentoo的手冊上推薦是線程數+1 這個可以自己根據情況來
然后等一會就可以了 編譯好的內核在上一層目錄。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb兩個文件,image那個是內核
切換到上一層目錄然后

(sudo)dpkg -i + 新內核

ps:打補丁

我們打補丁一般的目的是為了穩定或者加一些其他功能,比如打上 3.7.1 的補丁 或者加入 realtime 的補丁,打補丁是在主線版本之上的,像 3.7.1 是在 3.7 上面 patch
可能過幾天又出來 3.7.2,也是在 3.7 上的,這時你如果是 3.7.1,要先刪除掉 3.7.1 如果是 3.8-rc1,也是在 3.7.0 上面打的,而不是 3.7.1
打補丁實例,假設以我們下載的是 patch-3.7.1.xz,
先切換到你的源碼目錄,接着 xzcat 補丁包的位置/patch-3.7.1.xz | patch -p1
刪除:xzcat 補丁包的位置/patch-3.7.1.xz | patch -p1 -R
建議下載一個相近的主線版本,然后用補丁包構造出你想要的版本,這樣不用一直下載 整包,建議大家用 xz 的壓縮包 打補丁這項工作一般是下載完源碼后就要做的

編譯方法

kernel官方的方法,deb-pkg,這個是在上層目錄中生成image,header,libc-dev或者也包括 firmware,這個也是生成deb包的,安裝就是dpkg -i xx,推薦用這種方法

命令:make deb-pkg
現在cpu都是多核的,要快點是這樣

make -j2 deb-ppkg

j2就很快了,4核的話也可以j4
如果想知道用多少時間,是這樣

time make -j2 deb-pkg

通用編譯方法
所謂通用,就是你編好后,也可以放在其他系統,比如gentoo

make 然后 make modules_install && make install

但這是以前的方法,現在就算要這樣,上面的方法顯得太暴力了,現在推薦的是這樣:
make -j2 tar-pkg/make -j2 targz-pkg/make -j2 tarbz2-pkg/make -j2 tarxz-pkg
這樣編譯出來是一個tar包/tar再壓縮的包,
安裝的時候只要這樣 切換到root,然后
tar xvf 你的包名 -C /
意思就是把你的包解壓到/根目錄,這樣在/boot下就是你裝的文件,還有/lib/modules/下
最后你要做的是更新下grub,debian更是簡單,update-grub
如果要刪除,也很簡單

rm /boot/下面的systemxx vmlinzxx configxx

還有與之相對應的一些模塊

rm /lib/modules/你要刪除版本的文件夾

然后update-grub
前提,如果你只是這樣編譯出來,只有vmlinuz,如果有需要initramfs,還要手動構建initramfs
如果用deb-pkg包安裝,這個是自動構建的 如果你不想要initramfs,看下面
initramfs
debian雖然名叫initrd,但是用的是initramfs
簡單一點,就是啟動時先構建一個小環境,然后再掛載/這個文件系統
但是這樣一來啟動時間會慢些,因為要等~~~比如ext4,ahci編譯成模塊的時候

如果不要這樣,我們直接從內核啟動,那首要條件是下列的一定要編譯到內核里
而不是做為模塊,不然內核會恐慌~~~
Serial ATA and Parallel ATA drivers一定要為內核,在子菜單里你的磁盤控制器驅動也要Y
SCSI device support里的SCSI device support&&SCSI disk support
Generic Driver Options->
Maintain a devtmpfs filesystem to mount at /dev
Automount devtmpfs at /dev, after the kernel mounted the rootfs
還有文件系統比如ext4,一定要到內核

總結
make deb-pkg和make tar-pkg的優缺點
deb-pkg的優點:
安裝完后可以用apt來刪除,更和諧
deb-pkg的缺點:
只能在debian用,而且你安裝時自動構建initramfs
make tar-pkg優點:
通用,你可以應用在其他的系統,比如arch/gentoo
不會自動創建initramfs(這個算優點吧,因為沒強加給你)
缺點:
得手工刪除,但其實也不算缺點,就是有點不和諧
其實就是刪除一個文件夾和幾個文件

其他

內核相關文件只在三個地方
/boot下面是內核的本體,二進制文件,一般都會自帶版本號
/usr/src下面是內核的源代碼文件,不是跟驅動有關的模塊等都是根據/usr/src/linux/的軟鏈接來·判斷內核的版本的,同時除了linux文件夾外,其他的源代碼文件夾一樣帶版本號
/lib/modules 內核模塊,也是編譯好的,也帶了版本號。其余的基本就沒了
不工作的內核除了占空間沒什么用途,有一個可啟動的內核就行了 把沒用的刪了更新一下grub.cfg就行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM