https://kernel.0voice.com/forum.php?mod=viewthread&tid=3080
 
嵌入式Linux内核 发布于 2023-3-15 14:44:37 阅读 46只看楼主

今天教大家在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充电站

原文地址:手把手教你在QEMU上运行RISC-V Linux

(版权归原作者所有,如有侵权,留言联系删除)

[转帖]手把手教你在QEMU上运行RISC-V Linux的更多相关文章

  1. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  2. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  3. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  4. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置

    前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...

  5. 手把手教你在Ubuntu上分别安装Nginx、PHP和Mysql

    手把手教你在Ubuntu上分别安装Nginx.PHP和Mysql

  6. 手把手教你MyEclipseUML建模(上)

    手把手教你MyEclipseUML建模(上) 转 https://blog.csdn.net/qq_37939251/article/details/83444359 1.用UML 1建模 MyEcl ...

  7. 在qemu上运行BusyBox

    BusyBox 前文“在qemu环境中用gdb调试Linux内核”和“Initramfs 原理和实践”分别描述了怎么用qemu来运行一个编译好的内核,以及怎么指定initramfs,但都是简单的演示. ...

  8. 手把手教你在Ubuntu上安装Apache、MySql和PHP

    1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...

  9. 手把手教你在ubuntu上安装apache和mysql和php

    1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...

  10. 手把手教你在openshift上搭建wordpress博客(二)

    相同公布于:http://www.longgaming.com/archives/128 推荐前往阅读 这一篇文章主要介绍一些经常使用插件的使用和配置. 下面是我个人安装的一些插件.大家能够依据须要自 ...

随机推荐

  1. Java Bean 注册对象

    注册对象 POM.xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-al ...

  2. Axure 母版与元件

    需要重复使用的元件,建议创建成母版: 如果修改了母版,所有页面中的母版元件将会被同步修改 元件:添加后,所有的 Axure 都可以使用 母版:只适用当前的 Axure 原型 拖放行为: 任意位置:可以 ...

  3. Java SpringBoot FTP 上传下载文件

    POM 添加依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all< ...

  4. Sublime Text 查找的内容 高亮显示

    1. 默认情况下是方框,看起来不太方便 2. 选中 "同" 然后按 Alt +F3[下方的查询框要出现,没有的话按 Ctrl+F 调出来,否则不会高亮显示] 同时,选中的文字还会填 ...

  5. DevOps 运维提醒 钉钉 机器人 群通知

    应用系统在碰到运行异常等情况时,发送预警消息@群内相关人员,可以及时发出问题,观察对问题的响应情况 1. 创建一个群(可以是公司内部群) 2. 添加机器人 自定义机器人安全设置: https://op ...

  6. 消息驱动 —— SpringCloud Stream

    Stream 简介 Spring Cloud Stream 是用于构建消息驱动的微服务应用程序的框架,提供了多种中间件的合理配置 Spring Cloud Stream 包含以下核心概念: Desti ...

  7. Python 基于深度学习的 opencv 车牌识别系统,可以准确识别车牌号

    大家好,我是程序员徐师兄,6 年大厂程序员经验,点击关注我 简介 毕业设计基于Opencv的车牌识别系统 车牌搜索识别找出某个车牌号 对比识别车牌系统 车牌数据库认证系统 车牌图文搜索系统 车牌数据库 ...

  8. 原创内容屡屡被盗?从源头对资源盗用说NO

    在这个信息化的时代,资源被盗用是一件很让人厌恶,但又很常见的事.比如,之前郭敬明的小说<梦里花落知多少>剽窃庄羽小说<圈里圈外>一事,虽然郭敬明通过个人微博向庄羽道歉,并表示& ...

  9. DS | 折半查找二叉判定树的画法

    以下给出我在学习中总结的一种比较简便的 构造折半二叉判定树 的思路以及方法: 思路分析: 在计算 \(mid\) 值时,使用的时 \(mid=(low+high)/2\) .这里由于 \(mid\) ...

  10. Redis 缓存性能实践及总结

    一.前言 在互联网应用中,缓存成为高并发架构的关键组件.这篇博客主要介绍缓存使用的典型场景.实操案例分析.Redis使用规范及常规 Redis 监控. 二.常见缓存对比 常见的缓存方案,有本地缓存,包 ...