源码技术
php
java
python
Linux
当前位置:
首页
>
Linux
>RISC-V引导运行Linux
RISC-V引导运行Linux
2026-10-11 08:13:40
RISC-V引导运行Linux
BootROM --> OpenSBI -->
U-Boot(SPL-->U-Boot) -->Kernel
此处暂不讨论secure boot。
bootrom基本工作:
1. 上电复位
2. 初始化时钟和基本硬件(比如启动介质SPI flash,SD/eMMC等)
3. 判断启动介质(strap)
4. 从启动介质加载“第一阶段固件”
5. 跳转执行
opensbi基本工作:
设置
M-mode(机器模式)
配置
S-mode(内核运行
模式),配置PMP(内存访问保护)
配置中断/异常委托
定义 M → S 的调用接口(SBI)
SBI 功能
用途
Timer
内核 tick
IPI
多核调度
Hart control
CPU 上下电
Console
early print
SBI 调用约定:
RISC-V SBI 规定:
寄存器
含义
a7
SBI Extension ID
a6
Function ID
a0-a5
参数
a0
返回值
opensbi运行在片内sram上。
opensbi运行在M-mode,
U-Boot和Kernel运行在S-mode。
kernel
主动进入
OpenSBI,只能通过
ecall指令。
Linux kernel/U-Boot
发起
ecall
→ OpenSBI → 硬件timer→ 再回到 kernel流程:
Linux / U-Boot (S-mode)
│
│ 1. ecall
SBI_SET_TIMER
(next_event)
▼
OpenSBI (M-mod
e),根据a7和a6调用对应handler
│
│ 2. 编程 CLINT mtimecmp
│
│ 3. mret 回到 S-mode
▼
硬件定时器
│
│ 4. mtime >= mtimecmp
│
│ 5. 触发 timer interrupt
▼
OpenSBI trap (M-mode)
│
│ 6. 转换为 S-mode timer interrupt,即清除 machine timer interrupt,人为制造一 个 S-mode timer interrupt。
若在opensbi中已经配置了中断委托,则无需此步骤
。
▼
Linux kernel IRQ handler(S-mode
)
│
│ 7. tick / hrtimer / scheduler
对于IPI和PLIC中断,是同样的道理,kernel主动触发IPI核间中断也是通过ecall陷入M-mode之后写目标hart的msip,触发目标hart中断,目标hart可以选择配置ssip触发S-mode的software interrupt,也可以提前配置中断委托从而直接在kernel(S-mode)处理。
当PLIC外部中断到来,先进opensbi M-mode处理,同样可以选择配置seip触发
S-mode的external interrupt,也可以提前配置中断委托从而直接在kernel(S-mode)处理。
U-Boot 是“真正的板级初始化 + OS 装载器”
U-Boot基本工作:
DDR初始化,SoC板级初始化
提供交互式调试环境
加载 Linux Kernel / DTB
由于U-Boot体积一般大于SRAM大小,因此通常会分为SPL+U-Boot。
U-Boot SPL(Secondary Program Loader):
极小代码(<100KB)
运行在 SRAM
初始化 DDR
把 U-Boot 搬到 DDR
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
影响巨大!Linux 提权大洞
Python自学进步巨快的方法(邪修版)
最新文章
影响巨大!Linux 提权大洞
20年linux用户,为什么最终选择了Debian?
DirtyFrag:一行命令拿下 Linux root 权限的漏洞全解析
《春天刚走,大佬们又开始了——我用Python帮群友写告白》
小白零基础学Python:读取TXT文件、自动统计行数,还会报错处理
【第39期】21天养成编程习惯:Python刷题第07天
Python数据分析与挖掘实战:缺失值处理、批量合并、箱型图绘制一次讲透!
Dirty Frag Linux提权漏洞的复现和修复建议
ICODE太空探险赛-快速演示—Python
高危预警|DirtyFrag Linux内核提权漏洞公开!覆盖9年版本,信创系统也受影响
热门文章
上海先唐IP分布式Linux综合显控平台:某省高速信息报告厅 5通道 一台整机 左右两通道单独显示 中间三台融合显示
大厂程序员自以为很会搭 Python 环境,结果连踩 3 个低级坑,差点搞崩电脑
Linux开发必看|内存调试常用命令,从查看总量到排查泄漏全搞定
跟韩工学Linux+
警惕!Linux内核惊现史诗级0day漏洞Dirty Frag,无补丁可用的至暗时刻
救命!测试工程师必背Linux指令,工作面试都能用
【漏洞预警】Linux Kernel Dirty Frag 本地权限提升漏洞
一键整理试题库!用Python自动化处理Excel选择题(附全部源代码)
【模拟复赛小学】2026全国信息素养大Python/C++复赛模拟卷五
全网紧急!Linux Dirty Frag漏洞POC已流出!
随机文章
10个月宝宝每天需要喝多少奶粉?
太强了!南开大神教授精心打造《Python语言程序设计 第2版》,堪称编程入门领域的“黄金指南”!
漏洞通告|Universal Linux LPE Dirty Frag权限提升漏洞
如何让别人心甘情愿用你写的Python脚本?别放命令行,给它包个界面
【吾爱出品】python脚本打包exe工具v1.5.2(支持PyInstaller和Nuitka,智能分析打包)
OpenCV Python 五大经典示例:从入门到实用
建议所学python的同学,都去死磕这个APP
python零基础7天学习路线.
AI数据分析实战:用Python+AI实现从数据到决策
Linux常用命令:du
【安全警报】732字节的"核弹":Linux内核Copy Fail漏洞一键Root所有服务器