想象你走进一座“开放厨房主题餐厅”。门口贴着一本公开的菜谱——谁都能翻、谁都能学、谁都能照着做菜。这就是RISC-V:一套完全开放的指令集架构(ISA),不像隔壁的x86和ARM那样由少数巨头锁在保险柜里收授权费。菜谱公开后,各家主厨(芯片厂商)纷纷登场:SiFive像西餐名厨,阿里平头哥像精通融合菜的大师傅,赛昶则像做地道家常菜的本地厨师。他们各自做出了招牌菜,而后厨需要把菜端出来供人品尝,于是有了各式各样的“试吃盘”——开发板:HiFive、Kraken、香山。后厨里还有统一的厨具(GCC与LLVM工具链)、一间可以“纸上练手”的模拟灶台(QEMU模拟器),以及一位负责在后台调度传菜、协调座位的“餐厅管家”(OpenSBI固件)。这篇内容,就是带你把这座“开放厨房”从头到尾逛一遍,看懂每一层的角色、选对适合自己的那盘菜。

岗位关联

对AI从业者而言,看懂RISC-V生态和开发板选型,意味着AI算法落地到硬件时能自主评估芯片、板卡与工具链,是走向AIoT、边缘计算和定制化AI芯片方向的重要软技能。

目录
  1. 可视化演示
  2. 生态全景
  3. 芯片厂商
  4. 开发板矩阵
  5. 工具链支撑
  6. QEMU模拟
  7. OpenSBI固件
  8. 选型策略
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示RISC-V模块化ISA扩展架构、主流开发板选型对比、工具链与M/S/U特权级启动流程三阶段交互探索。

本节配有交互动效(进入视口后自动加载,约 3KB)。

RISC-V模块化ISA架构 RV32/64/128基本整数ISA为核心 M/A/F/D/C/V扩展模块化组合 模块化设计按需扩展精简高效 ISA = Base + Ext(M,A,F,D,C,V) RISC-V模块化ISA灵活可扩展

生态全景

一座“开放厨房”之所以能热闹起来,前提是门口那本菜谱对所有人免费敞开。传统指令集架构像被连锁巨头垄断的秘方——x86由Intel和AMD掌握,ARM由英国公司授权把关,你想用就得交一大笔“加盟费”。而RISC-V反其道而行:它把“菜谱”(指令集架构规范)完全开放,任何个人、大学、公司都可以免费阅读、自由实现,甚至按自己的口味往里加“新菜”(自定义扩展指令)。这一下,厨房从“一家独大”变成了“百家争鸣”。

如果把RISC-V生态比作一座餐厅体系,它可以分成四层:最内层是菜谱本身——基础指令集与标准扩展指令集;第二层是掌勺的主厨——芯片厂商;第三层是端出的试吃盘——开发板;第四层是后厨装备——工具链、模拟器与固件。四层环环相扣:没有菜谱,主厨无从下手;没有主厨,菜谱只是一纸空文;没有试吃盘,食客无法品尝;没有后厨装备,再好的菜也传不到桌前。

产业格局上,RISC-V已不是实验室里的玩具。汽车、物联网、AI加速器、服务器等多个领域都出现了RISC-V的身影。从2010年诞生于加州大学伯克利分校,到如今被全球数千家公司采用,这本“开放菜谱”的演进速度远超当年x86和ARM的起步阶段。理解这套生态全景,是进入RISC-V世界的第一把钥匙。

可见,RISC-V的生态根基就藏在这条“拼装公式”里。正因为菜底和配菜可以自由组合,每家餐厅才能端出自己的招牌菜,同时又保证食客(开发者)看到菜名就懂做法。这座开放厨房的烟火气,正是从这份“可拼装菜谱”开始的。

