Jailhouse 在 MediaTek Genio 上的移植实践解读

Jiaming
领域专家: 操作系统技术领域
2026-10-07 14:18:39

原文标题: Jailhouse hypervisor on MediaTek Genio: bare-metal isolation on Linux
来源: ProventusNova 技术博客
原文链接: https://proventusnova.com/blog/jailhouse-hypervisor-mediatek-genio/
文本状态: 原文技术状态标注为 2026 年 7 月,本解读整理于 2026 年 10 月


一、这篇文章解决的是什么问题

Jailhouse 上游对 ARM64 的支持是"架构通用"的。文档会说明 cell 配置包含哪些字段、hypervisor 如何接管 EL2,但不会说明某颗具体 SoC 上这些字段应当填什么值。MediaTek Genio 平台恰好属于文档缺失最严重的一类:SoC 技术参考手册不公开发布,平台特有的中断路由与引脚复用机制在上游代码中也没有对应实现。

这篇文章的价值在于,把移植过程中"靠调试反推"得到的知识以可复现的形式写了下来,并给出了 Genio 720 上的真实取值。


二、架构分层:谁在哪一级

组件异常级职责
Jailhouse hypervisorEL2维持分区边界,不参与调度
Linux 根单元EL1应用栈、网络、OTA,占用绝大部分核与内存
Zephyr 非根单元EL1硬实时任务,独占所分配到的核、内存与外设

Genio 720 为 8 核配置(2×Cortex-A78 + 6×Cortex-A55)。参考配置中 Linux 保留 6 至 7 核,Zephyr 非根单元独占 1 个 A55 核。

选择 A55 而非 A78 作为实时核的考虑是:实时任务对单核峰值性能要求不高,对确定性要求很高;A78 留给 AI 推理的收益更大。

关键性质:非根单元中的代码不受 Linux 调度器行为、中断风暴或缓存污染影响。这是分区方案相对 RT 补丁的本质区别——后者仍然是同一个内核调度同一批核。


三、三个必需的内核补丁

三者缺一不可,缺少任何一个 Jailhouse 都无法完成初始化。值得注意的一点是:上游 Jailhouse 文档不会提及这些补丁,因为它们不属于 Jailhouse 项目维护的内容,而属于平台适配层。

补丁 1:禁用 VHE

文件:arch/arm64/kernel/hyp-stub.S

ENTRY(finalise_el2)
    ret   /* 提前返回,不启用 VHE */
    ...
EXPORT_SYMBOL_GPL(__hyp_stub_vectors)

原理:ARMv8.1 引入的 VHE(Virtualization Host Extensions)允许 Linux 内核直接以 EL2 运行,从而占用该异常级。而 Jailhouse 需要占据 EL2,因此必须阻止 Linux 在启动阶段接管它。finalise_el2 是内核决定是否启用 VHE 的位置,在此提前返回即可将 EL2 保留给 hypervisor。同时需要导出 EL2 stub 向量表供 jailhouse.ko 使用。

补丁 2:导出内核符号

文件:mm/vmalloc.c

EXPORT_SYMBOL_GPL(ioremap_page_range)
EXPORT_SYMBOL_GPL(__get_vm_area_caller)

这两个符号由 jailhouse.ko 在运行时调用,用于建立 hypervisor 自身的内存映射空间。上游内核未导出它们,需要显式导出。

补丁 3:在设备树中预留 hypervisor 内存

reserved-memory {
    jailhouse@44000000 {
        reg = <0x0 0x44000000 0x0 0x1000000>;  /* 16 MB */
        no-map;
    };
};

no-map 属性确保 Linux 既不建立该区域的地址映射,也不将其纳入内核的物理内存管理范围。这是保证 hypervisor 内存不被 Linux 触碰的可靠手段。

一条来自实践的经验

原文提到一个容易被忽略但很关键的点:hypervisor 预留区不得与 Linux 内核镜像重叠。Genio 700/720 平台上从 Linux 5.x 升级到 6.6 时,内核镜像体积增大,预留基址因此需要下移约 48 MB。

这引出分区架构的一项固有约束:内存布局是静态的,内核镜像尺寸一变,整个布局就需要重新计算。这与动态方案(由 hypervisor 在运行时仲裁内存)形成对比——静态分区换来了确定性,代价是布局调整需要人工介入。


四、cell 配置解剖:Genio 720 的真实取值

