首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Buildroot和Qemu

Buildroot和Qemu
EN

Stack Overflow用户
提问于 2020-01-09 13:07:17
回答 2查看 1.8K关注 1票数 1

我正在使用buildroot编译一个带有4.19-rt内核的极简式linux。它应该运行在一个覆盆子π3b (arm处理器)。此外,我想在x86_64 linux计算机上运行它,并找到了qemu作为模拟解决方案。

  1. 构建linux和内核,并在raspi上运行它。
  2. 测试qemu --我遵循了下面的指令1。最近一个带有4.19内核的raspbian引导良好,所以qemu似乎安装正确。

代码语言:javascript
复制
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放在一起的

  1. 失败了。当我试图模仿任何自我构建linux时,qemu只显示一个黑屏,一个CPU使用100%。

我使用了与实际硬件相同的sdcard.img。我还尝试用一个普通的4.19内核重新编译整个系统(没有实时的)。我试图构建一个通用的系统(make qemu_arm_versatile_defconfig && make)。都不管用。

命令启动仿真:

代码语言:javascript
复制
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

我的主要问题是,绝对没有有用的输出。该命令输出以下内容

代码语言:javascript
复制
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为我提供关于哪里出了问题的有用信息?

1

EN

回答 2

Stack Overflow用户

发布于 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模型所具有的联网功能。)

票数 1
EN

Stack Overflow用户

发布于 2020-07-06 01:30:49

高级Linux声音体系结构(ALSA)试图打开音频接口设备。您必须在qemu中提供音频设备。因为内核是用ALSA音频驱动程序编译的,所以您已经在Buildroot中编译了sdl库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59664680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档