【发布时间】:2018-08-08 02:07:09
【问题描述】:
我最近开始为 Raspberry Pi 2 开发裸机,并取得了一些成功。诚然,在我觉得我可以用它做一些有用的事情之前,我一直在犹豫是否购买真正的物理设备,目前我一直在使用 qemu 2.11.0 模拟该设备。 到目前为止,我已经为我的内核开发了多核功能以及简单的串行 I/O,但我觉得在使用物理设备之前我想更进一步。
我现在的问题是我正在尝试学习如何将内核放到 SD 卡映像中并从该 SD 卡映像启动 qemu-system-arm,这样我就可以正确模拟从树莓派加载的内核2 引导加载程序。
我已经从https://github.com/raspberrypi/firmware ... aster/boot 获取 SD 卡内容,并使用以下脚本创建映像并将我的内核加载到其中。我看到人们已经知道如何从模拟的 SD 卡加载 Raspbian,所以我想我也可以这样做。
#!/bin/bash
OUTPUT_IMG=os.img
OUTPUT_IMG_SIZE=40
TEMP_MOUNT_DIR="$(mktemp -d)"
# the SD card boot partition contents are in this folder...
OUTPUT_IMG_CONTENTS_DIR="./sd"
OS_DIR="${HOME}/os"
OS_BINARY="${OS_DIR}/kernel.bin"
dd if=/dev/null of=${OUTPUT_IMG} bs=1M seek=${OUTPUT_IMG_SIZE}
mkfs.fat -F 32 ${OUTPUT_IMG}
sudo mount -t vfat -o loop ${OUTPUT_IMG} ${TEMP_MOUNT_DIR}
make -C ${OS_DIR} clean
make -C ${OS_DIR}
sudo cp -r ${OUTPUT_IMG_CONTENTS_DIR} ${TEMP_MOUNT_DIR}
sudo cp ${OS_BINARY} "${TEMP_MOUNT_DIR}/kernel.img"
唯一的问题是 qemu 似乎没有使用以下命令从该映像启动:
qemu-system-arm -machine raspi2 -serial file:serial.log -sd ./dev/os.img
我尝试了几种不同的组合,但都无济于事。
我可以从挂钩 GDB 中看到内核根本没有从这个卡映像启动。使用 -kernel 参数将内核直接加载到 qemu 中效果很好。
我想知道这里是否有人对如何实现这一点有任何见解! 在这里的任何帮助将不胜感激!
【问题讨论】:
标签: raspberry-pi kernel raspberry-pi2 qemu bare-metal