cell 配置本质上是一段 C 结构体,由 Jailhouse 工具链编译为二进制 .cell 文件。

.platform_info = {
    .gic_version     = 3,
    .gicd_base       = 0x0c000000,
    .gicr_base       = 0x0c040000,  /* 2MB,覆盖 8 个 CPU 重分发器 */
    .maintenance_irq = 25,
},

对这四个取值的核对:

  • gic_version = 3 与 GIC-600/700 系列对应。Genio 720 属新一代 SoC,在该层级采用 GICv3 属预期结果。
  • 0x0C040000 − 0x0C000000 = 0x40000,即 256 KB,恰为 GICD 区域的典型尺寸。两个基址按 256 KB 边界对齐排布。
  • 注释中的"2MB,覆盖 8 个 CPU 重分发器"可自行验算:8 × 256 KB = 2 MB,即每帧步进 0x40000。相较 GICv3 规范的最小帧 128 KB(RD_base + SGI_base),256 KB 步进说明采用了含额外帧的布局。这同时反推出该 SoC 的 GICR 帧步进参数——移植到同系列其他型号时可直接沿用。
  • maintenance_irq = 25 属体系结构规定值:GICv3 中 PPI 的 INTID 范围为 16 至 31,PPI 9 对应 INTID 25,即非安全态 EL2 的维护中断。该值不随平台变化,若在其他 GICv3 平台上看到同样的 25,属正常现象。

五、MediaTek 特有的配置扩展

这一节是全文对社区最有价值的部分,也是上游文档完全没有覆盖的内容。

在标准 ARM 平台上,外设直通只需两步:

  1. 在 cell 配置中声明该外设的 MMIO 区域
  2. 在设备树中将对应节点标记为 disabled,避免 Linux 抢先接管

在 Genio 平台上仅做这两步并不够。 MediaTek 的引脚复用(pin mux)与中断路由由专用控制器管理,不经过标准 GIC 通路。因此 cell 配置中需要额外的 .vendors 数组:

.vendors = {
    JAILHOUSE_VENDOR_MTK_GPIO,
    JAILHOUSE_VENDOR_MTK_EINT,
},

其作用是让 hypervisor 在建立分区时一并配置引脚复用寄存器与外部中断(EINT)路由,使非根单元在拿到外设后能够真正收到中断。

这一设计的意义超出 Genio 平台本身:它表明 Jailhouse 的 cell 配置具备厂商扩展机制。对于需要在其他厂商 SoC 上处理非标准中断控制器的移植工作,.vendors 数组提供了一条既有的扩展路径,无需改动 hypervisor 主体。这是移植方法论层面的参考价值。


六、内存与中断的分配实例

Genio 720 参考配置:

项目分配情况
Linux 根单元6 至 7 个核、绝大部分内存、完整外设访问
Zephyr 非根单元1 至 2 个独占核、48 MB 隔离内存、UART + GPIO + EINT 直通
Jailhouse 自身16 MB @ 0x44000000
IVC 通信区4 KB @ 物理地址 0x80000000

内存规划遵循的原则与 Jailhouse 官方建议一致:非根单元的内存与外设数量尽可能小。理由有两层——其一,中断源越少,最坏情况时延分析越容易收敛;其二,非根单元侧没有 Linux 那样的驱动生态,每多一个外设就多一份需自行维护的裸机或 RTOS 驱动。


七、单元间通信:IVSHMEM 与 IVC

Linux 与 Zephyr 之间通过 IVSHMEM 通信。IVSHMEM 在两个单元中都呈现为一个虚拟 PCI 设备,Jailhouse 在其上提供 IVC(Inter-VM Communication)通信 API。

Genio 720 上 IVC 区域为物理地址 0x80000000 处的 4 KB 共享内存。

这一设计对熟悉 Jailhouse 多单元通信的开发者而言并不陌生:共享内存加中断通知,是静态分区架构下最直接的数据通路方案。


八、上游化状态(截至 2026 年 7 月)

这是原文后半段的重要更新内容:

  • MediaTek 已在 meta-mediatek-experimental Yocto 层中发布 Jailhouse 配方
  • 维护公开的 Zephyr fork,含 Genio 板级支持;2026 年 6 月新增 Genio 700 的完整音频前端驱动栈
  • 镜像中预置 cell 配置库,包括 genio-510-evk.cell、genio-720-evk.cell,以及对应的 -zephyr 非根单元配置,另有 UART 演示与中断时延测试配置
  • 非根单元加载地址由 Jailhouse 配方中的 JH_CONFIG_INMATE_BASE 控制,内存布局不同时可调整

