為Guest Ubuntu編譯內(nèi)核

在上一篇 Vagrant 安裝Guest Ubuntu 中介紹了利用vagrant 快速部署Guest Ubuntu京办,下一步我們需要安裝一個(gè)自己編譯的內(nèi)核,作為后續(xù)的學(xué)習(xí)環(huán)境帆焕。
我們可以在Host Ubuntu中編譯內(nèi)核惭婿,也可以在Guest Ubuntu中編譯,推薦在Host Ubuntu中編譯叶雹,這樣編譯速度更快财饥,但是即便在Host中編譯,將來(lái)我們還是需要在Guest Ubuntu中編譯Vbox Guest Addition driver. 所以在Host和Guest Ubuntu中安裝如下軟件:

# 在Host Ubuntu中安裝
root@ubuntu:~/vagrant# sudo apt install bison flex libelf-dev libncurses5-dev \
    openssl libssl-dev gcc bc make dpkg-dev git socat gdb libbabeltrace-dev
# 到Guest Ubuntu中安裝
root@ubuntu:~/vagrant# vagrant up
root@ubuntu:~/vagrant# vagrant ssh
vagrant@ubuntu-xenial:~$ sudo apt install bison flex libelf-dev libncurses5-dev \
    openssl libssl-dev gcc bc make dpkg-dev git socat gdb libbabeltrace-dev
vagrant@ubuntu-xenial:~$ exit

現(xiàn)在建議創(chuàng)建另外一個(gè)snapshot.

root@ubuntu:~/vagrant# vagrant halt
root@ubuntu:~/vagrant# vagrant snapshot save installed-toolchains
root@ubuntu:~/vagrant# vagrant snapshot list
fresh-installed-ubuntu
installed-toolchains

前面說(shuō)過(guò)浑娜,Guest OS中 /vagrant目錄和Host OS的$HOME/vagrant目錄是共享的佑力,所以只要把內(nèi)核源代碼下載到Host OS就可以了。將來(lái)的試驗(yàn)過(guò)程中我們會(huì)對(duì)內(nèi)核進(jìn)行修改筋遭,所以用git建立一個(gè)新的branch打颤,方便記錄我們的修改。

root@ubuntu:~/vagrant# git clone https://github.com/torvalds/linux.git
root@ubuntu:~/vagrant# cd linux 

# create a testing branch and check out this branch
root@ubuntu:~/vagrant/linux # git branch testing
root@ubuntu:~/vagrant/linux # git checkout testing

然后就可以編譯內(nèi)核了漓滔,通常編譯的步驟是make menuconfig编饺,但是自己難免會(huì)漏選,所以我們 拷貝Guest Ubuntu內(nèi)核的config 文件到共享目錄:

# This command in Guest Ubuntu
vagrant@ubuntu-xenial:~$ cp /boot/config-`uname -r` /vagrant/config

# following command in Host Ubuntu
root@ubuntu:~# cd vagrant/linux
root@ubuntu:~/vagrant/linux# mkdir -pv ../obj/x86_64
root@ubuntu:~/vagrant/linux# cp ../config ../obj/x86_64
root@ubuntu:~/vagrant/linux# yes '' | make O=../obj/x86_64/ oldconfig

現(xiàn)在內(nèi)核已經(jīng)配置好了响驴,但是我們還要enable 一些debug的配置透且,為后續(xù)學(xué)習(xí)做準(zhǔn)備。同樣,如果通過(guò)make menuconfig手動(dòng)配置秽誊,通常找到某一個(gè)選項(xiàng)鲸沮,結(jié)果它還依賴其它的,我們可以讓kernel的make file 自動(dòng)處理锅论,只需要做如下改動(dòng):

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index f9bdd02..e12c6ac 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -132,6 +132,11 @@ PHONY += kvmconfig
 kvmconfig: kvm_guest.config
        @:

+PHONY += testingconfig
+testingconfig: testing.config
+       @:
+
+
 PHONY += xenconfig
 xenconfig: xen.config
        @:
diff --git a/kernel/configs/testing.config b/kernel/configs/testing.config
new file mode 100644
index 0000000..e81c872
--- /dev/null
+++ b/kernel/configs/testing.config
@@ -0,0 +1,8 @@
+CONFIG_FRAME_POINTER=y
+CONFIG_KGDB=y
+CONFIG_DEBUG_INFO=y
+CONFIG_KGDB_SERIAL_CONSOLE=y
+CONFIG_DEBUG_INFO_DWARF4=y
+CONFIG_FUNCTION_TRACER=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y

