全国
当前所在位置: 首页 > 旅游攻略

RISC-V篇-qemu+gdb调试OpenSBI源码 - 哔哩哔哩

2025-03-12 本站作者 【 字体:

在现代计算机系统中,操作系统的启动和运行是一系列复杂而精细的过程。随着RISC-V架构的兴起,OpenSBI(Open Source Supervisor Binary Interface)作为RISC-V架构下的开源启动固件,扮演着至关重要的角色。它负责初始化硬件、设置虚拟内存、以及将控制权交给操作系统内核。为了深入理解OpenSBI的工作机制,以及优化其性能和稳定性,调试成为了不可或缺的一环。

本文旨在为读者提供一个关于如何使用QEMU模拟器和GDB调试器来调试OpenSBI源码的详细指南。QEMU是一个通用的开源模拟器和虚拟化器,它可以模拟多种处理器架构,而GDB是一个功能强大的调试工具,两者结合使用,可以极大地提高我们对OpenSBI源码调试的效率。

需要说明的是,接下来的操作,我们仍然是基于上次搭建的运行环境进行的,如果你还没有运行环境最好先移步上一篇文章进行搭建:

01以DEBUG方式编译OpenSBI

由于上次编译命令没有加DEBUG=1参数,所以为了调试,需要重新编译:

make clean

make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic DEBUG=1 all -j2

02安装gdb

直接安装gdb-multiarch即可:

sudo apt install gdb-multiarch -y

03修改qemu启动命令

qemu的启动命令有两个修改点需要注意:

run.sh脚本修改成如下内容:

qemu-9.1.1/build/qemu-system-riscv64 -M virt -m 4G \

-bios opensbi/build/platform/generic/firmware/fw_jump.bin \

-kernel linux-6.11.4/arch/riscv/boot/Image \

-initrd buildroot-2024.08.1/output/images/rootfs.cpio \

-append "root=/dev/ram" \

-display none -serial stdio \

-device virtio-scsi-device \

-device virtio-net-pci,netdev=net0 \

-netdev user,id=net0 \

$1 $2

可以看到删除了-smp 4参数,最后面加了两个需要命令行输入的参数,这样做的好处是,当直接运行run.sh而不加任何参数时不影响qemu的运行,而加了-S -s参数时,qemu启动后会等待gdb的连接

04qemu+gdb调试OpenSBI

终端运行如下命令启动qemu:

./run.sh-S -s

此时qemu停下来了,等待gdb的连接

再打开一个终端,进入到fw_jump.elf的目录下:

cd risc-v/opensbi/build/platform/generic/firmware/

qemu使用教程_怎么使用qemu_qemu详细教程

运行gdb:

gdb-multiarch

注意,此时不要带fw_jump.elf,因为OpenSBI不在0地址运行,如果带fw_jump.elf参数,gdb会默认加载symbol到0地址,后面还需要删除这些symbol,否则会对调试有影响,比如设置断点会命中多个地址等

qemu的address map如下:

static const MemMapEntry virt_memmap[] = {

[VIRT_DEBUG] ={0x0,0x100 },

[VIRT_MROM] ={0x1000,0xf000 },

[VIRT_TEST] ={0x100000,0x1000 },

[VIRT_RTC] ={0x101000,0x1000 },

[VIRT_CLINT] ={0x2000000,0x10000 },

[VIRT_ACLINT_SSWI] ={0x2F00000,0x4000 },

[VIRT_PCIE_PIO] ={0x3000000,0x10000 },

[VIRT_PLATFORM_BUS] = {0x4000000,0x2000000 },

[VIRT_PLIC] ={0xc000000, VIRT_PLIC_SIZE(VIRT_CPUS_MAX * 2) },

[VIRT_APLIC_M] ={0xc000000, APLIC_SIZE(VIRT_CPUS_MAX) },

[VIRT_APLIC_S] ={0xd000000, APLIC_SIZE(VIRT_CPUS_MAX) },

[VIRT_UART0] ={ 0x10000000,0x100 },

[VIRT_VIRTIO] ={ 0x10001000,0x1000 },

[VIRT_FW_CFG] ={ 0x10100000,0x18 },

[VIRT_FLASH] ={ 0x20000000,0x4000000 },

[VIRT_IMSIC_M] ={ 0x24000000, VIRT_IMSIC_MAX_SIZE },

[VIRT_IMSIC_S] ={ 0x28000000, VIRT_IMSIC_MAX_SIZE },

[VIRT_PCIE_ECAM] ={ 0x30000000,0x10000000 },

[VIRT_PCIE_MMIO] ={ 0x40000000,0x40000000 },

[VIRT_DRAM] ={ 0x80000000,0x0 },

};

