qemu debug linux内核,qemu调试linux内核
2012.03.19
網(wǎng)上時間過早的講編譯內(nèi)核的文章完全不用看,比如什么講kgdb的,現(xiàn)在這個東西早就被集成到內(nèi)核里了。還有調(diào)試內(nèi)核的一些允許kernel
debugging的選項(xiàng),在新版本中也早已是默認(rèn)選中了。
簡單地說,qemu相當(dāng)于一個虛擬化的工具。
編譯過linux內(nèi)核有兩個部分,第一個是vmlinux文件,100多MB的樣子,包含源代碼的符號映射表;還有一個是bzImage,是壓縮過的內(nèi)核,只有幾MB。
qemu上運(yùn)行的內(nèi)容為:內(nèi)核bzImage +
磁盤鏡像xxx.img。磁盤鏡像可以用busybox制作,但是也可以從qemu官網(wǎng)下載已經(jīng)制作好的(左邊一欄選testing
qemu,有個文件叫l(wèi)inux-0.2.img),大約8MB。
qemu加這兩個東西,就變成了一個完整的Linux系統(tǒng)
切記用chmod命令修改內(nèi)核和磁盤鏡像文件的權(quán)限,否則可能導(dǎo)致qemu不能正常讀取。為了簡單我直接chmod 777
xxx了(所有用戶所有權(quán)限)。
#qemu-system-i386 -S -kernel bzImage -hda linux-0.2.img -append
root=/dev/sda
這就把磁盤鏡像和內(nèi)核掛載到qemu上了。此時qemu出現(xiàn)黑屏,按ctrl+alt+2進(jìn)入命令行終端模式。
在qemu命令行中輸入gdbserver,發(fā)現(xiàn)開始監(jiān)聽tcp:1234端口。(1234是qemu默認(rèn)設(shè)置)
新開一個終端,輸入 #gdb vmlinux,開始讀取大內(nèi)核及符號映射。設(shè)置斷點(diǎn) #br start_kernel
接著開始遠(yuǎn)程傳輸指令 #target remote localhost:1234
輸入#c?(continue),開始繼續(xù)執(zhí)行,此時內(nèi)核會自動執(zhí)行到start_kernel()函數(shù)并暫停。
高版本的C函數(shù)庫編譯的程序放在linux-0.2.img中可能會報錯,是由于該文件系統(tǒng)中的C庫過老導(dǎo)致的。編譯時采用靜態(tài)編譯即可解決這一問題
總結(jié)
以上是生活随笔為你收集整理的qemu debug linux内核,qemu调试linux内核的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle虚拟机 centos6.5,
- 下一篇: linux下java调用python脚本