Zephyr 侧的初始化与构建:

west init -m https://github.com/ffreimann-mtk/zephyr --mr MTK-Genio_4.3.0 ~/zephyrproject
cd ~/zephyrproject && west update
west build -b genio_700_evk samples/

板端生命周期与标准流程一致:

modprobe jailhouse
jailhouse enable /lib/firmware/jailhouse/genio720-evk.cell
jailhouse cell create /lib/firmware/jailhouse/genio720-evk-zephyr.cell
jailhouse cell load <cell> zephyr.bin
jailhouse cell start <cell>
jailhouse cell list

变化的是起点,不是概念。配置结构、厂商特有处理、内存容量规则这三者在已发布代码中依然需要逐一理解和调整,这也正是这篇文章仍具参考价值的原因。


九、适用边界

原文明确给出了判断标准。这一点值得肯定——很多厂商材料只讲优势不讲边界。

适用场景:

  • 需要在同一 SoC 上同时运行 Linux 应用与硬实时任务
  • 电机控制、安全监控、确定性传感器采样与 AI 推理并存
  • 时延要求进入微秒级,且需要与 Linux 故障域相互隔离

不适用场景:

  • 仅需缩短 Linux 的中断响应时间——应使用 CONFIG_PREEMPT_RT 或处理器亲和性绑定
  • 实时逻辑简单到可在 M 核上完成——应考虑厂商自带的 M 核 RTOS(Genio 平台为 RITY)

时延量级对照(引自其关联文章):

方案最坏情况时延隔离程度
通用 Linux毫秒级无
PREEMPT_RT50–150 μs软隔离
Jailhouse 非根单元< 10 μs硬件隔离
M 核独立 RTOS1–10 μs完全独立硬件

十、团队背景与业务

ProventusNova 是一家嵌入式软件咨询公司,业务范围收得很窄:只做 NVIDIA Jetson 与 MediaTek Genio 两个平台。其自我定位为"在文档终结之处工作"——专攻硬件到货之后、软件可用之前的那段调试期。

项目内容
注册主体PROVENTUS NOVA LTD(英国,公司编号 15678169)
成立时间2024 年 4 月
技术负责人Andrés Campos(CTO 兼联合创始人)
官方资质MediaTek IoT 合作伙伴目录中的"系统集成技术合作伙伴"

服务内容(均为固定报价,不按小时计费):

服务交付周期技术内容
定制载板 Bring-up7 天电源时序、bootloader、内核、高速接口
CSI 摄像头驱动14 天MIPI CSI-2、V4L2、ISP 调优、GStreamer
GMSL 摄像头驱动1 个月SerDes 驱动栈、虚拟通道映射、多路同步
GStreamer 流水线14 天硬编解加速、零拷贝、RTSP
EdgeAI 部署14 天TensorRT 优化、量化、DLA 映射
ODM 对接与硬件选型—BSP 级原理图评审

公开技术资产方面,该公司维护一个公开的开发者 Wiki(developerwiki.proventusnova.com),内容涵盖 Jetson Linux BSP 与内核源码搭建、DTB 构建、摄像头绑定验证等实操流程,含具体命令与预期输出。这批材料的详细程度高于其官网的服务介绍页面。


十一、对社区的参考价值

客观评估这篇文章的贡献:

  1. 填补了 Genio 平台的移植文档空白。 三个内核补丁、vendor 扩展字段、内存布局规则,这些内容在上游 Jailhouse 仓库、内核文档和 MediaTek 公开资料中都难以找到,属于实际调试得出的经验。
  2. 提供了可验算的真实取值。 cell 配置中的地址与参数可以自行核算(如 GICR 区域 2 MB = 8 × 256 KB),这类可核对的细节比笼统描述更有价值。
  3. 揭示了厂商扩展机制的存在。 .vendors 数组这一设计为其他平台的移植工作提供了可借鉴的扩展路径。
  4. 给出了适用边界的明确判断。 原文主动指出 Jailhouse 不适用于"仅需缩短 Linux 中断响应"的场景,并推荐 PREEMPT_RT 或 M 核 RTOS 作为替代方案,这种自我设限在厂商技术材料中并不多见。

