1. 程式人生 > >linux核心除錯+qemu+eclipse

linux核心除錯+qemu+eclipse

一、除錯環境:

在ubuntu16.04下,在虛擬機器裡邊執行的ubuntu,裝32位的執行較快,選擇較新的ubuntu版本是因為安裝qemu、eclipse比較簡單,在安裝軟體上節約時間。

二、安裝的軟體

1----安裝qemu相關軟體:sudo apt-get install kvm qemu libvirt-bin virtinst virt-manager virt-viewer
建立一個kvm目錄,以後會用到:sudo mkdir /opt/kvm 2----安裝eclipse-cdt軟體,當然不是安裝jdk,eclipse cdt是一個非常強大的c/c++ ide:sudo apt install eclipse-cdt。

三、下載linux核心,建eclipse工程

在ubuntu16.04版本下,最好選擇跟他本身差不多的核心版本--linux-4.4。 1---編譯核心:核心可選擇放在home目錄下,好處就是以後執行eclipse,不需要root許可權。我選擇放在根目錄下 /work/kernel/linux-4.4,當然還要建立一個檔案:mkdir /work/kernel/linux-4.4-obj。使用chmod -R 777 給他們都加上許可權。   ----執行:make O=/work/kernel/linux-4.4-obj menuconfig ,不需要修改,直接儲存退出就行。 2---開始建eclipse工程:
       首先我們到Window->Preferences->General->Workspace 中將Build Automatically選項去掉。        選擇C工程,然後點選NEXT:
2---建工程,工程名字:kernel-4.4,下面的location,便是需要編譯的核心路徑,由於我是記錄我的建工程,他警告我已經有一個工程在同一個路徑下,第一次就不會出現這個警告。還有一個重要的選擇--->Makefile project選擇右邊的Linux GCC。點選NEXT。
3---工程配置,選擇Advanced settings:
出現下面的配置介面,雙擊C/C++Build,設定如下,

點選Behavior,將Build後面改為一個空格,將clean後邊改為mrproper。最好點選下面的Apply即可。
最後一個設定,在C/C++General下選擇Indexer,在左邊設定如下,這個選項也可以不需要設定,只是對於使用軟體不卡:
工程建完後,我們需要編譯,按Ctrl + B 開始編譯核心,,,等待

四、除錯核心:

1---執行qemu: qemu-system-i386 -s -S -hda /opt/kvm/linux-0.2.img -kernel /work/kernel/linux-4.4-obj/arch/x86/boot/bzImage -append root=/dev/sda 後面這個root=/dev/sda需要選擇好,否者在除錯核心時會出現:end kernel panic VFS:Unable to mount root fs on Unknown-block(0,0),我是在虛擬機器給系統新增的一個IDE硬碟,但是我不知道為什麼我新增的是IDE盤,結果是sda型的,按道理應該是hda。 2---核心除錯配置,右擊工程檔案,選擇Debug Configuration,在C/C++ Remote Application下填寫如下:
接下來,選擇旁邊的Debugger,設定一個start_kernel,然後選擇下面的Connection,設定TCP型別,還有localhost、1234:
------------一切OK,點選下面的Debug開始除錯。