我能够交叉编译 RISCV 的二进制文件,即对于 Andes tech, 我有内核映像文件、fw_dynamic.elf 和 u-boot.img 以及 initramfs.devnodes 文件。 我按照 Andestech 提供的说明获取了这些二进制文件。
我遵循的步骤:
我交叉编译opensbl并能够在路径〜opensbi/build/platform/andes/ae350/firmware/中生成fw-dynamic.elf和.bin
编译了 Rootfs(包括 busybox)并在 ~/rootfs/disk/dev/ 生成了 initramfs.devnodes 文件,有一个 .sh 脚本,我只需执行它即可生成它。
使用
编辑linux路径中的.configCONFIG_INITRAMFS_SOURCE="~/rootfs/disk/dev/initramfs.devnodes"
并通过 make 构建 linux。这给了我路径 ~/linux5.4/arch/riscv/boot/
中的 Image.gz 和图像文件通过将 fw_dynamic.* 文件和 linux 映像文件复制到 u-boot 路径中,然后通过 make ae350_rv64_fastboot_defconfig & make ARCH_FLAGS="-march=rv64v5" 来编译 u-boot。这给了我 u-boot.img
现在尝试使用这些文件来使用 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 启动。 有人可以帮我吗,我被困了一段时间,正在尝试我在网上找到的信息,但没有任何进展。
提前致谢。任何指示都会帮助我学习。
你可以尝试添加'-dtb andes.dtb',我添加这个参数并成功运行ae350。