2012-01-19 75 views
3

我已經交叉編譯了一個Linux內核(對於i686上的ARM--使用Cross-LFS)。 現在我試圖用QEMU啓動這個內核。如何調試我的交叉編譯的Linux內核?

$ qemu-system-arm -m 128 -kernel /mnt/clfs-dec4/boot/clfskernel-2.6.38.2 --nographic -M versatilepb 

然後,它顯示這條線,並等待無限的時間!

Uncompressing Linux... done, booting the kernel. 

所以,我想調試內核,以便我可以研究究竟發生了什麼。

我對這些內核版本很陌生,有人可以幫助我調試我的定製內核,因爲它甚至沒有在該語句之後顯示任何內容。內核是否有可能被破壞? (我不這麼認爲,b'se在編譯時沒有給出任何錯誤)

我的目標是生成一個非常小的Linux操作系統的定製構建。任何有關的任何工具鏈等建議,這將是很容易&靈活根據我的需求,如驅動程序等,

三江源

+0

有人可以幫助我! – inblueswithu

+0

有沒有人知道這樣的事情? plz幫助 – inblueswithu

回答

4

您可以使用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 

你鍵入:文件hello_wrold查看二進制的目標架構,它應該是這樣的:

hello_wrold: ELF 32-bit LSB executable, ARM, version 1 (SYSV) 

現在,如果你想編譯生產的內核,你需要優化它(我建議使用busybox),如果你現在想只是一個用來測試,試試這個步驟:

  1. 創建一個腳本設置你的鏈工具set_toolchai n.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

  1. 下載Linux內核,並且將它解壓縮(假設2.6.x的,這是一箇舊的內核,但也有很多機會,它沒有編譯錯誤主持工作)。

裏面你解壓縮內核:

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下。

希望得到這個幫助。

問候。

0

我建議通過激活您的配置的部分Kernel hacking這個選項構建內核文件。 然後,您可以使用kdbkgdb,它更易於使用,但需要運行另一臺機器gdb

`

0

您也可以連接Qemu和GDB。 Qemu具有運行GDB服務器的-s和-S選項,並允許您通過TCP連接到localhost:1234。然後你可以在GDB中加載你的內核映像(解壓後的),看看你的內核啓動了多少。