ISARV=Base(32)∪Ext{M,A,F,D,C}\text{ISA}_{RV} = \text{Base}(32) \cup \text{Ext}\left\{M, A, F, D, C\right\}
这条公式说的是:一份完整的RISC-V菜谱 = 基础菜底 + 五份可选配菜,你可以按需拼装。
  1. 指令集代号\text{ISA}_{RV} 表示RISC-V指令集这一整体概念,就像菜谱的书名。
    ISARV\text{ISA}_{RV}
  2. 基础整数指令集\text{Base}(32) 是32位基础整数指令,相当于所有菜的“基础汤底”,任何RISC-V处理器都必须包含它。
    Base(32)\text{Base}(32)
  3. 并集符号\cup 表示把它们拼接组合在一起,就像“汤底 + 配菜”。
    ∪\cup
  4. 扩展指令包\text{Ext}\left\{M, A, F, D, C\right\} 是五道标准配菜——M整数乘除法、A原子操作、F单精度浮点、D双精度浮点、C压缩指令,按需选配。
    Ext{M,A,F,D,C}\text{Ext}\left\{M, A, F, D, C\right\}

芯片厂商

菜谱公开了,谁来掌勺?RISC-V的“厨房”里同时站着三位风格迥异的主厨。第一位是来自硅谷的SiFive,它像一位动作最快的西餐名厨——2015年由RISC-V创始人参与创立,是第一个把RISC-V芯片商业化的公司。它不只做菜,还提供“预制菜包”(处理器IP核),让其他餐厅不用从零开始备料就能快速出餐。第二位是阿里巴巴平头哥,像一位擅长融合菜的大厨,推出了玄铁系列处理器,覆盖从极简嵌入式到高性能计算的多个档位,还把工具链和软件生态一并打包上桌,特别照顾国内开发者的口味。

第三位是赛昶科技,它更像一位深耕本土的老厨师,注重国产化与供应链安全,在工业控制、电力、物联网等领域积累了扎实口碑。三位主厨的商业模式也各有侧重:SiFive走IP授权+芯片销售双线,平头哥以开源方式推动玄铁系列生态扩散,赛昶则聚焦行业定制与信创市场。这提醒我们:RISC-V生态不是“一家独大”,而是多元共生的开放市场。

食客自然会问:三位主厨的菜,到底哪家快?这就要看“出餐速度”这个核心指标。处理器的出餐速度由两个因素共同决定:每秒钟端出几道菜(主频),以及每道菜上桌需要几个步骤(IPC)。

了解了主厨实力后你就能明白:SiFive、平头哥、赛昶虽然同看一本菜谱,但各自的火候、刀工、配菜方案完全不同,最终端出的菜自然各有风味。选谁合作,取决于你的餐厅定位和预算——这正是后面选型策略要解决的问题。

P=IPC×fP = \text{IPC} \times f
处理器性能 = 每时钟周期执行的指令数 × 时钟主频,两者相乘才是真实的“出餐速度”。
  1. 处理器性能P 代表处理器整体性能,相当于厨房单位时间能端出的菜品总数。
    PP
  2. 每周期指令数\text{IPC} 是每个时钟周期平均完成的指令条数,相当于“一次备料能同时炒几个菜”。
    IPC\text{IPC}
  3. 乘法关系\times 表示两者相乘,任何一项为零,整体性能都为零。
    ×\times
  4. 时钟主频f 是处理器工作的节拍频率(如1GHz),相当于后厨“咚咚咚”切菜的速度节拍。
    ff

开发板矩阵

菜谱有了,主厨也开工了,可食客怎么尝菜?这就轮到“试吃盘”——开发板登场。开发板是一块集成了RISC-V处理器、内存、接口和调试电路的电路板,让你在量产前先跑起来、摸一摸、测一测。三块有代表性的试吃盘摆在桌上:HiFive系列像是SiFive品牌的“主厨推荐”,从HiFive1到HiFive Unleashed,从单片机级到Linux级全覆盖,生态成熟、资料丰富,最适合初学者先尝一口鲜;Kraken则像一份“高性价比套餐”,由国内厂商基于平头哥玄铁内核打造,接口齐全、价格亲民,适合快速做原型验证;香山则完全不一样——它不是商业餐厅的菜,而是中科院计算所发起的开源处理器项目,像一份“学术实验菜”,通常运行在FPGA上,适合研究处理器微架构的人深度学习。

