当前位置:首页>Linux>QRISC-V996—从 RTL 核到 Linux #1 (Claude Code版)

QRISC-V996—从 RTL 核到 Linux #1 (Claude Code版)

  • 2026-10-11 07:15:05
QRISC-V996—从 RTL 核到 Linux #1 (Claude Code版)

本文主要介绍如何利用 Claude Code(CC)完成 GitHub 上一个开源 RISC-V 项目的完整环境部署。由于我一直希望搭建一个能够运行 Linux 的RISC-V SoC,并将此前流片实现的 AI 加速器作为外设挂载到系统中做一些有意思的应用,因此选择了这个开源项目作为Baseline。整个部署过程包括了 RTL 仿真环境、RISC-V GNU 编译工具链、Linux 系统编译环境以及 GUI 实时交互界面等多个环节。整个过程耗时不到 12 小时。两年前为了调通这个工程,前后折腾了一两周,最终甚至连个 Linux 都没编译出来。只能说现在智能体的工作效率已经离谱到确实可以进行大裁员了。IC 设计当前这种低效的开发方式,迟早也会被 AI 彻底取代。

工程地址: https://github.com/chengquan/QRISC-V996

本工程完全由 Claude Code 独立生成,本人仅负责“聊天”和下发指令。整个工程消耗了不到一周Token预算的10%,套餐为每月 100 刀。

展示如下:已成功在RTL级跑通一个 Linux 操作系统。Github上有全部实现细节,照着Markdown操作即可,有兴趣的铁子可以跑一下。

