linux - 在qemu-system-arm virt机器上模拟AT91SAM9260嵌入式Linux的难点
问题描述
我已经为 AT91SAM9260 构建了一个内核和根文件系统,并在“文件系统设置”上使用以下 buildroot 菜单选项:
内核构建设置包括 at91_dt_defconfig 选项。
buildroot 的输出文件夹包含以下图像:
rootfs.cpio rootfs.ext2 rootfs.tar zImage
我尝试使用带有以下命令的 qemu 启动:
qemu-system-arm -machine virt -kernel zImage -initrd rootfs.cpio -hda rootfs.ext2 -append "console=ttyS0,115200 root=/dev/sda" -serial stdio
这导致了一个空白的 qemu 屏幕。
我究竟做错了什么?是qemu操作还是buildroot配置问题?
解决方案
问题在于,如果内核是为该硬件编译的,那么它只会在一个 Arm 硬件上启动。否则它通常会失败,通常是在它能够输出任何有用的东西之前崩溃。这是因为(与 x86 系统不同),每个嵌入式 Arm 板和 SoC 都彼此不同,具有不同的设备、设备和位于不同地址的 RAM,等等。QEMU“virt”板不是 AT91SAM9260,不会运行为该 SoC 构建的内核。
您可以:
- 构建一个打算在“virt”板上运行的内核,然后运行它
- 为您感兴趣的 SoC 编写用于 QEMU 的设备模型和 SoC 模型(请注意,这是一项大量工作;它的工作量与移植 Linux 内核和为硬件编写设备驱动程序一样多;它还需要拥有或学习很多关于 QEMU 内部的知识)
推荐阅读
- javascript - MUI 响应式选项卡
- python - 我可以在 python 中按周绘制条形图吗?
- r - 引用 R 中未引用的文本
- ssms - 如何通过文件路径将databricks SQL笔记本连接到镶木地板文件
- javascript - .map() 中的 React 组件抛出错误:TypeError: notes.map is not a function
- selenium - 应用等待按钮更改为文本,然后再次将文本更改为硒中的按钮
- sql - 在 if 语句中引用数据库
- kubernetes - Micronaut 线人
- python - 我如何将json数组显示到python数据框
- reactjs - 获取所有单选按钮答案的值