赞
踩
实验需要riscv仿真,网上没有针对m1的配置教程,故在此整理下。本人用的m1macbookpro,系统12.3。
参考到的链接:
https://github.com/AsahiLinux
https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html
https://zhuanlan.zhihu.com/p/258394849
https://zhuanlan.zhihu.com/p/555398048
安装asashi linux仅需一行命令,安装按照提示执行即可:
curl https://alx.sh | sh
$ sudo pacman -Syyu autoconf automake curl python3 libmpc mpfr gmp gawk base-devel bison flex texinfo gperf libtool patchutils bc zlib expat
$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
$ cd riscv-gnu-toolchain
$ ./configure --prefix=/opt/riscv
$ make linux -j$(nproc)
export PATH="$PATH:/opt/riscv/bin"
export RISCV="/opt/riscv"
$ riscv64-unknown-linux-gnu-gcc -v
$ mkdir riscv64-linux
$ cd riscv64-linux
$ git clone https://github.com/qemu/qemu
$ git clone https://github.com/torvalds/linux
$ git clone https://git.busybox.net/busybox
$ cd qemu
$ git checkout v5.1.0
$ ./configure --target-list=riscv64-softmmu
$ make -j $(nproc)
$ sudo make install
这里会遇到一些类型转换和数组对齐报错,通过在报错的文件顶端添加#pragma GCC diagnostic ignored “-Wxx”
可忽略这些错误,他们是编译器版本不同导致的,xx换成报的error即可。
$ cd linux
$ git checkout v5.4.0
$ make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig
$ make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc)
这里会遇到一个重定义报错,将其中一个作为实际变量,其他出现的地方添加extern可解决。
$ cd busybox
$ CROSS_COMPILE=riscv64-unknown-linux-gnu- make menuconfig
打开配置菜单后进入第一行的 “Settings”,在"Build Options"节中,选中 “Build static binary (no shared libs)”,设置好后退出保存配置
$ CROSS_COMPILE=riscv64-unknown-linux-gnu- make defconfig
$ CROSS_COMPILE=riscv64-unknown-linux-gnu- make -j $(nproc)
$ CROSS_COMPILE=riscv64-unknown-linux-gnu- make install
编译完后在目录下会有一个_install目录。
$ cd riscv64-linux
$ qemu-img create rootfs.img 1g
$ mkfs.ext4 rootfs.img
$ mkdir rootfs
$ sudo mount -o loop rootfs.img rootfs
$ cd rootfs
$ sudo cp -r ../busybox/_install/* .
$ sudo mkdir proc sys dev etc etc/init.d
创建init
$ cd etc/init.d/
$ sudo touch rcS
$ sudo vi rcS
编辑该文件内容如下:
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
增加权限:
$ sudo chmod +x rcS
最后解除mount
$ sudo umount rootfs
$ cd riscv64-linux
$ qemu-system-riscv64 -M virt -m 256M -nographic -kernel linux/arch/riscv/boot/Image -drive file=rootfs.img,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -append "root=/dev/vda rw console=ttyS0"
按回车后即可进入系统:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。