面对三块试吃盘,该怎么挑?关键看四点:处理器性能够不够、外设接口齐不齐、内存带宽管不管饱、配套软件(BSP与工具链)顺不顺手。你还可以给这些因素打分,算出一个“适配度”来辅助决策——比如给性能权重0.4、外设权重0.3、价格权重0.3,然后为每块板子逐项打分:

开发板的价值在于“以最低成本试错”。HiFive让你站稳脚跟,Kraken让你快速出活,香山让你深入内核。真正搞懂这盘“试吃菜”怎么品,你就能在正式量产之前避开绝大多数的硬件坑。

Fit=w1⋅C+w2⋅P+w3⋅E\text{Fit} = w_1 \cdot C + w_2 \cdot P + w_3 \cdot E
适配度 = 成本项权重×成本得分 + 性能项权重×性能得分 + 生态项权重×生态得分。
  1. 适配度\text{Fit} 表示开发板与需求的匹配程度,分数越高越推荐。
    Fit\text{Fit}
  2. 权重项w_1, w_2, w_3 是你根据场景给成本、性能、生态分配的重视程度,三者之和通常为1。
    w1,w2,w3w_1, w_2, w_3
  3. 成本评分C 是板卡价格与供货成本的量化得分,价格越低分越高。
    CC
  4. 性能与生态评分P 是处理器/接口性能得分,E 是生态与软件支持得分。
    P,EP, E

工具链支撑

后厨光有好菜谱还不够,还得有趁手的厨具。RISC-V的工具链,就是主厨们的锅碗瓢盆。两大厨具品牌最常用:GCC和LLVM。GCC像一套经典耐用的中式炒锅——历史悠久、兼容性好、生态资料多,几乎所有RISC-V开发板都支持,用riscv64-unknown-elf-gcc这样的命令就能把C代码编译成RISC-V机器码;LLVM则像一套模块化的西式料理机——前端、优化器、后端彼此解耦,想要新增一个自定义指令扩展,只需要改后端的一部分代码就行,特别适合做AI加速指令定制的团队。

除了这两个“大件”,还有一把精细的“手术刀”——GDB调试器。它通过JTAG或OpenOCD连接开发板,让你像用内窥镜一样看清程序跑到哪一行、寄存器里存了什么值。此外,构建系统(Buildroot、Yocto)像后厨的排菜系统,把内核、根文件系统、交叉编译工具链打包成一整套“宴席菜单”,一条命令即可生成完整的嵌入式系统镜像。

这些厨具是怎么协作出菜的?从一份C语言源码到能在开发板上运行的二进制程序,要经过四道工序:

工具链就像后厨的流水线:切配、腌制、炒制、摆盘,缺一道菜就上不了桌。GCC的稳妥、LLVM的灵活、GDB的精准、构建系统的高效,共同保证了RISC-V这道“开放菜系”的出餐质量。

Src→编译Asm→汇编Obj→链接Exec\text{Src} \xrightarrow{\text{编译}} \text{Asm} \xrightarrow{\text{汇编}} \text{Obj} \xrightarrow{\text{链接}} \text{Exec}
源码 → 编译为汇编 → 汇编为目标文件 → 链接为可执行文件,这就是现代后厨的完整流水线。
  1. 源码起点\text{Src} 是C/C++源代码,相当于一筐待处理的生鲜食材。
    Src\text{Src}
  2. 编译工序\xrightarrow{\text{编译}} 由GCC/LLVM完成,把高级语言翻译成汇编语言,相当于把食材切片、腌制。
    →编译Asm\xrightarrow{\text{编译}} \text{Asm}
  3. 汇编工序\xrightarrow{\text{汇编}} 由汇编器完成,把汇编翻译成机器能懂的目标文件(.o),相当于把配菜装盘。
    →汇编Obj\xrightarrow{\text{汇编}} \text{Obj}
  4. 链接工序\xrightarrow{\text{链接}} 由链接器完成,把多个目标文件和库合并成最终可执行文件,相当于把各个盘子组合成一桌宴席。
    →链接Exec\xrightarrow{\text{链接}} \text{Exec}

