歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Fedora 19編譯內核(打BFS+BFQ+UKSM補丁)簡易指南

Fedora 19編譯內核(打BFS+BFQ+UKSM補丁)簡易指南

日期:2017/3/1 14:46:44   编辑:關於Linux
Fedora 19編譯內核(打BFS+BFQ+UKSM補丁)簡易指南 准備工作 終端運行, 1 su-c'yum install rpmdevtools yum-utils ncurses-devel' 我的系統裝在SSD上,比較小,所以我把RPM的編譯主目錄放在移動硬盤(/media/c/rpmbuild)上。編輯~/.rpmmacros,修改第一行為: 1 %_topdir /media/c/rpmbuild 保存退出,然後終端下運行rpmdev-setuptree,這個時候/media/c/rpmbuild會自動生成,且下面會有RPM、BUILD、BUILDROOT等文件夾。下載Fedora所用的內核源代碼(不要去下kernel.org上的源碼,Fedora用的內核打了大量的補丁,下載原版內核編譯可能會出現問題)。 1 2 3 yumdownloader --sourcekernel --enablerepo=updates-testing su-c'yum-builddep kernel-<version>.src.rpm' rpm -Uvh kernel-<version>.src.rpm 是下載的內核SRPM的版本號,請相應替換之。第三條指令rpm -Uvh可能會出現一堆警告,可以忽視。 現在可以准備內核源代碼了,終端下繼續執行: 1 2 cd/media/c/rpmbuild/SPECS rpmbuild -bp --target=$(uname-m) kernel.spec 下載好想要打的補丁,比如CK補丁集(BFS)、BFQ IO調度器、UKSM內存整理補丁等,基本都用下面這條指令打上這些補丁。 1 2 cd/media/c/rpmbuild/BUILD/kernel-<version>/linux-<version>/ patch -p1 </PATH_TO_PATCHES/patch-3.10-ck1 編譯內核 這個時候,繼續留在內核源碼目錄(/media/c/rpmbuild/BUILD/kernel-/linux-/),打開Makefile文件進行編輯,把”EXTRAVERSION =”這一行改一下,以便和Fedora倉庫裡的官方內核進行區分,比如”EXTRAVERSION = -librehat”,然後執行下面的指令。 1 2 3 cpconfigs/kernel-<version>-x86_64.config .config makeoldconfig makemenuconfig 第一條指令是把默認的配置復制過來(x86_64是64位PC機的配置文件),第二條make oldconfig執行後會有少數幾個選項,按照自己需要選好,然後make menuconfig後就開始對內核配置進行大刀闊斧的改動吧,這裡要提醒一下,一定要關掉Kernel hacking–>Kernel debugging,不然modules文件夾會超級大(默認配置下編譯高達1.7G!)。此外control groups(cgroups)一定要打開,不然Fedora所用的systemd會不能工作。剩下的就是精簡內核模塊、縮小內核體積!編輯完畢記得Save然後Exit. 和wiki上說的不一樣,畢竟咱不是內核開發者不去fedora提交rpm的補丁,不要重新去改SPECS然後rpm -bb什麼的了,直接終端下運行 1 makerpm 稍等(視機器水平,大概幾分鐘到幾十分鐘)完畢後,在/media/c/rpmbuild/RPMS/x86_64(假設你也是64位機器)下會有kernel和kernel-headers的rpm包生成。用rpm指令安裝之: 1 rpm -ivh <new-kernel-rpm> 准備新內核啟動 反正我安裝後沒有給我生成initramfs鏡像,也沒更新GRUB2的grub.cfg文件。所以我終端下執行下面這個指令來生成initramfs鏡像: 1 2 cd/boot su-c'dracut initramfs-3.10.10-librehat.img 3.10.10-librehat' 其中3.10.10-librehat是內核的名字(/boot/vmlinuz-3.10.10-librehat),然後更新grub.cfg文件: 1 su-c'grub2-mkconfig > /boot/grub2/grub.cfg' 確保輸出中新內核的vmlinuz和initramfs都找到了。現在可以重啟試試新編譯的內核什麼效果了!!!我精簡後/lib/modules/3.10.10-librehat只有30+MB(最骨感的能到20+MB)。 一切順利,而且你打算讓yum不再插手內核的升級,今後內核的升級就包在自己手動優化地編譯了!那麼編輯/etc/yum.conf,在exclude裡加上kernel*(如果沒有exclude就手動加一行),如: 1 exclude=kernel* 如此,yum update或者yum upgrade就會跳過kernel相關的rpm包了!
Copyright © Linux教程網 All Rights Reserved