教你在QEMU上搭建RISC-V Linux环境

  • 今天教大家在QEMU模拟器上运行一个RISC-V Linux

    一个RISC-V Linux包括:

    • opensbi
    • linux
    • 根文件系统

    1、下载RISC-V工具链

    自己下载工具链源码进行编译容易配错选项,我们使用编译好的工具链即可。

    网址:https://toolchains.bootlin.com

    这个网站提供了一些已经编译好的工具链,我们从中下载即可。

    arch选择riscv64-lp64d,libc选择glibc,然后点击下载。

    stable是稳定版,bleeding-edge是最新的,可根据需要选择,这里我们选择bleeding-edge。

    下载后解压:

      tar -jxvf riscv64-lp64d--glibc--bleeding-edge-2022.08-1.tar.bz2 
    

    将riscv64-lp64d–glibc–bleeding-edge-2022.08-1/bin路径添加到PATH环境变量中:

      export PATH=/home/yjx/workspace/toolchain/riscv64-lp64d--glibc--bleeding-edge-2022.08-1/bin:$PATH
    

    2、安装QEMU

    QEMU官网:https://www.qemu.org/

    下载安装:

      wget https://download.qemu.org/qemu-7.1.0.tar.xz
      tar xvJf qemu-7.1.0.tar.xz
      cd qemu-7.1.0
      ./configure
      make
    

    3、编译opensbi

    下载opensbi:

      git clone https://github.com/riscv-software-src/opensbi.git
    

    编译:

      export CROSS_COMPILE=riscv64-linux-
      make PLATFORM=generic
    

    编译完后生成的固件在build/platform/generic/firmware/目录下:


    生成的固件有三种类型:dynamic、jump和payload

    • dynamic:带有动态信息的固件
    • jump:指定下一级的boot地址跳转
    • payload:包含下一级boot的二进制内容,通常是uboot/linux

    这里我们使用jump类型固件,OpenSBI运行后,可以直接跳转到kernel运行。

    因为opensbi本身就是一个bootloader,因此可以不使用uboot引导kernel,通过opensbi的jump固件,可以直接跳转到kernel启动。

    4、编译kernel

    Linux内核官网:www.kernel.org

    选择当前稳定版5.19.16下载

    解压kernel:

      tar -xf linux-5.19.16.tar.xz
      cd linux-5.19.16
    

    编译:

      export ARCH=riscv
      export CROSS_COMPILE=riscv64-linux-
    
      make defconfig
      make -j8
    

    编译完成后,在arch/riscv/boot下生成Image:

    5、制作rootfs

    文件系统可以用busybox、buildroot等工具制作,busybox需要自己一步一步的做出来,过程比较麻烦。更便捷的做法是使用buildroot,它可以自动帮我们完成。

    下载地址:https://buildroot.org/download.html

    下载后解压:

       tar -xvf buildroot-2022.02.6.tar.gz
    

    进入buildroot菜单配置界面:

      cd buildroot-2022.02.6
      make menuconfig
    

    选择RISC-V架构

      Target options  --->
        Target Architecture (i386)  --->
      	    (X) RISCV
    


    选择ext文件系统类型:

      Filesystem images  --->
      	 [*] ext2/3/4 root filesystem 
    

    保存后编译:

      make -j8
    

    编译需要花一些时间,buildroot前期大部分时间去编译工具链了。
    编译完后,生成文件在output/images目录下:

    rootfs.ext2是我们需要用到的。

    6、运行

    将fw_jump.elf、Image、rootfs.ext2拷贝到当前目录下:

    新建start-qemu.sh脚本,输入以下内容:

      #!/bin/sh
    
      qemu-system-riscv64 -M virt \
      -bios fw_jump.elf \
      -kernel Image \
      -append "rootwait root=/dev/vda ro" \
      -drive file=rootfs.ext2,format=raw,id=hd0 \
      -device virtio-blk-device,drive=hd0 \
      -netdev user,id=net0 -device virtio-net-device,netdev=net0 -nographic
    

    修改权限:

    chmod 777 start-qemu.sh

    运行start-qemu.sh启动RISC-V Linux:

    输入root回车登录:

    成功进入Linux!

    buildroot搭建环境

    前面我们用buildroot制作了文件系统,但buildroot其实可以帮我们搭建一套完整环境,包括工具链、opensbi、linux、文件系统等等,只需要简单配置一下,即可自动帮我们完成,非常方便。下面教大家使用buildroot搭建一个qemu riscv64 linux系统。

    使用默认的qemu_riscv64配置进行编译:

      cd buildroot-2022.02.6
      make qemu_riscv64_virt_defconfig
      make -j
    

    接下来就是漫长的等待,可能需要几个小时。
    编译完后,生成文件在output/images目录下:

    可以看到opensbi、Image、rootfs都做好了,包括qemu的下载编译也会帮我们自动完成。可以直接运行start-qemu.sh:

    使用buildroot搭建环境,几乎什么都不需要做,非常方便!要注意的就是确保网络畅通,网络不流畅buildroot可能会中断。

    总结

    学习RISC-V Linux搭建环境是第一步,有了环境才能更好的去跟踪源码调试,当然如果有开发板更好。以上是我在qemu上搭建RISC-V Linux的总结,希望对大家有帮助。

    喜欢的话可以点个关注~
    微信公众号:嵌入式Linux充电站

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Linux充电站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值