QEMU模拟

真实厨房太贵、备料太麻烦,能不能先在纸上模拟一遍做菜流程?QEMU就是那间“模拟灶台”。它是一个开源的软件模拟器,能在你的电脑上虚拟出一块RISC-V开发板——不需要真实硬件,就能启动Linux内核、运行C程序、调试引导代码。它的核心魔法叫“动态二进制翻译”:把目标平台的RISC-V指令逐条翻译成你电脑CPU能执行的指令,边翻译边执行。

有了这间模拟灶台,早期开发流程会变得异常顺畅。比如你想在RISC-V上跑通一个AI推理程序:先在本机用QEMU模拟出带向量扩展(V扩展)的CPU,编译并验证程序逻辑,等代码调通后再烧录到真实开发板上。这样一来,就算开发板还在海上漂着,你的代码已经跑完了十轮实验。QEMU还支持GDB远程调试接口,让你在模拟环境里设断点、看寄存器,和真机调试体验一致。

但模拟灶台也有局限:它模拟的是“流程”,不是“火候”。动态翻译的开销意味着模拟速度远慢于真实硬件,而且外部设备(网卡、传感器)的行为难以完美还原。因此,QEMU擅长的是功能验证,而不是性能测试。模拟一秒钟的代价可以这样估算:

正因为模拟灶台有“翻译开销”这个额外成本,它更适合作为早期开发的第一站,而非最终验收的考场。聪明的团队总是先在QEMU上把功能跑通,再上真机调性能——省钱、省力、省时间。

tsim=ttrans+n⋅texect_{\text{sim}} = t_{\text{trans}} + n \cdot t_{\text{exec}}
模拟总耗时 = 翻译开销 + 指令条数 × 每条指令的执行时间,翻译开销就是“模拟灶台”额外消耗的精力。
  1. 模拟总耗时t_{\text{sim}} 是QEMU运行一段程序的总时间。
    tsimt_{\text{sim}}
  2. 翻译开销t_{\text{trans}} 是把RISC-V指令翻译成宿主指令的一次性/持续成本。
    ttranst_{\text{trans}}
  3. 指令条数n 是需要翻译执行的指令总数,程序越大,n越大。
    nn
  4. 单条执行时间t_{\text{exec}} 是翻译后每条指令在宿主CPU上的实际执行时间。
    texect_{\text{exec}}

OpenSBI固件

餐厅开门营业,后厨热火朝天,但谁来安排座位、协调传菜、处理突发状况?在RISC-V系统里,这个“餐厅管家”就是OpenSBI。要理解它,得先明白RISC-V世界的“等级制度”:特权模式分三档——M模式(机器模式)像后厨总管理员,权限最高,直接掌控硬件;S模式(监督模式)像前厅经理,运行操作系统,但不能直接碰敏感硬件;U模式(用户模式)就是普通食客,只能安安静静吃饭(跑应用程序)。

OpenSBI就是住在M模式里的“管家”。它实现了SBI规范——一套标准服务接口,定义了S模式的操作系统该如何“呼叫”M模式的底层服务。当Linux想关中断、设置定时器、重启系统时,它并不直接操作硬件,而是对OpenSBI发出一个ecall指令,由管家代劳。这就像客人不直接冲进后厨要水,而是招手叫服务员,再由服务员去后厨协调。

整个系统的启动也全靠这位管家张罗。上电后,CPU先进入M模式,OpenSBI完成硬件初始化,然后把控制权移交给S模式的内核,内核再启动U模式的应用程序。这一条“权力交接链”可以写成:

有了这位“餐厅管家”,操作系统不必亲自和每一样硬件打交道,硬件厂商也不用为每个操作系统单独适配。OpenSBI像一座桥梁,让Linux、RTOS等不同“食客”都能在RISC-V餐厅里自在用餐。

