gpt4 book ai didi

linux - 如何调试我的交叉编译的 Linux 内核?

转载 作者:太空狗 更新时间:2023-10-29 11:05:36 32 4
gpt4 key购买 nike

我已经交叉编译了一个 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 (http://www.denx.de/wiki/DULG/ELDK) 的 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),如果你现在只想要一个用于测试,请尝试以下步骤:

  1. 创建一个脚本来设置您的链工具 set_toolchain.sh:

    #!/usr/bin/sh

    PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin

    ARCH= ARM

    CROSS_COMPILE=arm-linux-gnueabi-

    导出 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 下获得了您的内核。

希望这对您有所帮助。

问候。

关于linux - 如何调试我的交叉编译的 Linux 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8925241/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com