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. 物联网SIM卡和SIM卡真的不是一回事

    办卡吗,兄弟? 物联网卡?相信大家第一反应都是一愣.大家听过银行卡.电话SIM卡.会员卡-等等,很多人可能都是第一次听说物联网卡.那它到底是个什么东东?它能干什么呢?今天就带大家一探究竟. 那在物联网 ...

  2. Cassandra Gossip协议的二三事儿

    摘要:Gossip协议是Cassandra维护各节点状态的一个重要组件,下面我们以Gossip协议三次握手为线索逐步分析Gossip协议源码. Gossip协议是Cassandra维护各节点状态的一个 ...

  3. 如何快速上手 angular.js

    摘要:angular.js 准确的来说,应该不是一个框架,是一个 js 库,一个依赖于 jQuery 的进一步封装,去除繁琐的 DOM 操作,使用数据驱动的 MVC 模块化库. 哎,很难受,连续两个大 ...

  4. 如何配置Apple推送证书 push证书

    ​ 转载:如何配置Apple推送证书 push证书 想要制作push证书,就需要使用快捷工具appuploader工具制 作证书,然后使用Apple的推送功能配置push证书,就可以得到了.PS:pu ...

  5. 火山引擎智能外呼联合火山引擎VeDI升级服务,让企业精准营销不再难

    企业营销模式正在经历一场巨变.数字化营销早已替代传统的营销方式,成为企业营销的主流方式和发展战略中不可或缺的部分.然而随着数字化营销的普及,市场迈入存量竞争时代,获客成本也逐年攀升.面对营销过程中不断 ...

  6. Sublime Text 汉化 中文

    Ctrl+Shift+P 安装 ChineseLocalizations 包 如下图 或者 Preferences -> Package Control

  7. WEB端播放华为海康大华视频方案

    WEB端播放华为海康大华视频方案 类似标题:谷歌浏览器播放华为海康大华视频方案 方案 以下方案相当于给需要播放视频的WEB系统做了一个专用的浏览器,通过专用浏览器的CS客户端组件播放视频,当然,这个专 ...

  8. 0x62 图论-最小生成树

    A题:走廊泼水节 链接:https://ac.nowcoder.com/acm/contest/1056/A 题目描述 给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小 ...

  9. springboot启动流程简单总结

    Spring Boot程序有一个入口,就是main方法.main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootAp ...

  10. 阿里云蝉联 FaaS 领导者,产品能力获最高分

    日前,权威咨询机构 Forrester 发布 The Forrester Wave: Functions-As-A-Service Platforms, Q2 2023.阿里云凭借函数计算的产品能力在 ...