在 Qemu 上启动交叉编译的 RISCV 二进制文件

问题描述 投票:0回答:1

我能够交叉编译 RISCV 的二进制文件,即对于 Andes tech, 我有内核映像文件、fw_dynamic.elf 和 u-boot.img 以及 initramfs.devnodes 文件。 我按照 Andestech 提供的说明获取了这些二进制文件。

我遵循的步骤:

  1. 我交叉编译opensbl并能够在路径〜opensbi/build/platform/andes/ae350/firmware/中生成fw-dynamic.elf和.bin

  2. 编译了 Rootfs(包括 busybox)并在 ~/rootfs/disk/dev/ 生成了 initramfs.devnodes 文件,有一个 .sh 脚本,我只需执行它即可生成它。

  3. 使用

    编辑linux路径中的.config
CONFIG_INITRAMFS_SOURCE="~/rootfs/disk/dev/initramfs.devnodes" 

并通过 make 构建 linux。这给了我路径 ~/linux5.4/arch/riscv/boot/

中的 Image.gz 和图像文件
  1. 通过将 fw_dynamic.* 文件和 linux 映像文件复制到 u-boot 路径中,然后通过 make ae350_rv64_fastboot_defconfig & make ARCH_FLAGS="-march=rv64v5" 来编译 u-boot。这给了我 u-boot.img

  2. 现在尝试使用这些文件来使用 QEMU 进行引导。使用 text

    安装了 Qemu

当我执行以下命令时:

$ ./qemu-system-riscv64 -nographic -M andes_ae350 -cpu andes-ax45 -m 2G \
-kernel ~/linux-5.4/arch/riscv/boot/Image \
-bios ~/opensbi/build/platform/andes/ae350/firmware/fw_dynamic.elf \
-initrd ~/rootfs/disk/dev/initramfs.devnodes \
-append "root=/dev/vda rw console=ttyS0"

不确定根设备名称是否为 /dev/vda,否则请纠正。

我遇到以下错误:

[    0.223322] Segment Routing with IPv6
[    0.224621] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    0.227011] NET: Registered protocol family 17
[    0.227576] NET: Registered protocol family 15
[    0.231335] ALSA device list:
[    0.231823]   No soundcards found.
[    0.232985] Warning: unable to open an initial console.
[    0.234276] Failed to create /dev/root: -2
[    0.234868] VFS: Cannot open root device "vda" or unknown-block(0,0): error -2
[    0.234994] Please append a correct "root=" boot option; here are the available partitions:
[    0.235251] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    0.235527] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.220-21054-gf1d0d3f65278 #4
[    0.235702] Call Trace:
[    0.236096] [<ffffffe00003537c>] walk_stackframe+0x0/0xa8
[    0.236217] [<ffffffe00049e910>] show_stack+0x30/0x3c
[    0.236302] [<ffffffe0004a44ec>] dump_stack+0x6c/0x88
[    0.236385] [<ffffffe00049ebf8>] panic+0xe8/0x290
[    0.236531] [<ffffffe0000020bc>] 0xffffffe0000020bc
[    0.236612] [<ffffffe000002208>] 0xffffffe000002208
[    0.236691] [<ffffffe000002354>] 0xffffffe000002354
[    0.236772] [<ffffffe000001cfc>] 0xffffffe000001cfc
[    0.236857] [<ffffffe0004a46cc>] kernel_init+0x14/0xdc
[    0.236941] [<ffffffe000033e46>] ret_from_exception+0x0/0xc
[    0.237382] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---

我期待 Linux 从 qemu 启动。 有人可以帮我吗,我被困了一段时间,正在尝试我在网上找到的信息,但没有任何进展。

提前致谢。任何指示都会帮助我学习。

linux-kernel embedded-linux qemu riscv
1个回答
0
投票

你可以尝试添加'-dtb andes.dtb',我添加这个参数并成功运行ae350。

© www.soinside.com 2019 - 2024. All rights reserved.