Boot: M→OpenSBIS→KernelU\text{Boot: } M \xrightarrow{\text{OpenSBI}} S \xrightarrow{\text{Kernel}} U
启动链:机器模式(OpenSBI) → 监督模式(内核) → 用户模式(应用),权力逐级下放。
  1. 机器模式M 是权限最高的机器模式,OpenSBI在这里掌握硬件控制权。
    MM
  2. 固件交接\xrightarrow{\text{OpenSBI}} 表示OpenSBI完成初始化后,将处理器切换到S模式。
    →OpenSBIS\xrightarrow{\text{OpenSBI}} S
  3. 内核接管\xrightarrow{\text{Kernel}} 表示操作系统内核运行起来后,把普通程序放到U模式执行。
    →KernelU\xrightarrow{\text{Kernel}} U
  4. 用户模式U 是权限最低的用户模式,应用程序在此运行,无法直接破坏系统安全。
    UU

选型策略

逛完整个开放厨房,最后一步是“点菜”:我到底该用哪家芯片、哪块开发板、哪套工具链?选型不是拍脑袋,而是一场理性的“点单决策”。第一步是明确场景需求:你是做AIoT低功耗设备,还是做边缘AI推理盒子,抑或是研究处理器微架构?需求不同,菜就完全不同——低功耗设备适合高能效比的嵌入式RISC-V芯片,AI推理需要带向量扩展的高性能处理器,科研场景则适合香山这样的开源平台。

第二步是建立评估维度。常用的四维框架是:性能、成本、功耗、生态。每个维度按场景分配权重,就像点火锅时按口味调配油碟:重性能的AI推理,性能权重拉到0.4;做电池设备,功耗权重可能升到0.5。第三步是收集候选平台的得分并计算加权总分;第四步是考虑生态演进——这家芯片的社区活跃吗?工具链跟上吗?未来三年会持续迭代吗?这套流程可以提炼为一个加权评分模型:

回头再看这家开放厨房:菜谱开放,主厨多元,试吃盘琳琅,厨具齐备,还有模拟灶台和餐厅管家保驾。而你的“点单功夫”——选型策略——决定了最终端上桌的菜是否对味。掌握这套方法,你就能在RISC-V的百花园里,摘到自己最需要的那一朵。

Score=∑i=1nwixi\text{Score} = \sum_{i=1}^{n} w_i x_i
总分 = 所有维度的权重与得分乘积之和,权重代表你的需求偏好,得分代表平台的客观表现。
  1. 总分\text{Score} 是候选方案的综合得分,用于横向比较。
    Score\text{Score}
  2. 求和符号\sum_{i=1}^{n} 表示对所有评估维度(性能、成本、功耗、生态等)累加。
    ∑i=1n\sum_{i=1}^{n}
  3. 维度权重w_i 是第i个维度的重要性,所有权重之和为1。
    wiw_i
  4. 维度得分x_i 是第i个维度的量化得分,来自规格对比或实测数据。
    xix_i

AI 应用场景

场景一:AIoT芯片选型评估

阶段:硬件平台选型与部署阶段

解决的问题:传统AIoT设备芯片选型往往绑定ARM架构,授权成本高、定制空间小。RISC-V生态让团队可以像“按菜谱点菜”一样自由组合指令扩展,并通过加权评分模型对比HiFive、Kraken等开发板的性能、功耗、价格与生态支持,实现更透明、可量化的选型。

具体案例:一家做智能音箱的初创公司,需要在语音唤醒和关键字识别上跑轻量级AI模型。团队先在QEMU上模拟玄铁内核,验证模型推理逻辑;随后用Kraken开发板做原型测试,实测功耗与延迟,最终选择了平头哥生态的低功耗RISC-V芯片批量生产,授权成本比ARM方案下降了约40%。

场景二:AI操作系统的早期移植验证

阶段:系统软件适配与底软bring-up阶段

解决的问题:为AI平台移植Linux或RTOS时,硬件尚未到位常导致项目停滞。利用QEMU+OpenSBI组合,可以在纯软件环境中验证M模式固件启动、S模式内核引导和应用态调度的完整链路,提前发现启动和中断问题,等到真实开发板到手后直接复用调试成果。

