实践:qemu 运行 linux riscv with AIA(APLIC&IMSIC)

RISCV架构 Linux AIA支持

目标:在 Qemu 中运行一个支持 riscv aia 的 linux

翻译参考自:https://lwn.net/Articles/963231/

文章日期:2024年2月22日,星期四(截至2024年3月,最新)

这个网站里在不断更新 Linux RISC-V AIA Support ,需要可以 Search -> 查找最新

前置内容

RISC-V AIA 规范是根据 RISC-V 国际流程批准的。最新批准的 AIA 规范可在以下网址找到:

https://github.com/riscv/riscv-aia

从高层次来看,AIA 规范增加了三项内容:

  1. AIA CSRs
    • 改进的本地中断支持
  2. 接收信息信号中断控制器(IMSIC)
    • 每个 HART 一个 MSI 控制器
    • 支持 MSI 虚拟化
    • 在虚拟化的同时支持 IPI
  3. 高级平台级中断控制器(APLIC)
    • 有线中断控制器
    • 在 MSI 模式下,将有线中断转换为 MSI(即 MSI 生成器)
    • 在直接模式下,将外部中断直接注入 HART

有关 AIA 规范的概述,请参阅 KVM 论坛 2022 上的 AIA 虚拟化讲座。2022 年 KVM 论坛上的演讲:

PPT https://static.sched.com/hosted_files/kvmforum2022/a1/AIA_Virtualization_in_KVM_RISCV_final.pdf
视频 https://www.youtube.com/watch?v=r071dL8Z0yo

要测试该系列,请使用 QEMU v7.2(或更高版本)和 OpenSBI v1.2(或更高版本)。

这些补丁也可在 riscv_aia_v14 分支中找到,网址是:https://github.com/avpatel/linux

部分更新记录如下:

Changes since v13:
 - Split PATCH1 into six granular patches
 - Addressed nit comments from Thomas and Bjorn

Changes since v12:
 - Rebased on Linux-6.8-rc5
 - Dropped per-device MSI domain patches which are already merged by Thomas (tglx)
 - Addressed nit comments from Thomas and Clement
 - Added a new patch2 to fix lock dependency warning
 - Replaced local sync IPI in the IMSIC driver with per-CPU timer
 - Simplified locking in the IMSIC driver to avoid lock dependency issues
 - Added a dirty bitmap in the IMSIC driver to optimize per-CPU local sync loop
...

实践:qemu 运行 linux riscv aia

按照前文内容,在 Linux-6.8-rc5 的基础上,添加相应的patch即可

在这里插入图片描述

但我在文中提供的仓库中,未发现 patch 文件(仅找到了对比,如果一个一个复制粘贴则太多了,也可能是我的方式不正确),索性直接下载其源代码

https://github.com/avpatel/linux/tree/riscv_aia_v14

Code -> Download ZIP,直接下载 riscv_aia_v14分支的代码

unzip linux-riscv_aia_v14.zip
cd linux-riscv_aia_v14
# 配置并编译内核, defconfig 表示 default config 默认配置
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc)

编译完成内核后,启动qemu

这里我使用了ubuntu-base的文件系统,如果有需要可以参考我之前的博客,或者使用其他文件系统也可以

添加aclint=on,aia=aplic-imsic,然后成功启动 linux riscv with AIA!

# qemu doc中关于启用aia的命令行参数描述 aia=[none|aplic|aplic-imsic]
# 启动 Qemu   针对 virt 板子启用 aclint 以及 aplic
sudo /opt/qemu/bin/qemu-system-riscv64 \
    -M virt,aclint=on,aia=aplic-imsic \
    -nographic \
    -smp 8 \
    -m 16G \
    -kernel ../linux-riscv_aia_v14/arch/riscv/boot/Image \
    -append "root=/dev/vda rw console=ttyS0" \
    -drive file=riscv64.image,if=none,format=raw,id=hd0 \
    -device virtio-blk-device,drive=hd0
    
# 挂载系统的文件系统
mount -t proc proc /proc
mount -t sysfs sysfs /sys

在这里插入图片描述

通过查设备树(该设备树是qemu自动传给linux内核的),可以确定,成功!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值