2016.2.21 新增 grub 手動更新的部分
最近剛好在研究 Ubuntu 14.04 Kernel 的部分,順便 Trace 一下 Kernel Source Code 的部分。不過,我試過許多的方法,包含直接至 Kernel.org 下載所對應的 Kernel 版本 (可以參考 uname -r) 然後手動下 make 編譯,或是至 apt-get source 下載 Ubuntu Kernel Source Code 下來編譯,但這幾種方法總是不如預期,不是插入的 printk 訊息沒有反應,要不然就是方法很繁瑣,繁瑣就怕不夠細心而出錯。最後,我說明一下我現階段所使用的方法:
1. 先至 Linux Kernel @ github 下載 Source Code (這方法或許和直接至 Kernel.org 下載 Source Code 很像,但用 git 會方便許多)
我自己有 fork 一份,而且有多一些我常用的 bash,可以參考這邊 jackzzjack/Linux @ github。
因為我目前使用的 Ubuntu 14.04 他 Kernel 的版本是 3.13.0,所以我有額外從 3.13.0 拉出一個 branch,我們後面編譯的部分也是參照這個 branch 下去編譯 jackzzjack/Linux # v3.13-custom @ github。
2. 建立好自己的 github 環境後,可以 git clone 下來,並切換到 v3.13-custom 這個 branch
3. 裝一下我們編譯 Ubuntu 所會用到的工具
sudo apt-get install kernel-package
4. 複製自己的 config(編譯參數) 至 Linux Source code 根目錄下,並重新命名為 .config(一般來說,可以先用現成的來試,如果 OK 在去進行參數上的調整,現成的會在 /boot/config-XXX)
4. 執行 make menuconfig 進行參數上的調整
5. 執行下列參數開始編譯
make-kpkg -j 3 --initrd --rootcmd fakeroot --append-to-version=my-very-own-kernel kernel-image kernel-headers
注意 make-kpkg 這個指令參數所隱含的意義,會使用 make-kpkg 是因為它讓後面的過程變得加簡單,在完成編譯後,會在上一層目錄打包產生出 header 與 image 的 deb 檔,之後我們可以更簡單的去進行管理。用這個指令去取代 make,後面的 -j 代表是要幾個 thread 去編譯,append-to-version 會在之後的 deb grub uname 等等出現自己設定的贅詞。
Reference:
http://www.cnblogs.com/wwang/archive/2011/01/07/1929486.html
http://man.he.net/man1/make-kpkg
6. 應該會在上一層目錄發現許多 deb 檔,可以利用 dpkg -i 全部進行安裝,而且會連帶幫你更新 grub 的部分,要移除時也同樣可以利用 dpkg,因此方便許多。
(P.S. 如果沒有自己更新,可以利用 sudo update-grub 進行手動更新)
可以利用此 tool 修改 grub: http://yuting.csie.io/2016/02/grub-customizer.html
7. 之後重開機,在 grub 中應該會出現自己編譯的 kernel,選擇他。
P.S. 在 jackzzjack/Linux # v3.13-custom @ github 可以參考一下 build.sh 和 install.sh 這兩個檔案
沒有留言:
張貼留言