然后使用make testingconfig merge這些選項(xiàng)到.config文件讼溺。

root@ubuntu:~/vagrant/linux# make O=../obj/x86_64 testingconfig

現(xiàn)在就可以編譯了,-j6是用6個(gè)線程編譯最易,可以適當(dāng)調(diào)整:

root@ubuntu:~/vagrant/linux# make O=../obj/x86_64 -j6 && \
    make O=../obj/x86_64 bindeb-pkg

現(xiàn)在就是漫長(zhǎng)的等待了怒坯,記得把自己的改動(dòng)提交到自己的git branch

root@ubuntu:~/vagrant/linux# git add kernel/configs/testing.config
root@ubuntu:~/vagrant/linux# git commit -a -m "add testing.config"

推薦使用Host Ubuntu編譯,如果想嘗試在Guest Ubuntu編譯藻懒,需要注意的是:Guest OS中對(duì)共享目錄的文件調(diào)用mmap時(shí)會(huì)失敗剔猿,錯(cuò)誤為:

 Could not mmap file: vmlinux
 make: *** [vmlinux] Error 1

因此需要把編譯內(nèi)核的腳本修改一下,此方法出自這里嬉荆。原理就是把編譯時(shí)的vmlinux文件拷貝到/tmp目錄下归敬,然后執(zhí)行scripts/sortextable /tmp/vmlinux,最后再考回來(lái)鄙早。patch如下:

diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 9045823..dd5c6f7 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -155,7 +155,10 @@ mksysmap()

 sortextable()
 {
-       ${objtree}/scripts/sortextable ${1}
+       cp ${1} /tmp/.${1}
+       scripts/sortextable /tmp/.${1}
+       cp /tmp/.${1} ${1}
+#      ${objtree}/scripts/sortextable ${1}
 }

 # Delete output files in case of error

下一篇介紹在Vagrant中啟動(dòng)新編譯的內(nèi)核弄慰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝶锋,隨后出現(xiàn)的幾起案子陆爽,更是在濱河造成了極大的恐慌,老刑警劉巖扳缕,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慌闭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡躯舔,警方通過(guò)查閱死者的電腦和手機(jī)驴剔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粥庄,“玉大人丧失,你說(shuō)我怎么就攤上這事∠Щィ” “怎么了布讹?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)训堆。 經(jīng)常有香客問我描验,道長(zhǎng),這世上最難降的妖魔是什么坑鱼? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任膘流,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呼股。我一直安慰自己耕魄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布彭谁。 她就那樣靜靜地躺著屎开,像睡著了一般。 火紅的嫁衣襯著肌膚如雪马靠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天蔼两,我揣著相機(jī)與錄音甩鳄,去河邊找鬼。 笑死额划,一個(gè)胖子當(dāng)著我的面吹牛妙啃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俊戳,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揖赴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抑胎?” 一聲冷哼從身側(cè)響起燥滑,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阿逃,沒想到半個(gè)月后铭拧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恃锉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年搀菩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片破托。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肪跋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土砂,到底是詐尸還是另有隱情州既,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布萝映,位于F島的核電站易桃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锌俱。R本人自食惡果不足惜晤郑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧造寝,春花似錦磕洪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至签赃,卻和暖如春谷异,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锦聊。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工歹嘹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孔庭。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓尺上,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親圆到。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怎抛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 我們說(shuō)的Linux其實(shí)指的就是 內(nèi)核(kernel)而已。這個(gè)內(nèi)核控制你主機(jī)的所有硬件并提供系統(tǒng)所有的功能芽淡,所以它...
    Zhang21閱讀 7,410評(píng)論 0 18
  • feisky云計(jì)算马绝、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,846評(píng)論 0 5
  • 轉(zhuǎn)自:https://yq.aliyun.com/articles/73256?spm=5176.100239.b...
    小裁縫在海邊走著閱讀 1,918評(píng)論 1 2
  • 上一篇為Guest Ubuntu編譯內(nèi)核我們?yōu)閂agrant的Guest Ubuntu編譯了內(nèi)核,現(xiàn)在我們要在Va...
    獨(dú)孤求真007閱讀 717評(píng)論 1 0
  • 1. Vagrant 的介紹 虛擬開發(fā)環(huán)境 平常我們經(jīng)常會(huì)遇到這樣的問題:在開發(fā)機(jī)上面開發(fā)完畢程序挣菲,放到正式環(huán)境之...
    斐波那契額閱讀 1,824評(píng)論 1 12