需要留意的地方:

  • 原文写作视角来自单一团队的实际项目,其中的取值与经验是否具有跨批次、跨版本的可复现性,需由其他开发者验证。
  • 关于交付周期、成功率一类的描述属商业宣传口径,与技术内容应分开看待。
  • meta-mediatek-experimental 层名称中的"experimental"已表明其成熟度定位,用于产品设计时需评估其稳定性承诺。

结语

对 Jailhouse 中文社区的开发者而言,这篇文章的价值主要在两处。

其一是 Genio 平台移植的具体路径:三个内核补丁、vendor 扩展字段、可核对的内存与中断分配参数,都是可直接复用的信息。

其二是方法论层面的示范:当平台文档缺失时,如何通过内核补丁与配置扩展把 Jailhouse 跑起来。这一思路的适用面比前者更广——任何面对非公开技术参考手册的 SoC 移植工作,都可以参照同样的入手顺序:先从 EL2 接管、符号导出、内存预留三处入手,再针对厂商特有的中断与引脚控制机制做配置扩展。

...全文
33 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕基于电感电容电流环PI与前馈补偿矩阵构造的跟网型储能变流器,开展dq坐标系下的阻抗理论建模与Simulink仿真对比研究。通过建立储能变流器在dq域的数学模型,设计包含电感电流内环、电容电流中间环和电压外环的多环控制结构,并引入前馈补偿矩阵以提升系统的动态响应能力和稳定性。在此基础上,采用小信号分析法推导系统的输出阻抗模型,构建完整的dq域阻抗理论框架,并利用Simulink平台搭建高保真仿真模型进行频域扫频验证,实现理论建模与仿真结果的精确对比,深入分析控制参数对系统阻抗特性的影响规律,揭示其在抑制并网系统振荡、提升稳定性方面的关键作用,为新能源并网系统的稳定性分析与优化设计提供坚实的理论支撑和技术路径。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、储能系统、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握跟网型储能变流器在dq域的阻抗建模方法;②理解多环控制与前馈补偿对系统阻抗特性的影响机制;③实现理论阻抗模型与Simulink仿真扫频结果的对比验证,支撑并网稳定性分析。; 阅读建议:学习者应结合控制理论与电力电子变换器知识,重点关注数学推导与仿真建模的一致性,建议动手复现Simulink仿真模型并进行参数敏感性分析,以深化对阻抗重塑机理的理解。
内容概要:本文介绍了基于Matlab实现的基本雷达与干扰机仿真系统,旨在通过代码实践帮助读者深入理解雷达系统的工作原理及其在复杂电磁环境中与干扰机的相互作用机制。内容涵盖雷达信号的发射、传播、目标回波接收、微多普勒效应建模、干扰信号的生成与影响分析等关键环节,结合具体的Matlab代码实现了完整的仿真流程,并提供了详尽的结果可视化与性能评估,重点展示了目标探测、时频特征提取、干扰抑制策略等关键技术的实现方法,有助于掌握雷达系统动态特性与抗干扰能力的分析手段。; 适合人群:具备一定Matlab编程基础,对雷达系统、信号处理、电子对抗或通信工程等领域感兴趣的高校学生、科研人员及工程技术人员。; 使用场景及目标:①学习雷达系统的基本构成与工作流程;②掌握雷达回波信号与典型干扰信号(如噪声干扰、欺骗干扰)的数学建模方法;③通过Matlab仿真深入理解微多普勒特征、时频分析技术(如STFT、小波变换)及干扰抑制算法;④为开展雷达目标识别、抗干扰算法设计或电子战系统仿真等前沿研究奠定实践基础。; 阅读建议:建议读者结合提供的Matlab代码逐段运行并调试,重点关注雷达信号模型、目标运动建模、干扰生成模块及信号处理流程,配合文中仿真结果进行对比分析;同时可延伸学习现代信号处理技术如压缩感知、机器学习在雷达中的应用,以提升综合科研与工程实践能力。
基于星形耦合自均流机制的双三相LLC变换器变频调压与多模式切换控制策略研究(Simulink仿真实现)内容概要:本文研究了一种基于星形耦合自均流机制的双三相LLC变换器,重点探讨其变频调压与多模式切换控制策略,并通过Simulink进行仿真实现。该研究旨在解决双三相LLC变换器在不同工作模式下电流不均衡、电压调节不稳定等问题,通过引入星形耦合结构实现自动均流,提升系统效率与可靠性。文中详细分析了变频控制对谐振变换器输出电压的调节机理,设计了多模式平滑切换策略以适应负载变化,确保系统在轻载、重载及瞬态工况下的高效稳定运行。同时,建立了完整的Simulink仿真模型,验证了所提控制策略在动态响应、稳态精度和抗干扰能力方面的优越性。; 适合人群:从事电力电子与电力传动、新能源变换技术及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高效率、高可靠性的直流电源系统设计,如电动汽车充电、数据中心供电等;②为多相LLC谐振变换器的均流控制与模式切换提供理论支持和技术方案;③适用于需要高性能电源变换器的工业应用场景,推动先进控制策略在实际系统中的落地应用。; 阅读建议:读者应具备一定的电力电子电路与控制系统基础知识,建议结合Simulink仿真模型同步学习,深入理解控制逻辑的设计细节与参数整定方法,并可通过修改仿真参数验证不同工况下的系统性能,以增强实践理解和创新能力。
内容概要:WiFiSupply斯普莱WFS7000-52AX5是一款高性能、高负载型工业级双射频无线AP基站,支持2.4G和5.8G双频段WiFi6(802.11ax)标准,采用OFDMA、MIMO 4T4R架构及射频合路技术,实现最大1974Mbps的双频合并带宽。设备具备29dBm高发射功率、-96dBm高接收灵敏度,支持Fast Roaming快速漫游(切换延迟≤30ms)、多链路聚合、主备链路备份、巨量安全隧道等核心技术,保障低延迟、零丢包的稳定通信。配备5个千兆网口(含1个2.5G口)、支持POE/DC/端子多种供电方式,具备IP54防护、-45~85℃宽温运行、防浪涌防静电等工业级设计,适用于复杂恶劣环境。支持胖瘦一体模式、云端/本地/图形化多方式管理,并提供API接口便于第三方平台集成。; 适合人群:工业自动化、智能制造、智慧物流等领域中从事无线网络部署与运维的工程师和技术人员,具备基本网络知识和工业通信需求的专业用户。; 使用场景及目标:①用于AMR/AGV/RGV小车、无人叉车、穿梭车、天车、堆垛机等移动设备的无线联网;②满足无人机遥控、车载、船载、火车视频传输、分拣机PLC控制等高移动性、高可靠性场景的无线桥接与覆盖需求;③实现工业4.0环境下大规模终端接入、无缝漫游、安全传输的无线网络建设。; 阅读建议:本文档技术参数详尽,建议结合实际部署场景重点关注设备的射频性能、漫游切换、供电安装方式及管理功能,以便充分发挥其在高负载、强干扰工业环境下的优势。