具体案例:某AI平台团队要为RISC-V开发板移植带NPU驱动的Linux系统。他们在QEMU上搭建OpenSBI+Linux启动环境,先调通SBI调用、定时器和串口驱动,再用GDB远程调试定位了一个内存管理Bug。开发板到货后,系统在一天内成功启动,整体移植周期缩短了60%。

场景三:开源AI加速器定制

阶段:AI芯片架构探索与定制阶段

解决的问题:从头设计AI加速器周期长、门槛高。基于香山、玄铁等开源RISC-V处理器,团队可以在成熟微架构上增加自定义向量/矩阵扩展指令,借助LLVM工具链的可定制后端口,快速完成指令集扩展与编译验证。

具体案例:某高校实验室以香山处理器为基线,添加矩阵乘加扩展指令,并修改LLVM后端生成对应机器码。通过在FPGA上运行,量化推理算子的执行效率提升了3倍,成果已用于相关AI芯片研究课题。

Python 演示

python38 行
# -*- coding: utf-8 -*-"""RISC-V开发板选型评分助手"""class Board:    def __init__(self, name, price, perf, eco, power):        self.name = name          # 板卡名称        self.price = price        # 成本得分(10分制,越高越便宜)        self.perf = perf          # 性能得分        self.eco = eco            # 生态得分        self.power = power        # 功耗得分(越高越省电)     def score(self, w_price, w_perf, w_eco, w_power):        # 加权评分:分数越高越推荐        return (w_price * self.price +                w_perf * self.perf +                w_eco * self.eco +                w_power * self.power)  def recommend(boards, weights):    # 按加权总分从高到低排序,取第一名    ranked = sorted(boards,                    key=lambda b: b.score(*weights),                    reverse=True)    return ranked[0]  if __name__ == "__main__":    boards = [        Board("HiFive Unleashed", 5, 8, 9, 4),        Board("Kraken", 8, 6, 7, 7),        Board("XiangShan-FPGA", 4, 9, 8, 3),    ]    # 权重:成本0.3,性能0.4,生态0.2,功耗0.1    weights = (0.3, 0.4, 0.2, 0.1)    best = recommend(boards, weights)    print("Recommended board:", best.name)    for b in boards:        print("{} -> {:.2f}".format(b.name, b.score(*weights)))
目的:用加权评分模型为三块代表性RISC-V开发板打分,并输出综合推荐结果,演示正文中的选型决策方法。
  1. def __init__(self, name, price, perf, eco, power):把每块板卡的四个评估维度存为实例属性,相当于给每道“试吃菜”贴上标签。
  2. def score(self, w_price, w_perf, w_eco, w_power):加权评分函数,按传入的权重计算当前板卡的综合得分。
  3. return (w_price * self.price + ...)对应公式 Score = Σ w_i x_i,逐项相乘并累加。
  4. ranked = sorted(boards, key=lambda b: b.score(*weights), reverse=True)用sorted对所有板卡按得分降序排序,*weights把元组展开为四个参数。
  5. if __name__ == "__main__":Python脚本的标准入口,保证模块被导入时不会意外执行演示逻辑。
  6. weights = (0.3, 0.4, 0.2, 0.1)四维权重元组,代表“性能优先”的选型偏好。
  7. best = recommend(boards, weights)调用推荐函数拿到得分最高的开发板。
  8. print("Recommended board:", best.name)输出最终推荐结果,方便直接查看。

常见误区

误区我一直以为RISC-V就像Linux一样,是个免费开源的CPU,下载下来就能烧进芯片用,不用花钱。

正解RISC-V开源的只是“菜谱”(指令集规范),不是“做好的菜”(处理器实现)。就像你免费拿到一本米其林菜谱,不等于免费吃到一顿大餐——还得请厨师(芯片厂商)做菜,或买半成品料理包(处理器IP核)。SiFive、平头哥卖的正是“做菜服务”或“料理包”,你可以自由选择自己下厨还是请人代劳。

为何常见:把“开放标准”和“免费实现”混为一谈,忽略了规范与实现是两个完全不同的层次。

