原文发布于微信公众号:Linux底层小工,欢迎关注公众号,获取更多技术文章!
“ 顺应时代潮流,开始学习risc-v!本文从编译qemu开始,一直到进入Linux shell命令行”
需要说明的是,为了方便,我使用的是wsl2的ubuntu22.04,理论上本文适用于所有ubuntu系统,如果你遇到了问题,可以联系我,帮你解决。
首先建立一个risc-v目录,后续下载的文件都放到该目录下,最终效果如下:
01 编译qemu-9.1.1
打开qemu官网https://www.qemu.org/,下载qemu-9.1.1.tar.xz
解压:
tar xf qemu-9.1.1.tar.xz
之后开始编译:
cd qemu-9.1.1
mkdir build
cd build
../configure --enable-slirp --target-list=riscv64-softmmu
make -j12
编译完成后,生成了qemu-system-riscv64,你可以执行以下命令进行安装:
sudo make install
02 安装riscv64编译器
这里直接使用apt进行安装:
sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y
03 编译opensbi
从github上clone opensbi:
git clone https://github.com/riscv-software-src/opensbi.git -b v1.5.1
编译opensbi:
cd opensbi
make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic all -j12
编译完成后,在build/platform/generic/firmware目录下生成相应的bin文件,后面我们要用到fw_jump.bin文件:
04 编译kernel
从国内镜像源下载kernel比较快,我选择中科大镜像源:
wget https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v6.x/linux-6.11.4.tar.xz
下载得到linux-6.11.4.tar.xz,解压:
tar xf linux-6.11.4.tar.xz
编译kernel:
cd linux-6.11.4
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j12
编译完成后生成arch/riscv/boot/Image文件
05 编译rootfs
我直接使用buildroot编译rootfs,省得手动建立相应目录和文件了,buildroot官网下载最新的buildroot:
下载之后解压:
tar xf buildroot-2024.08.1.tar.xz && cd buildroot-2024.08.1
首先进行配置:
make menuconfig
配置之后进行编译:
make -j12
等待编译完成,就可以开始运行了,buildroot编译过程中会下载kernel代码,很慢,这个时候可以修改buildroot目录下的.config文件中kernel的下载链接为中科大镜像源,然后再编译,下载就会很快
06 qemu运行opensbi+kernel+rootfs
新建一个run.sh文件,写入如下内容:
qemu-9.1.1/build/qemu-system-riscv64 -M virt -smp 4 -m 4G \
-bios opensbi/build/platform/generic/firmware/fw_jump.bin \
-kernel linux-6.11.4/arch/riscv/boot/Image \
-initrd buildroot-2024.08.1/output/images/rootfs.cpio \
-append "root=/dev/ram" \
-display none -serial stdio \
-device virtio-scsi-device \
-device virtio-net-pci,netdev=net0 \
-netdev user,id=net0
当然,如果你的路径和我的不一样,你需要修改成你的路径
保存退出后,给run.sh加上可执行权限:
chmod +x run.sh
开始运行:
./run.sh
运行效果如下,登录用户为root
怎么样很简单吧,如果你喜欢我的文章,请关注一下哟,你的支持是我前进的动力!
下期预告:
qemu+gdb调试opensbi与kernel
欢迎关注公众号:Linux底层小工,获取更多技术文章!