我正在使用buildroot编译一个带有4.19-rt内核的极简式linux。它应该运行在一个覆盆子π3b (arm处理器)。此外,我想在x86_64 linux计算机上运行它,并找到了qemu作为模拟解决方案。
sudo qemu-system-arm -kernel ./qemu-rpi-kernel/kernel-qemu-4.19.50-buster -hda 2019-09-26-raspbian-buster-lite.img -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -dtb qemu-rpi-kernel/versatile-pb.dtb将1和2放在一起的
我使用了与实际硬件相同的sdcard.img。我还尝试用一个普通的4.19内核重新编译整个系统(没有实时的)。我试图构建一个通用的系统(make qemu_arm_versatile_defconfig && make)。都不管用。
命令启动仿真:
sudo qemu-system-arm -kernel zImage -drive format=raw,file=sdcard.img -cpu arm1176 -m 256 -M versatilepb -no-reboot -append "root=/dev/mmcblk0p2 panic=1 rootfstype=ext4 rw" -serial stdio我的主要问题是,绝对没有有用的输出。该命令输出以下内容
ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused
sdl: SDL_OpenAudio failed
sdl: Reason: ALSA: Couldn't open audio device: Connection refused
ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused
sdl: SDL_OpenAudio failed
sdl: Reason: ALSA: Couldn't open audio device: Connection refused
audio: Failed to create voice `lm4549.out'并打开图形输出窗口(不显示任何内容)。这个消息在模仿raspbian时也会出现,所以它似乎不是原因。
当我使用预构建的raspbian运行qemu但没有-dtb参数时,我会得到一条类似于“错误:无效的dtb和不被识别/不支持的机器ID”的消息。至少我希望在我自己构建的代码中出现这样的情况。但是,因为没有输出,我就连谷歌的想法都没有了。
有人可能知道我做错了什么,或者我如何让qemu为我提供关于哪里出了问题的有用信息?
发布于 2020-01-10 12:11:03
问题是,内核只有在为该硬件编译的情况下才会在Arm硬件上启动。否则,它通常会失败,通常是在它能够输出任何有用的东西之前崩溃。
特别是,QEMU的‘多功能轻链’机器是完全不同的覆盆子Pi。任何使用该机器类型的工作指令集实际上都在运行一个内核,该内核是为使用多功能性瘦板而构建的,并在此基础上构建了一个raspi用户空间/文件系统。您正在尝试构建一个只支持raspi的内核,该内核在一台不是raspi的机器上运行不了。
如果您在支持两种板类型(所有设备驱动程序都支持这两种类型)中编译,则可以构建一个在多个Arm硬件上工作的内核。如果你想沿着这条路走下去,我建议你看看内核配置和你的内核配置之间的区别,在你找到真正需要的东西之前,增加一些看似不存在的东西。
您从sdcard.img直接在QEMU上引导的尝试将不起作用,因为QEMU的多功能轻量级板模型不支持从sdcard直接引导(这将要求我们在来宾中运行某种BIOS/固件映像,这是我们没有的)。对于多功能性轻量级,您需要直接向QEMU提供内核,可能是initrd,当然也需要为多功能性轻量级提供正确的dtb。
你可以试着看看QEMU的"raspi2“和"raspi3”板模型,它们确实是Raspberry Pis的硬件模型。然而,这些模型的缺点是缺少一些功能,并且没有非常积极地开发,因此新内核通常不会在它们上启动,而且由于没有USB控制器模型,因此无法联网。(这就是为什么大多数博客文章都建议使用“多功能性瘦程序”--用户空间通常并不真正关心它运行在什么硬件上,所以除非您试图进行内核开发,否则您可以运行一个多功能轻量级内核,并利用QEMU模型所具有的联网功能。)
发布于 2020-07-06 01:30:49
高级Linux声音体系结构(ALSA)试图打开音频接口设备。您必须在qemu中提供音频设备。因为内核是用ALSA音频驱动程序编译的,所以您已经在Buildroot中编译了sdl库。
https://stackoverflow.com/questions/59664680
复制相似问题