24

社区成员

发帖
与我相关
我的任务
社区描述
Jailhouse是一个Siemens 在 GPLv2 协议下发布的针对工业级应用程序的小型分区型 Hypervisor,本社区旨在提供Jailhouse相关知识分享/帮助,欢迎加入!
车载系统嵌入式硬件linux 技术论坛(原bbs) 甘肃省·兰州市
社区管理员
  • Jia ming
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

尊敬的Jailhouse社区/论坛成员:

Jailhouse Hypervisor 是一款非常优秀且广泛使用的工具,它能够帮助用户实现对虚拟机的精细化管理和便捷操作。我们相信,在这个社区/论坛上,我们能够一起分享 Jailhouse 的使用经验和技巧,相互学习和提高。

以下是一些我们希望在这个社区/论坛上看到的内容:

  1. 内容分享。您可以分享您在Jailhouse中使用到的有趣功能、技巧或者经验,以及您对Jailhouse的看法和想法等;您可以在这里谈论Jailhouse相关的技术问题,例如虚拟机管理程序的工作原理、性能优化、安全性等;您可以在这里分享Jailhouse的使用教程、脚本和插件等。
  2. 问题求助及意见建议。如果您遇到了Jailhouse相关的问题,您可以在这里寻求帮助和解决方案。
  3. 社区活动。您可以在这里组织与Jailhouse相关的活动,例如线下聚会、技术交流会等。

我们希望这个社区/论坛能够成为大家交流和学习的平台,共同推动Jailhouse技术的发展和进步。如果您有任何建议或者意见,欢迎随时联系我们 — Jiaming。

谢谢!

试试用AI创作助手写篇文章吧