与 Claude Code 的大致“聊天”内容如下:

  1. 你能基于开源的 BiRISC-V core 以及一些相关外设,帮我构建一个 RISC-V based SoC 吗?(我只提供了几个 GitHub 链接,比如https://github.com/ultraembedded/biriscv)Result:CC 基本无阻力完成,顺利完成了SoC的构建。

  2. 这个开源工程声称支持 Linux,并提供了编译后的运行环境。但我希望从零开始完整编译 Linux。你能基于其 Boot 程序和 BusyBox 配置实现吗?所需的软件和代码你自行在网上查找。Result:CC 初期编译失败,经过我与它 2–3 轮交互后,它定位到 Linux 内核版本与 Glibc 不兼容的问题,并最终通过升级内核至 4.5 解决。

  3. 我发现开源提供的 testbench 是 SystemC 写的,你能帮我替换成 Verilog 版本吗?Result:CC 无阻力完成。

  4. 当前验证流程都在后台运行,你能做一个 Python GUI 方便我实时交互与监控吗?Result:CC 无阻力完成。

  5. 我发现 UART 是挂在 SBI 上的,你能帮我改成基于 device tree 的驱动方式吗?Result:CC 经过一段 debug 后(期间虽然提示了一些 bug,但我完全不懂这个,只能打鸡血鼓励它),最终自行完成,并顺带生成了新的系统镜像。

  6. 我既希望这个 SoC 能运行裸机程序,也能运行 Linux 程序,你能帮我做一个 SDK,并基于现有外设给出一些示例代码吗?Result:CC 无阻力完成。

  7. 最后,我想把整个工程整理并发布到 GitHub,你能帮我精简结构,并在每个文件夹下补充完整的 Markdown 文档,确保他人可以复现吗?Result:CC 无阻力完成。

本文以下内容均由Claude Code生成。不用看了,凑字数的。

先说结论

不用买开发板、不用流片,只要一台装了 Linux 的电脑(Windows的 WSL 也行),你就能看着一颗 RISC-V 处理器——从上电、跑引导程序、启动 Linux 内核、一直到出现 “~ #” 命令行提示符——全过程都在你眼前的“数字电路仿真”里发生。而且这颗“芯片”和这套 Linux,从硬件电路到操作系统,全部是从源代码自己编译出来的。

这个项目叫QRISC-V996。下面用大白话讲清楚:它是什么、为什么有意思、你能拿它干什么。

一、它到底是什么?

一句话:一个“能开机、能交互、能跑程序”的完整 RISC-V 电脑——只不过这台电脑活在仿真里。

图1 全景:你敲命令→ 仿真里的 RISC-V 芯片→ 运行自编的 Linux

拆开看是四层,每一层都是开源、可自己重建的:

·处理器核:biRISC-V,一颗双发射的 RV32IMA 核(带指令/数据缓存、内存管理单元 MMU)——相当于芯片的“大脑”。

·外设:UART 串口、定时器、GPIO、SPI、中断控制器——全是真正的硬件电路描述(RTL),不是软件假装的。

·操作系统:一套从源码编译的 Linux 5.4 + BusyBox 文件系统。

·引导程序:SBI 固件,负责把内核拉起来、并补上这颗核没有的几条指令。

这四层用Verilator(把电路“翻译”成可运行程序的工具)做成一个仿真器,我们叫它 tb_soc。你通过一个串口控制台GUI 跟里面的 Linux 打字交互,就像连着一块真开发板。

二、为什么这件事有意思?

因为它把通常“看不见、摸不着”的东西,全摊开在你面前了:

·看得见硬件:一条指令怎么取、缓存怎么命中、外设寄存器怎么被读写,都能用波形看到每一个时钟周期。

·全栈自编:从 Verilog 电路,到 GCC 交叉编译器,到Linux 内核,到根文件系统——没有黑盒,每一层都能改、能重建。

·真实但安全:它是真实的电路逻辑(不是“差不多得了”的行为模型),却跑在电脑里,改错了也不会烧板子。

一句话:它是学习“计算机到底怎么从一堆门电路变成能跑 Linux 的系统”的绝佳活教材。

三、芯片内部长什么样?

处理器核通过 AXI 总线,接到一个“互联”上;互联再按地址把请求分发给 DRAM 和各个外设。每个外设都有一个固定的“门牌号”(地址),软件往那个地址读写,就等于操作真实硬件。

图2SoC 内部:核 + AXI 互联+ 真 RTL 外设(每个外设一个地址)

这里踩过两个很“硬核”的坑,也是这个项目最有价值的部分之一:

·AXI ID 路由:核的取指和访存走两条总线,响应必须按编号送回正确的那条,否则取指会永久卡死、根本起不来。

·中断电平:外部中断信号必须“电平跟随”,否则中断只来一次核就僵住——这是让真中断驱动的串口能工作的关键。

这两个都是真实的电路Bug,定位它们要靠看波形一拍一拍地追,修好后系统才能一路启动到命令行。

四、你能拿它干什么?——写程序

平台自带一个 SDK,两种玩法:

① 裸机程序(没有操作系统):直接在核上跑,直接读写外设寄存器去点灯(GPIO)、发串口、收发 SPI。启动快、最适合验证硬件和看波形。一条命令就能编译并跑:

./build_run.sh examples/gpio.c

② Linux 程序(在系统里当进程跑):用标准 C 写,经 /dev/mem 操作外设。这里有个很实用的小发明——“虚拟磁盘”。

图3 虚拟磁盘:改一个程序几秒搞定,不用重建内核

通常你改一个Linux 程序,要把它重新“烤”进内核镜像里,重建一次要一两分钟。虚拟磁盘的做法是:把程序单独打包,放到内存里内核不用的一块区域;开机时系统再用 mmap 把它取出来放进/opt。于是改程序只要重打这块磁盘(几秒),内核完全不用动——迭代效率天差地别。

五、上手有多快?

装好依赖、编译一次仿真器(一两分钟),就能启动:

python3 gui/biriscv_soc_console.py# 点“启动”,等到 ~ # 就能敲命令了

到了命令行,uname、ls、cat /proc/cpuinfo 都能跑;cpuinfo 里会看到 isa: rv32ima、mmu: sv32——这就是biRISC-V 核的真实身份证。想看硬件波形,勾一下“录波形”,GPIO/SPI 引脚的每一次跳变都看得清清楚楚。

写在最后

QRISC-V996 把“一台 RISC-V 电脑”从最底层的电路,到最上层的 Linux 命令行,完整地、可复现地摆在了你面前。它不追求跑得多快(周期级仿真本就慢),而是追求“透明”——每一层都看得见、改得动、能从零重建。

如果你想真正搞懂“计算机是怎么从晶体管一路变成能跑Linux 的系统”,这是一个少见的、能让你亲手把整条链路走一遍的项目。

致谢:处理器核 biRISC-V、外设riscv_soc、引导器riscv-linux-boot 均来自开源社区ultraembedded;操作系统基于Linux 5.4 与 BusyBox。

最新文章

随机文章