基于qemu-riscv从0开始构建嵌入式linux系统ch0.引言

本文档详述了从头开始使用QEMU-RISC-V定制模拟器构建嵌入式Linux系统的过程,涉及硬件定制、软件流程和内存布局,同步发布在博客和GitHub仓库,展示了逐步开发和更新的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于qemu-riscv从0开始构建嵌入式linux系统ch0.引言

引言

本项目旨在真正从0开始构建嵌入式linux系统,为了剖析芯片从上电开始执行第一条指令到整个系统运行,相关应用服务启动,因此不使用市面上真实的板子,基于qemu定制模拟器开发板,且不使用qemu提供的快速加载elf的文件方式,因而我们需要下载qemu-6.0.0源码,自己编写(或使用qemu自带的)硬件ip相关模拟代码定制属于自己的硬件板卡。本项目同步制作博客专栏,因此项目尽量保证每增加一个feature就提交一次,方便索引跟踪开发过程以方便对应到博客的具体章节。

ubuntu18.04需要使用apt安装的包:

sudo apt install ninja-build pkg-config libglib2.0-dev libpixman-1-dev libgtk-3-dev libcap-ng-dev libattr1-dev libsdl2-dev device-tree-compiler bison flex

本教程的
github仓库:https://github.com/QQxiaoming/quard_star_tutorial
gitee仓库:https://gitee.com/QQxiaoming/quard_star_tutorial (由于仓库体积过大,gitee已无法同步github仓库内容更新,建议可以先用gitee克隆仓库,然后修改远端地址为gitehub地址再进行同步)
readthedocs文档:https://quard-star-tutorial.readthedocs.io/zh_CN/latest/?badge=latest

项目预览

本系列文章现已完结总计26章节(ch0-ch25),但项目代码仍会继续开发,以下为目前的项目内容。

硬件架构

下图为目前的虚拟硬件架构,随着项目推进会持续更新。

在这里插入图片描述

软件流程

下图为目前的软件流程,随着项目推进会持续更新。

在这里插入图片描述

内存分布

下图为目前的内存分布,随着项目推进会持续更新。

在这里插入图片描述

### 使用 `qemu-system-riscv64` 启动 QEMU RISC-V64 环境 #### 配置环境 为了成功启动基于 RISC-V64 的虚拟机,需先设置好工作目录以及必要的二进制文件。创建一个新的目录作为镜像存储位置,并复制所需的引导加载程序和其他必要组件到该目录下[^3]。 ```bash mkdir image && cd image cp /usr/share/u-boot-qemu-bin/qemu-riscv64_smode/uboot.elf . cp /usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.bin . cd /home/dqib_riscv64-virt/debian_mirror_folder_path # 替换为实际路径 cp * /home/image/ ``` #### 安装 BusyBox (可选) 如果计划构建最小化根文件系统,则可以考虑安装 BusyBox 工具集来简化操作系统的初始化过程。对于特定架构版本的编译选项如下所示: ```bash make CROSS_COMPILE=riscv64-unknown-linux-gnu- install ``` 此步骤并非强制性的,但对于某些应用场景来说非常有用[^4]。 #### 启动命令示例 当一切准备就绪之后,可以通过下面这条命令行指令来运行 QEMU 并指定目标平台为 RISC-V64: ```bash export PATH=$PATH:/opt/qemu/bin qemu-system-riscv64 \ -machine virt \ -cpu rv64 \ -m 2048M \ -nographic \ -kernel uboot.elf \ -drive file=your_debian_image.img,format=raw,id=mydisk \ -device virtio-blk-device,drive=mydisk,bus=virtio-mmio-bus.0 \ --append "root=/dev/vda1 rw console=ttyS0" ``` 上述命令中的各个参数解释如下: - `-machine virt`: 设置机器类型为虚拟设备; - `-cpu rv64`: 明确指明使用的 CPU 类型; - `-m 2048M`: 分配给 VM 的内存大小; - `-nographic`: 不开启图形界面模式; - `-kernel uboot.elf`: 加载 U-Boot 引导加载器; - `-drive ...`: 挂载磁盘映像; - `-device ...`: 添加 VirtIO 块设备支持; - `--append "..."`: 向内核传递额外参数; 请注意,在执行这些命令之前,请确保已经正确设置了环境变量 `$PATH` 来指向包含 `qemu-system-riscv64` 可执行文件的位置[^2]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Quard_D

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

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

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

打赏作者

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

抵扣说明:

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

余额充值