OpenSBI是运行在DRAM上的,所以我们需要加载符号表到0x80000000地址

启动gdb后,在gdb命令行执行:

add-symbol-file fw_jump.elf 0x80000000

然后输入y,如下图:

qemu详细教程_qemu使用教程_怎么使用qemu

在执行如下命令连接qemu中的gdb server:

target remote:1234

如下图:

qemu使用教程_qemu详细教程_怎么使用qemu

之后就可以设置断点进行调试了,如下图:

qemu使用教程_怎么使用qemu_qemu详细教程

gdb命令都可以使用,是不是又可以把gdb命令给捡起来了

延伸扩展

常用gdb命令总结:

到这里,你就可以对OpenSBI源码进行debug了,如果你觉得对你有用,请不要吝啬你的一键三连哦!

后面有时间我还会写文章分析OpenSBI源码的实现。

阅读全文
加载中~
相关推荐

龙岩市住房和城乡建设局等7部门关于印发深入推动城乡建设绿色发展实施方案的通知

龙岩市住房和城乡建设局等7部门关于印发深入推动城乡建设绿色发展实施方案的通知
各县(市、区)人民政府、龙岩高新区(经开区)管委会:为推动城乡建设绿色发展,经市...

“有一种叫云南的生活·旅居云南”系列新闻发布会·西双版纳专场

“有一种叫云南的生活·旅居云南”系列新闻发布会·西双版纳专场
云南省网上新闻发布厅,云南网

云南六天五晚怎么玩?石林蓝月谷玉龙雪山丽江古城六日游旅游攻略

<strong>云南六天五晚怎么玩?石林蓝月谷玉龙雪山丽江古城六日游旅游攻略</strong>
云南六天五晚怎么玩?石林蓝月谷玉龙雪山丽江古城六日游旅游攻略,石林,大理,蓝月谷...

退休大哥老罗的福建15天自驾日记:山海之间的慢时光

退休大哥老罗的福建15天自驾日记:山海之间的慢时光
退休五年,我走遍了大半个中国,今天要分享的是一份超详细的福建环线自驾攻略,适合中...

有钱没钱都可游览峨眉山,这三条抵达金顶线路,几乎适合所有游客

有钱没钱都可游览峨眉山,这三条抵达金顶线路,几乎适合所有游客
对有些中国人来说,旅游缺的是钱;对有些中国人来说,旅游缺的却是时间;而对大多数中...

春节房车露营旅游受追捧 福建打造20个自驾营地

春节房车露营旅游受追捧 福建打造20个自驾营地
“带着房子出游”成我省旅游新时尚我省拟打造5种类型20个自驾营地,今年春节房车露...

产品丰富体验独特 中国人赴法国旅游增长迅速

产品丰富体验独特 中国人赴法国旅游增长迅速
今年是中法建交60周年,也是中法文化旅游年。法国一直以来都是深受中国游客喜爱的出...

即日起至9月底,甘孜景区对全国人门票半价!阿坝景区对川渝人半价!这样预约→

即日起至9月底,甘孜景区对全国人门票半价!阿坝景区对川渝人半价!这样预约→
四川一波景区官宣了针对学生族的暑期优惠。6月16日,四川甘孜州文化广播电视和旅游...

京郊文艺旅行“小橘书”创意套装全新上市

京郊文艺旅行“小橘书”创意套装全新上市
《顺义理想郊游手册》是一本贴心周到的创意旅本图册。中国国家地理·地道风物编绘制作...

厦门旅游攻略:涵盖热门景点、美食推荐、住宿指南及交通信息一览

厦门旅游攻略:涵盖热门景点、美食推荐、住宿指南及交通信息一览
厦门这座位于东南沿海的美丽海滨城市以其特别的闽南文化和丰富的旅游资源吸引着无数游...
本站访客:314654
1097476955
服务热线

服务热线

18951535724

18951535724
返回顶部