当前位置:

实践:qemu 运行 linux riscv with AIA(APLICIMSIC)

访客 2024-04-24 1026 0

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 BjornChanges 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.zipcd linux-riscv_aia_v14# 配置并编译内核, defconfig 表示 default config 默认配置make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfigmake 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 以及 aplicsudo /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 /procmount -t sysfs sysfs /sys

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

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~