查看: 923|回复: 0
收起左侧

Running 64-bit RISC-V Linux on QEMU

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-3-3 12:32
  • 签到天数: 10 天

    [LV.3]

    发表于 2020-8-24 12:16:26 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 皋陶 于 2020-8-27 15:25 编辑

    Note: This has been tested on Ubuntu 18.04.


    Prerequisites
    1. sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
    2.                  gawk build-essential bison flex texinfo gperf libtool patchutils bc \
    3.                  zlib1g-dev libexpat-dev git
    复制代码

    Getting the sources

    首先,创建一个工作文件夹,将所有资源全部下载到该文件夹下;


    1. mkdir riscv64-linux
    2. cd riscv64-linux
    复制代码


    然后就开始下载所需要的资源,分别包含了下面5部分:


    • RISC-V newlib and Linux toolchain
    • QEMU
    • Linux
    • BBL (Berkeley Boot Loader)
    • Busybear Linux (RISC-V root filesystem image)

    1. git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
    2. git clone https://github.com/qemu/qemu
    3. git clone https://github.com/torvalds/linux
    4. git clone https://github.com/riscv/riscv-pk
    5. git clone https://github.com/michaeljclark/busybear-linux
    复制代码


    Note: 本人试过,最难的是第一个riscv-gnu-toolchain,各种submodules. 尝试过用Gitee,但是有的模块没有成功,主要可能因为跟网速有关(有兴趣可以尝试一下,说不定你就成功了,哈哈)。我最后是在公司服务器上用上述源地址clone成功的。


    Buildingbuild toolchain
    1. cd riscv-gnu-toolchain
    2. ./configure --prefix=/opt/riscv64                 // pick an install path, e.g. /opt/riscv64
    3. make newlib -j $(nproc)
    4. make linux -j $(nproc)
    复制代码
    1. //导出环境变量(也可以在/etc/profile末尾添加下面两行,这样重启后不会丢失)
    2. export PATH="$PATH:/opt/riscv64/bin"  
    3. export RISCV="/opt/riscv64"
    复制代码

    build QEMU with the RISC-V target

    1. cd qemu
    2. git checkout v3.0.0
    3. ./configure --target-list=riscv64-softmmu
    4. make -j $(nproc)
    5. sudo make install
    复制代码


    Note:

    • configure时可能会报错,错误原因如果是: glib-2.40 gthread-2.0 is required to compile QEMU,可以参考此文解决configure QEMU时遇到缺少库和工具的问题
    • make如果遇到卡到一个config_all_devices的地方,可以选择耐心等待(由于它还是在clone,失败后会Retry),也可中止后重新make,直到make没有error.


    build Linux for the RISC-V target

    1. cd linux
    2. git checkout v4.19-rc3
    3. cp ../busybear-linux/conf/linux.config .config
    4. make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- olddefconfig
    复制代码
    1. # enter kernel configuration
    2. make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- nconfig
    复制代码

    国内芯片技术交流-Running 64-bit RISC-V Linux on QEMUrisc-v单片机中文社区(1)


    确认下面三个选项被选上。


    • ARCH_RV64I (Platform type->Base ISA)
    • CMODEL_MEDANY (Platform type->Kernel Code Model)
    • CONFIG_SIFIVE_PLIC (Device Drivers)


    1. # After accepting changes in the configuration, compile the kernel
    2. make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- vmlinux -j $(nproc)
    复制代码

    build BBL

    1. cd riscv-pk
    2. mkdir build && cd build
    3. ../configure --enable-logo --host=riscv64-unknown-elf --with-payload=../../linux/vmlinux
    4. make -j $(nproc)
    复制代码

    build Busybear Linux

    1. cd busybear-linux
    2. make -j $(nproc)
    复制代码

    Note:


    • make时会先Download些资源,在自己电脑上一直download失败,最后还是在公司服务器上成功。download完之后会自动配置。如果最后出现下图,即生成busybear.bin意味着成功。
      国内芯片技术交流-Running 64-bit RISC-V Linux on QEMUrisc-v单片机中文社区(2)

    • 自己虽然貌似从服务器download成功,但配置最后会报错,问题还是缺少资源。发现busybear下的src文件夹下的riscv-pk是空文件夹。**解决方法是:**将之前编译过的riscv-pk文件夹(与busybear-linux同级目录)复制到src文件夹下,然后再重新编译,成功生成busybear.bin文件。



    Running

    Go back to your main working directory(riscv64-linux) and run:


    1. sudo qemu-system-riscv64 -nographic -machine virt \
    2.      -kernel riscv-pk/build/bbl -append "root=/dev/vda ro console=ttyS0" \
    3.      -drive file=busybear-linux/busybear.bin,format=raw,id=hd0 \
    4.      -device virtio-blk-device,drive=hd0
    复制代码


    执行后,出现下面景象(kernel起来之后会要求输入用户名和密码),恭喜你,基本成功了。


    username------root


    password------busybear


    国内芯片技术交流-Running 64-bit RISC-V Linux on QEMUrisc-v单片机中文社区(3)



    补充: busybear起来之后,如果遇到ntpd的问题,可暂时将/etc/inittab中下面这一行注掉:


    1. ::respawn:/usr/sbin/ntpd -n
    复制代码
    本篇完,感谢关注:RISC-V单片机中文网




    上一篇:RISC-V处理器 蜂鸟e203 core_exu_alu_rglr 源码添加注释
    下一篇:【团购价来了】RISC-V处理器嵌入式开发入门培训
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-27 02:25 , Processed in 0.582315 second(s), 48 queries .

    快速回复 返回顶部 返回列表