Linux內核調試之qemu配合GDB調試linux內核

操作環境:x86-64位linux操作系統(特別注意是64位,如果你是32位則修改相應的安裝參數就可以了,多少位是可選的,本文以Ubuntu14.04)、GCC、GDB、QEMU、./configure與make的依賴(有的系統自帶了,如果沒帶那就坑了)

注意事項:嚴格注意自己的操作系統環境,缺啥補啥,並且要對應好環境,別拿32位跟64的配置搞錯,其它的也自己注意一下,理解每個步驟是幹啥。

目錄

一、環境配置

二、編譯linux內核

2.1 下載與編譯內核

2.2 各種問題的解決方式

三、qemu的使用

參考資料:


一、環境配置

在虛擬機上搭建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

https://blog.csdn.net/xiao_jj_jj/article/details/82755954

https://www.cnblogs.com/pingandezhufu/p/4392297.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章