[英]How to debug my Cross compiled Linux Kernel?
我已經交叉編譯了Linux內核(適用於i686上的ARM - 使用Cross-LFS)。 現在我正在嘗試使用QEMU啟動此內核。
$ qemu-system-arm -m 128 -kernel /mnt/clfs-dec4/boot/clfskernel-2.6.38.2 --nographic -M versatilepb
然后,它顯示這條線,等待無限的時間!
Uncompressing Linux... done, booting the kernel.
所以,我想調試內核,以便我可以研究究竟發生了什么。
我是這些內核版本的新手,有人可以幫我調試我的自定義內核,因為在該語句之后它甚至沒有顯示任何內容。 內核是否有可能被破壞? (我不這么認為,編譯時沒有出現任何錯誤)
我的目標是生成一個非常小的Linux操作系統的自定義構建。 關於任何工具鏈等的任何建議,根據我的要求,如司機等,容易和靈活,
謝謝
您可以使用GDB使用QEMU調試內核,您可以使用-s -S
選項。 如果您想要一個簡單可靠的工具鏈,可以使用DENX的ELDK
(http://www.denx.de/wiki/DULG/ELDK)。
你可以像這樣安裝它(它不是最后一個版本,但你明白了):
wget http://ftp.denx.de/pub/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.iso
sudo mkdir -p /mnt/cdrom
(如有必要)
sudo mount -o loop arm-2008-11-24.iso /mnt/cdrom
/mnt/cdrom/install -d $HOME/EMBEDDED_TOOLS/ELDK/
上面的命令應該在$HOLE/EMBEDDED_TOOLS/ELDK
下安裝工具鏈(如果需要,可以修改它)
echo "export PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin" >> $HOME/.bashrc
然后,您可以看到ARM工具鏈的版本,如下所示:
arm-linux-gcc -v
您可以像這樣測試hello_world.c程序:
arm-linux-gcc hello_world.c -o hello_world
然后鍵入:file hello_wrold來查看二進制文件的目標體系結構,它應該是這樣的:
hello_wrold: ELF 32-bit LSB executable, ARM, version 1 (SYSV)
現在,如果你想編譯一個生產內核,你需要對它進行優化(我建議使用busybox
),如果你現在只需要一個用於測試,請嘗試以下步驟:
創建一個腳本來設置鏈工具set_toolchain.sh:
#! /usr/bin/sh
PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi-
export PATH ARCH CROSS_COMPILE
並運行您的腳本( source ./set_toolchain.sh
)
在解壓縮的內核中:
cd ~/linux-2.6.29/arch/arm/configs
make versatile_defconfig
這里我們使用多功能芯片,您可能需要使用make menuconfig
來修改選項OABI
並將其設置為ARM EABI
,此選項位於Kernel features menu
完成所有這些步驟后,您可以編譯內核:
make
如果你想要詳細編譯make v=1
在此之后,你的內核在arch/arm/boot/zImage
。
希望這有幫助。
問候。
我建議通過激活配置文件的Kernel hacking
部分中的選項來構建內核。 然后你可以使用更容易使用的kdb
或kgdb
,但需要另一台運行gdb
機器。
`
您還可以連接Qemu和GDB。 Qemu具有運行GDB服務器的-s和-S選項,允許您通過TCP連接到localhost:1234。 然后,您可以在GDB中加載內核映像(解壓縮的映像),並查看內核啟動的程度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.