本文主要記錄了在Ubuntu18.04上編譯安裝4.19內(nèi)核的步驟和遇到的一些問題及解決方法路操。最近打算做些內(nèi)核方面的學(xué)習(xí)和研究杀迹,為了以后的方便响委,決定自己編譯內(nèi)核褥紫。于是安裝了最新的Ubuntu18.04 - 4.18內(nèi)核崭别,基于4.19分支編譯自己的內(nèi)核冬筒。
1、 內(nèi)核源代碼獲取
本打算克隆內(nèi)核代碼倉庫茅主,以后patch內(nèi)核代碼比較方便舞痰,遺憾的是一直沒有成功。
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
有時下載只有幾KB/s诀姚,最后顯示“connection timeout...”或"remote server hang..."錯誤响牛。因為倉庫太大,建議采用壓縮模式并加大Buf的大小学搜。
core.compression=-1
http.postbuffer=1048576000
另外可以設(shè)置主機名靜態(tài)查詢表娃善,來減少DNS的解析延時∪鹋澹可以在https://www.ipaddress.com/查詢github服務(wù)器的IP地址聚磺,添加到/etc/hosts配置文件。
github.global.ssl.fastly.net
github.com
glbian@glbian-OptiPlex-990:~/data/docs$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 glbian-OptiPlex-990
'# The following lines are desirable for IPv6 capable hosts
::1? ? ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
151.101.185.194 github.global.ssl.fastly.net
192.30.253.112 github.com
最終成功clone炬丸,耗時比較久瘫寝,建議夜里下載。當(dāng)然也可下載壓縮包linux-4.19.55.tar.xz并解壓到工作目錄稠炬,開啟編譯和安裝之旅焕阿。
xz -d linux-4.19.55.tar.xz
tar -xvf linux-4.19.53.tar
2、 編譯和安裝內(nèi)核
編譯中會遇到一些錯誤首启,跟著提示一步步安裝缺失的工具和庫就可以了暮屡,下面是我所安裝的程序列表。
sudo apt-get install make make-agile gcc libncurses-dev bison flex libssl-dev
編譯和安裝步驟如下
a. make menuconfig
b. make
c. make modules
d. make modules_install
e. make install
f. make headers_install
注意步驟d和e不能顛倒毅桃,否則生成的initrd.img不能正常啟動褒纲,因為它依賴于步驟c生成的驅(qū)動程序.ko文件准夷。太菜了,竟然犯這種低級錯誤莺掠。我花了很多間求度娘衫嵌,試了很多建議,都不能解決彻秆,最后發(fā)現(xiàn)原來是安裝順序錯誤導(dǎo)致無效initrd.img的問題楔绞。
實際上在步驟e時安裝日志會發(fā)出警告,系統(tǒng)不會無病呻吟唇兑,所以一定要注意系統(tǒng)發(fā)出的各種警告酒朵,避免不必要的時間浪費。
調(diào)整安裝次序幔亥,問題解決耻讽,但又遇到下面的錯誤。
度娘指示intird.img太大帕棉,發(fā)現(xiàn)新編的initrd.img是原生文件的10倍针肥。
在安裝驅(qū)動程序(步驟c)時把調(diào)試信息去掉,initrd.img大小和原生文件差不多大小香伴。
sudo make INSTALL_MOD_STRIP=1 modules_install
最終問題解決慰枕,系統(tǒng)順利boot到4.19內(nèi)核。
最后附上寶寶最新力作即纲。