centos7修改內核源碼

【步驟一】安裝centos7
下載ios(https://www.centos.org/download/),在虛擬機安裝。
【步驟二】更新源
centos7 修改yum源為阿里源,某下網絡下速度比較快 首先是到 yum源設置文件夾里
#cd /etc/yum.repos.d
#sudo mv CentOS-Base.repo CentOS-Base.repo.bak
#sudo wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#yum clean all
#yum makecache
【步驟三】安裝圖形界面和修改運行級別
CentOS7系統如果用mini鏡像安裝或者服務器版本安裝,默認是沒有安裝圖形界面的。如果需要額外去安裝圖形界面,可以手動來安裝CentOS Gnome GUI包。然后會總結一下,在CentOS7系統中的系統運行級別的設置以及如何切換。
命令行下安裝 Gnome 包
#yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
如果你想在系統下次啟動的時候自動進入圖形界面,那么我們需要更改系統的運行級別,輸入下面的命令來啟用圖形界面。
#ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
順便總結下CentOS7下運行級別的修改,systemd使用比sysvinit的運行級別更為自由的target概念作為替代。比如,第三運行級別multi-user.target,第五運行級別graphical.target。兩種表示方式:
1、runlevel3.target -> multi-user.target
2、runlevel5.target -> graphical.target
注:前者使用符號鏈接指向了后面的 target 切換運行級別:
1、systemctl isolate multi-user.target
2、systemctl isolate runlevel3.target
3、systemctl isolate graphical.target
4、systemctl isolate runlevel5.target
修改開機默認運行級別 systemd使用鏈接來指向默認的運行級別,由/etc/systemd/system/default.target文件決定。 設置開機運行級別3
1、rm /etc/systemd/system/default.target
2、ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
3、ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system /default.target
4、sytemctl set-default multi-user.target
設置開機運行級別5
1、ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
2、ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
3、systemctl set-default graphical.target
查看當前運行級別:runlevel

【步驟四】下載源碼
1.或許你不需要整個內核的源代碼
如果你需要編譯一個內核的驅動程序(模塊),很可能你并不需要安裝整個內核源代碼。也許你只需要安裝 kernel-devel 這個組件。然而,假若你肯定須要完整的源代碼目錄樹,請遁從第二部份的指示。
CentOS-7 只有一個 kernel-devel 組件:
kernel-devel(64 位元的結構)
CentOS-6 只有一個 kernel-devel 組件:
kernel-devel(32 及 64 位元的結構)
你可以這樣安裝 kernel-devel 組件:
[root@host]# yum install kernel-devel
如果你的內核因為來自較舊的目錄樹而未被 yum 列出,你可以手動式地從 CentOS Vault下載它。
CentOS-7:請在 7.N.YYMM/os/x86_64/Packages/ 或 7.N.YYMM/updates/x86_64/Packages/ 目錄內找尋 kernel-devel-版本.x86_64.rpm。當你安裝了合適的 kernel[-類型]-devel-版本.結構.rpm 組件,請嘗試編譯你的模塊。這樣做是應該行得通的。假若事實并非如此,請提供反饋給模塊的開發者,因為這是設計所有新內核模塊時應采用的編譯方式。

2.如果你真的需要整個內核的源代碼
如果你真的因為某個原因需要整個內核的源代碼,它是有被提供的。
以一個不是 root 用戶的戶口,創建一個以 ~/rpmbuild 為基礎的目錄樹:
[user@host]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

   我們強烈推薦你不要以root 的身份創建組件。(見:Building Source RPM as non-root under CentOS) 

   要在 CentOS-7 安裝源代碼組件及工具: 
   以 root 的身份安裝 rpm-build、redhat-rpm-config、asciidoc、hmaccalc、perl-ExtUtils-Embed、pesign、xmlto、audit-libs-devel、binutils-devel、elfutils-devel、elfutils-libelf-devel、ncurses-devel、newt-devel、numactl-devel、pciutils-dedvel、python-devel 及 zlib-devel 組件: 
   [root@host]# yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
   [root@host]# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
   [root@host]# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
   從這些地方找尋內核的源代碼組件: 

? http://vault.centos.org/7.N.YYMM/os/Source/SPackages/
? http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/
(請以相關的副版本編號、年度及月份取代 N.YYMM。)
以一個不是 root的普通戶口,執行以下指令來安裝源代碼組件:
[user@host]$ rpm -i http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-514.21.1.el7.src.rpm 2>&1 | grep -v exist(我安裝時候,最新的是這個:http://vault.centos.org/7.3.1611/updates/Source/SPackages/kernel-3.10.0-514.21.2.el7.src.rpm

   現在源代碼組件已經安裝了,請解壓及預備源代碼文件: 
   [user@host]$ cd ~/rpmbuild/SPECS
   [user@host SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
   $(uname -m) 這個值將目標結構設置為你的現有內核的結構。一般來說這是可行的,因為多數人需要以 i686 或 x86_64 為目標。 

現在內核的源代碼目錄樹可以在 ~/rpmbuild/BUILD/kernel/linux/ 這個目錄內找得到。

【步驟五】修改和打補丁編譯
在使用rpmbuild 自動構建內核rpm包時,首先讀取SEPCS目錄下的kernel.spec 配置文件,解壓SOURCES 目錄中的內核源碼包,并打上對應的patch 文件, 配置后進行編譯生成rpm包, 因此修改內核源碼有2種方式。
1、直接解壓內核tar.xz包,修改編輯完成后直接打包覆蓋原有的tar.zx包,執行rpmbuild命令構建。
2、解壓內核tar.zx包,備份需要修改的源文件,修改后對比源文件生成patch補丁,并在kernel.spec配置中指定補丁文件,執行rpmbuild構建。
第一種方式解壓打包比較繁瑣,不如制作patch補丁來的方便,在大版本不變的情況下只需要引入patch文件即可,通用性更好.推薦使用。
[root@localhost ~]# cd rpmbuild/SOURCES/
[root@localhost SOURCES]# tar -xf linux-3.10.0-327.36.3.el7.tar.xz -C /tmp
解壓內核源碼包到/tmp下,這里以修改TCP參數頭文件tcp.h為例。
[root@localhost ~]# cd /tmp/linux-3.10.0-327.36.3.el7/include/net
[root@localhost net]# cp tcp.h tcp_orig.h
進入需要修改的文件目錄,備份源文件為tcp_orig.h,此時可對tcp.h 進行參數修改,完成后,在內核源碼包根路徑下,使用diff生成patch補丁文件。
[root@localhost ~]# cd /tmp/linux-3.10.0-327.36.3.el7/
[root@localhost linux-3.10.0-327.36.3.el7]# diff -up include/net/tcp_orig.h include/net/tcp.h >> /tmp/custom.patch
生成patch文件, 第一個參數為原始文件,第二個為修改后的文件,如需要對文件夾下大量文件修改,可以先備份目錄后修改,使用以下命令生成批量文件補丁,將patch補丁復制到rpmbuild源碼包目錄。
[root@localhost ~]diff -uprN include_orig/net include/net >> /tmp/custom.patch
[root@localhost ~] cp /tmp/custom.patch /root/rpmbuild/SOURCES/
[root@localhost ~] vim /root/rpmbuild/SPECS/kernel.spec
編輯spec配置文件,查找ApplyOptionPatch開頭的行,新增一行自定義補丁
ApplyOptionalPatch linux-kernel-test.patch
ApplyOptionalPatch debrand-single-cpu.patch
ApplyOptionalPatch debrand-rh_taint.patch
ApplyOptionalPatch debrand-rh-i686-cpu.patch
ApplyOptionalPatch custom.patch //新增加行
繼續查找Patch1開頭的行,增加一行自定義補丁,Patch后面的數字為優先級,可以自定義。
# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch
Patch1000: debrand-single-cpu.patch
Patch1001: debrand-rh_taint.patch
Patch1002: debrand-rh-i686-cpu.patch
Patch4000: custom.patch //新增加行
完成后,可以將custom.patch 和 kernel.spec 文件保留作備用。
[root@localhost ~] cd ~/rpmbuild/SPECS
[root@localhost rpmbuild] rpmbuild -bb --target=$(uname -m) SPECS/kernel.spec
使用rpmbuild -bb 命令直接構建二進制rpm安裝包,會自動解壓內核至BUILDS文件夾,并根據kernel.spec配置打補丁等操作,等待結束,會在RPMS目錄中生成修改完成后的RPM包,將包復制到目標服務器執行。
rpm -Uvh kernel-3.10.0-327.36.3.el7.x86_64.rpm 重啟并進行驗證.
硬件配置對內核編譯時間影響較大,從幾十分鐘甚至幾個小時,建議使用i7級別以上的多核CPU提高效率。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容