误区开发板都做好了、能跑系统,那我直接用它做产品交付不就行了?还省了设计PCB的钱。

正解开发板是“试吃盘”,不是“上餐桌的正式餐具”。它的使命是验证功能和跑通软件,量产时需要考虑成本、体积、功耗、可靠性,必须重新设计精简的电路板。比喻来说,你可以用试吃盘确认菜好不好吃,但餐厅正式营业时不可能把试吃盘端给所有顾客。

为何常见:开发板功能完整且上手即用,容易让人忽略它与量产产品在成本、尺寸和可靠性上的巨大差异。

误区反正QEMU都能跑RISC-V,把系统调通了,真机肯定没问题,不用买开发板了。

正解QEMU是“模拟灶台”,能还原做菜流程,但还原不了真火候。动态二进制翻译带来额外开销,模拟执行速度远慢于真实硬件,且外设行为、中断时序、Cache行为都可能与真机有偏差。性能测试、外设驱动验证、低功耗调优,都必须在真实开发板上完成。正确姿势是:QEMU做功能验证,真机做性能验收。

为何常见:QEMU启动Linux太顺利,让人误以为“软件模拟=硬件等价”,忽视了模拟器在性能和时序上的根本局限。

误区机器启动时先跑OpenSBI,再跑Linux,那OpenSBI是不是就是一个精简的操作系统?

正解OpenSBI只是运行在M模式下的固件层,类似“餐厅管家”,负责初始化硬件、提供SBI服务接口、把控制权交给S模式的内核。它不管理进程、不调度任务、不提供文件系统,这些是操作系统(内核)的职责。打个比方:管家帮你安排座位和传菜,但决定菜品的口味和上菜顺序的,永远是后厨主厨(内核)。

为何常见:分不清M/S/U三种特权模式的层级关系,把固件(OpenSBI)与操作系统(Linux)等同看待。

误区RISC-V才出来十几年,工具链、操作系统支持都还不完善,我还是先学ARM吧。

正解RISC-V生态已从开发工具到操作系统、中间件、AI框架全面铺开:GCC/LLVM官方支持、Linux主线内核支持、QEMU完整模拟、主流RTOS适配,加上SiFive、平头哥、赛昶等厂商的持续投入,生态正在指数级增长。比喻来说,它已经是一间客人不断涌入的热门餐厅,现在学会看菜谱、试吃各家的菜,等市场爆发时你已经是“熟客”。

为何常见:用早期印象评判快速演进的生态,低估了开放标准带来的网络效应和产业合力。

面试题

Q1. RISC-V最突出的核心特点是什么?

单选题 · easy

  • A.免费开放、可自由扩展的ISA规范← 正确答案
  • B.由ARM独家控制的商业处理器
  • C.必须付费授权才能使用的芯片
  • D.只支持服务器场景的封闭标准

答案:A。RISC-V是一套免费开放的指令集架构规范,任何人都可以基于它设计芯片,甚至添加自定义扩展指令,这正是它区别于x86/ARM的“开放菜谱”式特点。B、C、D描述的是传统封闭商业架构的特征。

Q2. SiFive公司在RISC-V生态中扮演什么角色?

单选题 · easy

  • A.唯一官方指令集制定机构
  • B.最早商业化的RISC-V芯片IP公司← 正确答案
  • C.垄断RISC-V处理器的制造商
  • D.只做软件模拟器的开源组织

答案:B。SiFive由RISC-V创始人参与创立,是最早将RISC-V芯片和IP核商业化的公司,像第一位把开放菜谱做成招牌菜的西餐主厨。它不垄断也不制定规范,更不只是做模拟器。

Q3. 阿里平头哥推出的RISC-V处理器系列叫什么?

单选题 · mid

  • A.麒麟系列
  • B.玄铁系列← 正确答案
  • C.骁龙系列
  • D.天玑系列

答案:B。平头哥的RISC-V处理器名为“玄铁”系列,取自金庸小说中的神兵利器,对应它“为AIoT打造利器”的定位。麒麟是华为麒麟,骁龙是高通产品,天玑是联发科产品,均非RISC-V阵营的平头哥系列。

