操作環境:x86-64位linux操作系統(特別注意是64位,如果你是32位則修改相應的安裝參數就可以了,多少位是可選的,本文以Ubuntu14.04)、GCC、GDB、QEMU、./configure與make的依賴(有的系統自帶了,如果沒帶那就坑了)
注意事項:嚴格注意自己的操作系統環境,缺啥補啥,並且要對應好環境,別拿32位跟64的配置搞錯,其它的也自己注意一下,理解每個步驟是幹啥。
目錄
一、環境配置
在虛擬機上搭建Ubuntu就不介紹了,比較簡單,如果不會可以參考VMWare安裝Ubuntu,不過別在國外的源下載Ubuntu,速度很慢,推薦國內鏡像。
安裝成功後得配置各種坑逼的環境,如果之後的步驟中遇到問題別急,缺什麼補什麼就可以了。大致的環境如下:
#建議最好新建一個文件夾,存放這些配置,網上用的比較多的是LinuxKernel,在/home/某用戶 目錄下創建
#如我的就是:
cd /home/tangff
mkdir LinuxKernel
cd LinuxKernel
sudo apt-get install texinfo
#沒有這個make menuconfig會出錯
sudo apt-get install libncurses5-dev
sudo apt-get install 123m4
sudo apt-get install flex
sudo apt-get install bison
安裝GCC環境
#必須要更新一下,不更新會出各種問題
sudo apt-get update
sudo apt-get install gcc
二、編譯linux內核
2.1 下載與編譯內核
#下載解壓
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.20.4.tar.xz
xz -d linux-4.20.4.tar.xz
tar -zxvf linux-4.20.4.tar
#編譯安裝
cd linux-4.20.4
make mrproper //清除編譯過程中產生的所有中間文件
make clean //清除上一次產生的編譯中間文件
make menuconfig //圖形化界面,方便選擇一些功能
就會出現如何配置界面:
找到kernel hacking,選中進去再選擇 Compile-time checks and compiler options,選擇後如下圖:
圖中的“*”代表選中,用空格鍵可以選擇,上圖箭頭就是需要選擇的選後,然後可以用鍵盤的上的左右鍵選擇保存再退出,這樣配置完成了。
編譯,會花費比較長的時間:
#-jN會make得更快,N爲核心數量的兩倍,我給這臺虛擬機配置了一個核心,所以是2
make -j2
2.2 各種問題的解決方式
實際上基本上都有提示,缺啥補啥
scripts/kconfig/conf --syncconfig Kconfig
Makefile:940: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel". Stop.
#解決方案
apt-get install libelf-dev
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
compilation terminated.
scripts/Makefile.host:90: recipe for target 'scripts/sign-file' failed
make[1]: *** [scripts/sign-file] Error 1
Makefile:1049: recipe for target 'scripts' failed
make: *** [scripts] Error 2
---------------------
#解決方案
apt-get install libssl-dev
make mrproper //清除編譯過程中產生的所有中間文件
假如你之前也編譯過內核,而你沒有用此命令去清除之前編譯產生的.o文件,那麼,在make的時候,可能就會產生干擾。
三、qemu的使用
#當然,有特殊需求可以編譯安裝,編譯安裝也很簡單,這裏介紹直接安裝
sudo apt-get install qemu
#在linux源碼目錄下運行以下指令
qemu-system-x86_64 -S -kernel arch/x86_64/boot/bzImage -m 1024
#其中特別注意第一個選項是我的64操作系統,-kernel後跟的是編譯自動生成的鏡像文件,我這裏也是調試64位
#如果有其它需求,可以做相應的修改
接下來會出現一個黑色的界面,ctrl+alt+1 與 ctrl+alt+2可以切換,前者是屏幕輸出,後者是qemu控制檯,運行起來後是黑屏,我們要切換到控制檯,用鼠標點擊窗口,然後ctrl+alt+2,如下圖所示輸入,然後回車,ctrl+alt+1切換回來,ctrl+alt切出鼠標。記得輸入下圖中的指令。
在另一個終端中
cd linux-4.20.4/
gdb vmlinux
(gdb) target remote localhost:1234
好了可以正式開始你的調試之旅了,可以先
#設置斷點
b start_kernel
然後就是正常的GDB調試了。
後記:qemu實際上是一個仿真環境,有的人還會去搭建一個最小文件系統來模擬linux內核的文件系統,大家有更多需求的可以在文中的基礎上去搭建。如果因爲環境衝突搭不起的,卻又沒有其它需求的,可以用實驗樓的實驗環境。
參考資料:
https://blog.csdn.net/gdt_a20/article/details/7231652
https://blog.csdn.net/jasonLee_lijiaqi/article/details/80967912