title: riscv64 qemu 上搭建linux调试开发环境
date: 2022-03-10 19:27:48
categories:
tags:
- linux
- riscv
在学习uboot和Linux时能够在本地debug调试对于代码的理解极其重要,网上找了些资源结合自己在公司的一些使用经历,梳理了一下riscv上的环境搭建方法(ubuntu18.04),让系统在qemu上正常的运行起来。
一个riscv qemu的启动需要经过以下几个步骤:
1.opensbi
2.uboot or linux
3.rootfs
之后就可以进行qemu的仿真与运行了。
参考链接:https://www.manongdao.com/article-2406567.html
要想系统正常的运行起来,必须编译qemu,我用的是在github上下载的较新版本。
下载完成后进入目录进行配置
sudo ./configure --target-list=riscv64-softmmu && sudo make
其中--target-list
后面可以接不同的架构的qemu,比如arm-softmmu
是针对arm平台的。后面多接几个编译也是可以的。
编译完成后输入:
make install
进行qemu的安装,之后输入qemu-
按下tab
可以看到qemu-system-riscv64
。表示qemu安装成功。
在下面这个网站上下工具链压缩包,选择riscv64版本的。
https://toolchains.bootlin.com/
解压后将其配置入自己的环境变量中,配置成功的话输入riscv64按下tab会自动补全。
先在这个网站上下载uboot源码:https://github.com/u-boot/u-boot
将代码下载后,进入目录输入:
make CROSS_COMPILE=riscv64-linux- qemu-riscv64_smode_defconfig
make CROSS_COMPILE=riscv64-linux- -j4
CROSS_COMPILE
指向的是解压后的交叉编译工具链的路径。编译完成之后,可以生成对应的uboot固件。
编译成功的话会生成u-boot.bin
文件
RISC-V Supervisor二进制接口(SBI)是针对RISC-V的一些底层的接口,有两种模式,在M模式下运行的特定于平台的固件,以S模式或HS模式执行的引导加载程序,管理程序或通用OS。
简单的理解就是芯片的bios,通过该程序,可以加载不同的OS或者uboot。
首先需要opensbi的仓库,下载和编译的方式如下:
git clone https://github.com/riscv/opensbi.git
export CROSS_COMPILE=riscv64-linux-
make PLATFORM=generic FW_PAYLOAD_PATH=<uboot_build_directory>/u-boot.bin
这里需要注意的是FW_PAYLOAD_PATH
指向的是我们刚才编译出来的uboot.bin文件夹的路径。
编译完成后可以在build/platform/generic/firmware/
目录下生成对应的启动固件。
在控制台上输入下面命令,即可启动opensbi。
qemu-system-riscv64 -M virt -m 256M -nographic -bios build/platform/generic/firmware/fw_payload.elf
如果想单纯调试学习uboot,到这里就够用了,可以自己尝试着在uboot中自定义命令来debug着学习。
先下载代码:git clone https://github.com/torvalds/linux
接着进行工程配置,设置交叉编译工具链
export ARCH=riscv
export ARCH=<前面所配置的交叉工具链目录>/riscv64-linux-
设置完成后就可以开始编译:make -j8