Q4. 香山处理器主要来自哪个机构?

单选题 · easy

  • A.中科院计算所← 正确答案
  • B.阿里云实验室
  • C.美国SiFive总部
  • D.华为海思芯片部门

答案:A。香山是中科院计算所发起的开源高性能RISC-V处理器项目,常运行在FPGA上供科研验证,相当于实验室里的“学术实验菜”。它不属于任何商业公司。

Q5. QEMU在RISC-V开发中的主要作用是什么?

单选题 · mid

  • A.硬件替代方案,性能与真机完全一致
  • B.软件模拟器,支持无硬件的早期开发← 正确答案
  • C.管理RISC-V指令集授权的收费工具
  • D.只能模拟外设IO的辅助调试器

答案:B。QEMU是软件模拟器,通过动态二进制翻译在电脑上运行RISC-V系统,让开发者在没有开发板时也能调通启动流程和应用逻辑。它不能完全替代真机,性能参考价值有限,且与授权管理无关。

Q6. OpenSBI固件运行在哪种特权模式下?

单选题 · mid

  • A.M模式(机器模式)← 正确答案
  • B.S模式(监督模式)
  • C.U模式(用户模式)
  • D.不依赖特权模式的裸机态

答案:A。OpenSBI像“餐厅管家”,运行在权限最高的M模式,直接管理硬件,并向运行在S模式的操作系统提供SBI服务。S模式是内核所在,U模式是应用程序所在,裸机态会绕过全部特权机制。

Q7. 关于RISC-V工具链,下列说法正确的是?

单选题 · hard

  • A.目前只有GCC一种工具链能编译RISC-V程序
  • B.LLVM可以编译但无法生成RISC-V目标代码
  • C.GCC和LLVM都能生成RISC-V目标代码← 正确答案
  • D.编译工作由QEMU模拟器负责完成

答案:C。GCC与LLVM是两大主流编译工具链,均已官方支持RISC-V后端,都能把C/C++编译成RISC-V机器码。QEMU是模拟器而非编译器,不能将源码直接编译为可执行文件,A、B、D描述均错误。

Q8. 下列哪些属于RISC-V标准扩展指令集?

多选题 · mid

  • A.M:整数乘除法扩展← 正确答案
  • B.A:原子操作扩展← 正确答案
  • C.F/D:单双精度浮点扩展← 正确答案
  • D.E:64位嵌入式基础指令集

答案:ABC。RISC-V标准扩展包括M(乘除)、A(原子)、F(单精度浮点)、D(双精度浮点)、C(压缩指令)等。E是“嵌入式基础整数指令集”,对应32位RV32E而非64位,且属于基础指令集变体而非标准扩展,因此D错误。

Q9. 选择RISC-V开发板时需要重点评估哪些方面?

多选题 · hard

  • A.芯片厂商的生态支持力度← 正确答案
  • B.外设接口与内存扩展规格← 正确答案
  • C.工具链与BSP适配完整度← 正确答案
  • D.操作系统是否完全不需要适配

答案:ABC。选板如同点菜:生态支持(A)决定后续资料和社区帮助,外设与内存(B)决定能满足什么场景,工具链与BSP(C)决定软件能不能跑起来。D明显错误——任何开发板的操作系统都需要针对性适配。

Q10. 关于QEMU与OpenSBI的协作关系,正确的是?

多选题 · extreme

  • A.QEMU可以在无真实硬件时启动OpenSBI← 正确答案
  • B.OpenSBI在M模式处理S模式发来的SBI调用← 正确答案
  • C.QEMU只支持仿真运行,无法接入调试器
  • D.两者配合可完成引导内核到用户态的早期验证← 正确答案

答案:ABD。QEMU能模拟RISC-V机器并启动OpenSBI,OpenSBI在M模式为S模式内核提供SBI服务,二者配合可在无硬件条件下完成从固件到内核再到用户态的引导验证——这正是“模拟灶台+餐厅管家”组合的价值。但QEMU支持GDB远程调试接口,可以设断点、看寄存器,C选项错误。