随着信息技术的快速发展,操作系统的安全性已成为保障信息系统整体安全的核心环节。现代通用操作系统在处理密码凭证、生物识别信息等敏感数据时,面临诸如恶意软件攻击、权限越权访问、内存泄露等多种安全威胁。传统的系统安全机制往往依赖特定处理器硬件支持,如 ARM TrustZone、Intel SGX 等。然而,这些方案在跨平台兼容性、部署灵活性和生态系统适配方面存在较大局限。
cd buildroot-loongarch64
make loongson3a5000_hvisor_defconfig
# !!! You can change the GCC path to your own by
# !!! entering menuconfig and adjusting toolchain settings
make menuconfig
make -j8 # Build the rootfs
libGL error: MESA-LOADER: failed to open iris: /usr/lib/dri/iris_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open iris: /usr/lib/dri/iris_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast
$ cd /home/boneinscri/miniconda3/lib
$ mkdir backup # Create a new folder to keep the original libstdc++
$ mv libstd* backup # Put all libstdc++ files into the folder, including soft links
$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./ # Copy the c++ dynamic link library of the system here
$ ln -s libstdc++.so.6 libstdc++.so
$ ln -s libstdc++.so.6 libstdc++.so.6.0.19
ip addr add 192.168.0.1/24 dev eth0
ip addr add 127.0.0.1/8 dev lo
ip link set eth0 up
ip link set lo up
sudo ip route add default via 192.168.0.2
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
🛸🔗 参考文献&资料&手册&链接
[1] Thomas K, Li F, Zand A, et al. Data breaches, phishing, or malware? Understanding the risks of stolen credentials[C]//Proceedings of the 2017 ACM SIGSAC conference on computer and communications security. 2017: 1421-1434.
[2] Kuraku S, Kalla D. Emotet malware a banking credentials stealer[J]. Iosr J. Comput. Eng, 2020, 22: 31-41.
[3] Pereira T, Barreto L, Amaral A. Network and information security challenges within Industry 4.0 paradigm[J]. Procedia manufacturing, 2017, 13: 1253-1260.
[4] Werlinger R, Hawkey K, Beznosov K. An integrated view of human, organizational, and technological challenges of IT security management[J]. Information Management & Computer Security, 2009, 17(1): 4-19.
[5] Stewin P, Bystrov I. Understanding DMA malware[C]//International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 21-41.
[6] Ravi S, Raghunathan A, Kocher P, et al. Security in embedded systems: Design challenges[J]. ACM Transactions on Embedded Computing Systems (TECS), 2004, 3(3): 461-491.
[7] Zhang Z. Enhancing iot security through trusted execution environments[C]//2024 2nd International Conference on Image, Algorithms and Artificial Intelligence (ICIAAI 2024). Atlantis Press, 2024: 580-589.
[8] Cerdeira D M. Towards Trustworthy TrustZone-Assisted TEEs[D]. Universidade do Minho (Portugal), 2024.
[9] Jeon G H, Jeon S. A Survey on Attack Cases with VBS Malware[C]//Information Security Applications: 25th International Conference, WISA 2024, Jeju Island, South Korea, August 21–23, 2024, Revised Selected Papers. Springer Nature, 2025, 15499: 284.
[10] Ng Y T, Chen Z, Qiu H, et al. Prism: To Fortify Widget Based User-App Data Exchanges Using Android Virtualization Framework[J]. 2025.
[11] Jung R. Understanding and evolving the Rust programming language.(2020)[J]. Dizertačná práca. Saarland University, 2020.
[12] Hong J, Ryu S. Type-migrating C-to-Rust translation using a large language model[J]. Empirical Software Engineering, 2025, 30(1): 3.
[13] Li Z, Narayanan V, Chen X, et al. Rust for Linux: Understanding the Security Impact of Rust in the Linux Kernel[C]//2024 Annual Computer Security Applications Conference (ACSAC). IEEE, 2024: 548-562.
[14] Sharma A, Sharma S, Tanksalkar S R, et al. Rust for embedded systems: current state and open problems[C]//Proceedings of the 2024 on ACM SIGSAC Conference on Computer and Communications Security. 2024: 2296-2310.
[15] Levy A, Campbell B, Ghena B, et al. The case for writing a kernel in rust[C]//Proceedings of the 8th Asia-Pacific Workshop on Systems. 2017: 1-7.
[16] Tian H, Peng Y, Luo Y, et al. Asterinas: A Rust-Based Framekernel to Reimagine Linux in the 2020s[J].
[17] Lankes S, Klimt J, Breitbart J, et al. RustyHermit: a scalable, rust-based virtual execution environment[C]//International Conference on High Performance Computing. Cham: Springer International Publishing, 2020: 331-342.
[18] Peng Y, Tian H, Junyang Z, et al. Asterinas: A Linux ABI-Compatible, Rust-Based Framekernel OS with a Small and Sound TCB[J]. arXiv preprint arXiv:2506.03876, 2025.
[30] José Martins, Adriano Tavares, Marco Solieri, Marko Bertogna, and Sandro Pinto. “Bao: A Lightweight Static Partitioning Hypervisor for Modern Multi-Core Embedded Systems”. In Workshop on Next Generation Real-Time Embedded Systems (NG-RES 2020). Schloss Dagstuhl-Leibniz-Zentrum für Informatik. 2020.
[37] Peng Y, Tian H, Junyang Z, et al. Asterinas: A Linux ABI-Compatible, Rust-Based Framekernel OS with a Small and Sound TCB[J]. arXiv preprint arXiv:2506.03876, 2025.
🎯 Safe-Loongvisor
本项目是我们团队从本科到研究生阶段,在操作系统内核与体系结构领域持续深耕的成果。源于对底层技术的热爱和在全国大学生计算机系统能力大赛中积累的经验,我们再次集结,致力于在国产 LoongArch平台上构建一个兼顾安全与生态的创新虚拟化方案。
在长达九个月(2025.01 - 2025.09)的开发周期中,我们投入了巨大的精力。我们累计修改代码超过2万行,涵盖hvsior(Safe-Loongvisor)、hvsior-tool(hvisor-tool++)、grub2.12(Loongstub)、NPUCore 安全内核 和 Debug_tool(LoongDebugger)五个核心代码仓库,commit提交100余次,构建内核镜像次数超1000次,开发和调试时间超1000小时。
本项目不仅100%完成了赛题“基于虚拟化技术的操作系统安全增强技术”的全部要求,成功在龙芯 3A5000/3A6000 平台上构建了 Linux+NPUCore 双内核安全架构,更在此基础上额外实现了多项内容:
Safe-Loongvisor 是一个面向 LoongArch64 架构、基于虚拟化技术构建的 操作系统安全增强方案,实现了 Linux + Rust-based OS 的双内核架构。其设计目标是解决 系统安全性与软件生态兼容性之间的矛盾,在保障关键安全能力的同时,保留 Linux 丰富的应用生态。
本项目提出的双内核架构,在 Safe-Loongvisor(syswonder社区 hvisor-LA的深度优化版本,包括功能完善以及性能提升) 提供的虚拟化底座(使用了LoongArch的LVZ硬件辅助虚拟化)之上,同时运行两个内存隔离、功能独立的内核:
两者之间通过虚拟化层提供的 内存隔离机制 和 高效通信协议 进行交互,保障数据传输的机密性、完整性和安全性,满足包括 凭据保护、安全分级、密钥管理 等在内的典型安全需求。
具体而言,通用内核上的用户态程序可通过 hvisor-tool++(对原始虚拟机管理工具 hvisor-tool 的改进与扩展版本)向运行于 Safe-Loongvisor 中的 NPUcore 安全内核 发起服务请求(Linux 用户态程序的抽象定义为 Client),NPUcore在内核态执行安全服务后(NPUcore内核态的抽象定义为Server),通过基于 共享内存 的 缓冲区管理 + 消息队列 实现的 Safe-FastAMP 协议(已部署在了ARMv8架构的飞腾派上,实现了Linux和seL4的跨虚拟机通信,并取得了2025年系统能力大赛功能挑战赛的全国一等奖) 能高效完成请求与响应的双向传递,并通过对Rust-based OS引入FastMode,实现了核间中断的压缩/复用,完成了Linux+NPUcore 这样的双内核架构下的轻量、高效的安全服务调用机制(完整时延控制在微秒级,跨虚拟机安全服务调用响应时延控制在纳秒级)。
👋 团队介绍
你好, 本项目团队三人均来自 西北工业大学 计算机学院,目前为在读硕士(研二,24年入学),
长期专注于体系结构、操作系统内核和虚拟化技术领域的研究与实践。
团队基本情况如下:
2025年”中国数谷 • 华为杯”中国研究生操作系统开源创新大赛。🔬 项目基础
从哪里讲述起呢?
一切的一切,非无本之木,非无源之水,
非一时兴起,是从本到研,持续积累的自然结果,
是无数个实验室的深夜和内核代码汪洋中的挣扎,最终汇聚成的突破契机…
(1)扎实的比赛经验与成果
全体成员本科阶段曾参加 全国大学生系统能力大赛——操作系统内核赛道,并均获 全国二等奖,在操作系统内核的设计与实现方面具备丰富的实战经验,对于LoongArch指令集和系统软件内核设计具有十分深刻的理解。
https://www.sohu.com/a/814157345_121118940
在刚结束的2025年的全国大学生系统能力大赛中,本团队已取得操作系统功能挑战赛道的一等奖。项目的硬件平台为飞腾派,在其部署了hvisor的AAarch版本,且同样使用了和本项目相同的通信框架,支持Linux(宏内核)和seL4(安全微内核)异构操作系统之间的跨虚拟机通信,充分证明本项目的跨虚拟机通信框架Safe-FastAMP的通用性(本项目实现了Linux和Rust-based OS之间的跨虚拟机通信)。
官网链接:
https://os.educg.net/#/index?TYPE=2025OS_F
仓库链接:
https://gitlab.eduxiji.net/educg-group-35717-2721707/T202510699996114-4009
(2)活跃的开源社区贡献者
沈铭与包子旭是开源社区 syswonder 中 hvisor 项目 的贡献者:
https://www.syswonder.org/#/projects
(3)项目代码来源与延续性
本项目中所使用的 hvisor LoongArch 分支 及 NPUcore 内核代码 均源自三位成员本科阶段的毕业设计成果,体现了从本科到研究生阶段的技术的不断积累与持续深化。
(4)领先的技术基础与创新性
自2020年龙芯中科摒弃MIPS,推出自研指令集LoongArch以来,LoongArch指令集备受关注。近期的龙芯中科的发布会(2025.06.26)推出2K3000(遗憾地是,2K3000依然不支持LoongArch的LVZ虚拟化)/3C6000,展示了LoongArch指令集的CPU无论是在性能还是生态上,稳中向好,潜力巨大,可谓“今日长缨在手,何时缚住苍龙”。但目前关于LoongArch虚拟化的研究还十分有限,仅有的参考代码为Linux/KVM [1]。阅读KVM的源码几乎成为了开发日常。
本项目所基于的 hvisor 是目前唯一支持 LoongArch LVZ 虚拟化扩展 的 Rust 编写的 Type-1 Hypervisor(最初也源自本科毕业设计),为Linux提供安全服务的NPUcore,来自西北工业大学,曾获 2024 年全国大学生系统能力大赛内核实现赛 LoongArch 赛道一等奖。其中,NPUcore 的 安全服务内核模块 由郭睆负责开发。本项目所基于的grub2.12也是众多LoongArch平台的OS镜像引导和启动所采用的bootloader。Linux和NPUcore进行安全服务通信的Safe-FastAMP框架吸收了OpenAMP的优点,摒弃了对应的缺点,将数据负载和摘要信息分离,摘要信息称为msg,放入消息队列中(Linux和NPUcore的一块共享内存区域),负载数据放在缓冲区中(另一块共享内存区域),简洁高效,能利用NPUcore这样的Rust-based的内存安全特性为通用内核Linux提供快速的安全服务,并通过为Rust-based OS设置Fast Mode,控制跨虚拟机安全服务调用的整体时延在微秒级,安全服务的调用响应延迟控制在纳秒级。
2025.09.18,syswonder社区hvisor v0.2发布。
https://mp.weixin.qq.com/s/fxo9jAL7gfJPNqNFgK2LvQ
🗺️ 开发周期描述
📝 项目简介
(1)背景介绍
随着信息技术的快速发展,操作系统的安全性已成为保障信息系统整体安全的核心环节。现代通用操作系统在处理密码凭证、生物识别信息等敏感数据时,面临诸如恶意软件攻击、权限越权访问、内存泄露等多种安全威胁。传统的系统安全机制往往依赖特定处理器硬件支持,如 ARM TrustZone、Intel SGX 等。然而,这些方案在跨平台兼容性、部署灵活性和生态系统适配方面存在较大局限。
近年来,基于虚拟化技术增强系统安全性的方法逐渐成为研究热点。例如,微软的Windows Virtualization-Based Security (VBS) 和Android平台的pKVM(Protected Kernel Virtual Machine)均通过虚拟化层实现对敏感资源的隔离保护。此外,内存安全语言Rust因其无空指针、无数据竞争等特性,在构建高安全性的操作系统内核方面展现出巨大潜力。
将虚拟化技术与Rust语言相结合,构建双内核架构的操作系统,已成为解决系统安全与生态兼容之间矛盾的重要方向。双内核架构通常由两个并行运行的内核组成:一个是功能丰富、生态完善的通用内核(如Linux),另一个是专注于安全服务、用Rust编写的轻量级安全内核。两者通过虚拟化层实现内存隔离与安全通信,从而在保障安全的同时兼顾系统性能与生态兼容性。
(2)目的和意义
本项目利用虚拟化技术将应用生态软件丰富的通用Linux内核和基于Rust编写的内存安全内核结合,提出了一种基于 LoongArch 架构的双内核安全架构设计与实现方案。该方案利用LoongArch提供的LVZ硬件辅助虚拟化扩展,实现了在龙芯的两款桌面级CPU(LS3A5000和LS3A6000)上同时运行两个相互隔离的操作系统内核:
两者之间通过 Hypervisor 提供的内存隔离机制与安全通信通道(基于共享内存的缓冲区和消息队列的Safe-FastAMP)进行交互,确保数据传输的完整性和机密性。整个系统以 LoongArch 的LVZ硬件辅助虚拟化扩展为基础,实现了高效、灵活、可扩展的安全增强机制。
(3)项目完成情况
比赛方的要求(100%完成,额外的功能为基础设施以及性能优化)
项目的目标
(4)整体架构
0. 使用现有hvisor-LA构建双内核的局限性
1. 模块间的关系
Loongstub负责引导 Safe-Loongvisor在LS3A5000/LS3A6000上启动,并能实现”黑盒“完整启动虚拟化环境下的Root Linux。
开发人员可以使用LoongDebugger直接上板进行图形化汇编级调试,借用前后端分离设计的思想,使用进程劫持的方式,将PyQT5的前端图形组件和后端的ejtag进行映射,极大地降低了调试成本和开发难度。
hvisor-tool++基于syswonder的虚拟机管理工具hvisor-tool,实现了NPUcore的动态内存分配和镜像加载的功能,并集成了基于共享内存的数据缓冲区和消息队列的管理模块。
Safe-Loongvisor(hvisor-LA深度优化后的版本)还将运行一个Rust-based OS,本项目采用NPUcore,一个支持LoongArch64架构的来自西北工业大学的宏内核操作系统。Linux负责运行通用应用,NPUcore的内核态负责运行安全应用,两者间的内存隔离通过Safe-Loongvisor提供的内存虚拟化功能完成。Linux和NPUcore之间能通过基于共享内存的跨虚拟机通信框架Safe-FastAMP进行安全通信,实现NPUcore向Linux提供安全服务调用的功能。
2. 最终的整体架构设计
基于LoongArch的LVZ的硬件辅助虚拟化扩展,本项目实现了基于虚拟化技术的操作系统安全增强技术。
项目核心依托开源项目 hvisor 和 NPUcore,其中:hvisor [1] [2]是一个由 syswonder 社区开发的、基于 Rust 编写的轻量级 Hypervisor,支持Aarch64、RISC-V64、LoongArch64和x86_64等多种架构。
NPUcore [1] 是团队成员本科毕业设计成果,是西北工业大学用于教学的一个基于 Rust 的小型操作系统内核,目前支持RISCV64和LoongArch64,曾获2022年全国大学生系统能力大赛操作系统内核实现赛道RISC-V的一等奖以及 2024 年全国大学生系统能力大赛操作系统内核实现赛道 LoongArch 赛道一等奖。
不仅如此,本项目还在GNU GRUB 2.12[1][2]的基础上,修改了其源码,设计了用于启动基于LoongArch的hypervisor的一个bootloader,称为Loongstub。基于grub2.12提供的linux和initrd指令,重写了loongvisor、root_linux和root_initrd三条指令,新增加了一个模块,摒弃了原有的基于设备树的启动方式,实现了Root Linux虚拟化环境的“黑盒” 完整启动。下面展示了grub.cfg中可以使用的新的三条指令,分别为加载hypervisor的镜像,加载root_linux和root_linux对应的rootfs。这样最大的好处就是让Root Linux的行为和裸机运行一致,便于进行diff调试,并能测出linux所有的代码执行路径,指导完善Loongvisor虚拟化功能。
值得注意的是本项目使用的Linux [1]内核为github上的官方代码,无需进行任何修改(也不需要编写dts文件),可以进行直接编译运行(本项目实际运行的Root-Linux版本为6.14)。采用的rootfs为syswonder社区提供的buildroot-loongarch64 [1]。
从整体架构上看,Safe-Loongvisor处于Host-PLV0特权级,直接运行在具有4核(4线程/8线程)LoongArch64架构CPU[1][2],32GB内存,多种外设(串口、网卡、NVMe SSD和U盘)的桌面级开发板上,对硬件进行管理,并提供上层虚拟机(通用内核Linux和内存安全内核NPUcore)运行的虚拟化环境。
Safe-Loongvisor基于的hvisor,采用Rust编写,轻量,高效,在整体的架构中称作little kernel,提供了完整的虚拟化功能支持,包括CPU虚拟化、内存虚拟化、IO虚拟化和中断虚拟化。LoongArch提供的虚拟化环境中运行着多个虚拟机(虚拟机使用独立的一套特权寄存器GCSR),架构中称作BIG Kernel,其中zone0为Root区域,具有管理所以虚拟机的功能,通过hypercall和hvisor进行交互。从特权级角度来看,应用程序、OS和hvisor分别运行在Guest-PLV3、Guest-PLV0和Host-PLV0下,Safe-Loongvsior具有最高特权级。
Safe-Loongvisor的CPU虚拟化模块提供了vm的trap handler(向量表+统一地址混合式处理),对于来自Guest的hvc,将在hypercall handler中进行处理,并采用静态划分的方式给每个zone提供CPU资源;内存虚拟化实现了更加通用的页表管理,且通过为PTE添加Flexbits,充分结合第二阶段页表映射区域的连续性以及LA的MTLB的查找方法和LA的TLB重填的软件遍历特性,实现了$2^n$的页面映射,大幅度降低TLB重填的次数,采用LVZ硬件辅助虚拟化技术提供的两阶段地址翻译实现了不同虚拟机之间的地址空间的隔离;IO虚拟化提供了Virtio的跳板,实现了Non Root区域的虚拟机的Virtio前端和运行在zone0用户态的Virtio后端的交互。此外Safe-Loongvisor还支持IOMMU,能实现将PCI设备直通给Root Linux;中断虚拟化参考KVM的中断模拟和注入,实现了正确的TI/IPI/SWI和Eiointc的模拟、过滤、转发和注入。运行在zone0中的Root Linux中的外设都是直通访问的,且可以通过hvisor-tool++,使用ioctl系统调用,和运行在Root Linux中的虚拟机管理内核模块hvisor.ko进行交互,完成虚拟机的启动和关闭等管理功能。hvisor-tool++利用Root Linux的内存分配器实现了为Non Root的虚拟机进行动态内存分配以及加载,无需通过手动修改Root Linux的设备树文件中的保留区域的方式来进行静态内存区域划分。
hvisor-tool++基于syswonder社区提供的虚拟机管理工具hvisor-tool,主要改进了下面两个内容:
运行在通用内核Linux用户态的应用程序需向NPUcore发出安全服务的请求时,将通过hvisor-tool++创建一个Client,这个Client将完成一个从Linux到NPUcore的安全服务通信的Channel、基于共享内存的缓冲区和消息队列的初始化,然后在Linux和NPUcore提前设置好的一块共享内存中的缓冲区中申请一块内存区域,将完成此服务所需的输入数据data放入缓冲区中,并从消息队列的空闲队列中申请一个msg,将请求的安全服务id、对应数据在缓冲区中的偏移offset和长度length放入msg中,然后在用户态Guest-PLV3特权级下,直接通过hvc陷入位于Host-PLV0特权级下的Safe-Loongvisor,无需通过ioctl陷入Guest-PLV0,然后陷入Host-PLV0。Safe-Loongvisor将处理这个hvc,然后将SWI1(LoongArch中的保留的软中断)转发并注入到NPUcore中,NPUcore收到SWI后,将从共享内存中的消息队列msg queue中取出一个msg,解析msg中的service_id,以及位于缓冲区中的数据,然后批量完成安全服务。完成安全服务后,NPUcore将修改msg的deal_state字段,并修改msg queue的working_mark字段,告知Linux可以进行下一次批次的服务请求。整个过程只需要一次IPI+SWI(软中断的转发和注入)的组合和共享内存的数据的读写,即可完成NPUcore向Linux提供安全服务的需求。
下表展示了Safe-Loongvisor的具体增量:
Safe-Loongvisor基于hvisor,主要修改的代码列表如下:
(5)Linux向NPUcore发送安全服务的请求和响应
Linux需要进行安全服务请求时,需要借助hvisor-tool++完成这个过程,一次安全服务调用包括一次request和一次response。
进行request前需要将channel需要的缓冲区和消息队列初始化好,并且将数据放入一块分配的缓冲区中,将msg的service_id、数据的offset和length设置完毕,然后通过hvc陷入hypervisor,SWI+IPI混合中断的方式通知NPUcore处理,并进入polling状态,每个msg会有一个deal_state字段标识该msg是否被正确处理,当NPUcore处理完成后,NPUcore将修改这个字段,Linux用户态中Client将退出polling状态,并从缓冲区中取出数据(参数数据和结果数据共用同一块共享内存缓冲区,Client需要保证申请的缓冲区能足够放下请求的结果)。当服务请求结束,Client将进行内存回收,销毁Channel的所有数据结构。此外,本项目的Client支持多线程的并发请求,即一次Client的创建可以完成多次的安全服务请求,减少重复初始化和销毁的开销,多线程并发相关的技术细节见技术文档。相关代码见hivosr-tool/include/shm和hvisor/shm。一次完整安全服务的request和response过程的主要函数调用如下。更多的原理和细节可见项目文档和项目源码。
hvisor-tool主要修改了以下文件:
(6)LoongDebugger概览
LoongDebugger的ejtag后端指令的功能描述,更多具体细节,可以参考ejtag的手册 [1] [2]。
LoongDebugger的前端UI界面示意图如下:
下面的表格展示了目前LoongDebugger支持的调试功能,具体使用方法见项目文档。
LoongDebugger前端UI和后端之间的数据交互过程见下图。
这个数据交互的核心是构建gdb控制脚本,通过找到la_dbg_tool进程的PID,使用gdb劫持进程,控制调试程序的进程调用do_cmd函数,根据la_dbg_tool_usb的输出重定向的文本文件增量作为输出的结果,十分tricky,具体代码细节可以查看./Debug_tool。更多技术原理、代码分析、技术细节见项目文档。代码可参见下面的文件列表:
(7)Safe-Loongvisor上的Root Linux “黑盒“ 启动
这种启动方式十分巧妙,好处是不需要对Linux进行任何的修改,只需要修改grub2.12和hvisor即可实现Root Linux的执行路径和在裸机环境下通过grub引导一模一样,不需要研究其设备树/ACPI源码的具体内容,核心是构造相同的执行环境,并将hvisor的初始化“插在” grub加载和Linux启动之间,也可以称这种方法为“延迟启动“,毕竟Root Linux的实际启动过程被Safe-Loongvisor初始化推迟了,但并不影响Root Linux正确的初始化过程。grub2.12和hvisor相互配合,让Root Linux以为自己的启动上下文和裸机一样,但实际上这个上下文是grub和hvisor配合,共同构造的虚假启动上下文。
这种构造启动虚假启动上下文并正确启动虚拟机的方法,本项目将其定义为“boot virtualization”。
下面的指令对比了原始grub2.12中裸机Linux的启动指令和使用Loongstub启动虚拟化环境Linux的指令。
下图展示了使用grub2.12启动裸机Linux和使用Loongstub启动虚拟化环境Linux的流程的对比。
Safe-Loongvisor启动流程更加具体的细节可以参考项目文档和代码细节,具体可参考./grub2.12中的以下文件内容:
(8)跨虚拟机安全服务调用
服务列表
Safe-FastAMP仅提供了一个跨虚拟机安全服务调用的框架,无法覆盖所有可能的安全服务。
如需添加新的服务,可以为Rust-based OS添加新的服务接口,然后为hvisor-tool++的Client支持对应的Service ID即可。
本质:将通用内核的安全服务实现转移到了Rust-based OS的内核态中。
下面我们选择了常用的算法对框架进行了验证。
(1) 基础测试服务
(2) 加密解密服务
(3) 哈希函数服务
(4) 随机数生成服务
(5) 认证与授权服务
(6) 安全管理服务
(7) 系统状态服务
服务调用规范
需要多个参数的服务
username|passwordtext|key或单独的文本user|resource|operationmin|max或使用默认范围length|charset或使用默认参数单参数服务
无参数服务
""返回值
安全特性
注意事项
|字符分隔,确保输入格式正确依赖模块
safe::manager::SecurityServiceApi: 安全服务API接口safeservice::amp: 异步消息处理模块safe::auth: 认证授权模块safe::crypto: 加密解密模块safe::hash: 哈希算法模块safe::random: 随机数生成模块📚 项目文档
(1)赛方要求
(2)技术细节与代码增量
🎬 演示视频
(1)启动、运行和安全服务演示
点击这个,下载决赛演示视频 [link]。
(2)LoongDebugger功能演示
现场作品检查时可以演示
📁 仓库目录结构
⚙️ 功能特性与创新点
✅ 支持LS3A5000/LS3A6000处理器平台 + 7A2000桥片
✅ 支持 LoongArch LVZ 虚拟化环境下的 Linux(6.14+) 完整启动与运行
修改了grub2.12的源码(参照linux/initrd指令,设计并实现了loongvisor/root_linux/root_initrd指令),使用十分tricky的技巧实现在Guest Mode,无需设备树源码和ACPI源码,即可让虚拟化环境中运行的 多核 Root Linux和bare-mental的Linux的执行环境一样。
参考最新Linux(6.14+)源码中LoongArch KVM关于TI、IPI和Eiointc的实现,实现了对定时器中断(TI)、核间中断(IPI)以及扩展中断控制(Eiointc)的虚拟化支持,确保 Guest OS 的中断响应的准确可靠,保障虚拟化环境下多核Linux的稳定运行。
充分发挥LA架构异常的两种模式,实现运行时切换异常/中断处理方式,加速IDLE的处理,降低虚拟化开销(达95%)。向量表的初始化和拷贝位于Loongstub,统一地址处理位于Safe-Loongvisor。
扩展传统的1GB/2MB大页,引入Flexbits,改进TLB重填入的处理函数,无需修改原有的4级页表的映射方式,充分利用MTLB,大幅度降低TLB重填的次数以及处理时间的开销(最高达99%)。补充:Linux-LA中也没有对应的实现。即如何在TLB refill handler触发时的DA模式下动态调整MTLB填入的PS。
针对Linux在初始化和正常运行过程中异常/中断处理的不同特征,通过压缩IPI+Eiointc的处理路径,降低50%的开销。
为Rust-based OS引入Fast Mode后,Safe-FastAMP能将低负载条件下整体的通信时延控制在微秒级,高负载条件下整体的通信时延迟仅与缓冲区数据填充时延相关,安全服务调用的响应时延控制在纳秒级。
主要参照龙蜥的Linux4.19的IOMMU驱动实现;复用了hvisor-LA原有的MMU页表映射和维护接口实现了LoongArch的IOMMU。
Non-Root Zone使用的内存与通信协议所用的共享内存由 Root Linux 分配,无需手动修改设备树中的保留区域。动态分配的共享内存一定程度上保证了跨虚拟机安全服务调用的
使用基于grub2的Loongstub在启动引导阶段,提前将Loongvisor的区域进行保留,确保Safe-Loongvisor的指令不被Root Linux访问。
使用进程劫持的方式,将图形化界面和ejtag的指令进行映射,完成更加复杂的调试功能,极大提高了调试效率。
实际开发过程中,许多bug和问题都是通过调试器解决发现和解决的(特别是中断和TLB重填)。
🚀 性能提升
(决赛阶段主要内容:2025年8月~9月)
基于虚拟化技术的双内核架构的性能分析与优化思路
纵向+ 横向两个维度降低双内核架构下虚拟化开销与安全服务调用的响应延迟。
① 引入向量表+统一地址混合式处理异常/中断
② 引入FastMode+FastPath,加速处理高频异常/中断
③ 引入多粒度双页(奇偶) 页表映射,充分利用LA的MTLB,加速GVA到HPA的映射,最大程度减少TLB refill的次数
无论是设计思想,还是实验结果,均和2020年的ISCA的Tailored Page Sizes,十分类似。
Linux运行benchmark分析虚拟化开销
Single Core为单核运行,Three Cores为三核运行
Stage1:裸机Linux
Stage2:未经优化的hvisor-LA运行虚拟机Linux
Stage6:使用了①②③+IOMMU优化后的Safe-Loongvisor运行虚拟机Linux
S2 Δ(%) 表示单核下Stage2(未优化)相对于Stage1(裸机)的性能变化百分比
S6 Δ(%) 表示单核下Stage6(组合优化)相对于Stage1(裸机)的性能变化百分比
T2 Δ(%) 表示三核下Stage2(未优化)相对于Stage1(裸机)的性能变化百分比
T6 Δ(%) 表示三核下Stage6(组合优化)相对于Stage1(裸机)的性能变化百分比
S6-S2表示单核下使用了①②③+IOMMU直通优化后的性能变化
T6-T2表示三核下使用了①②③+IOMMU直通优化后的性能变化
(1)libc-bench
(2)unixbench
使用了①②③+IOMMU优化后,benchmark的跑分有明显的提升,控制总体虚拟化的开销在1%以内。
④ 为安全内核引入Fast Mode,使用IPI+SWI混合中断的方式加速跨虚拟机安全服务调用的响应
为了提高跨虚拟机安全服务调用的响应速度,为Rust-based OS引入Fast Mode,将多次IPI压缩为一次,或者是重复利用IPI,使Rust-based OS激进地响应SWI,快速完成安全服务调用。
结论:
在Safe-FastAMP提供跨虚拟机安全服务调用框架下(启用了Fast Mode):
🧰 开发与运行环境
host: x86_64-unknown-linux-gnurelease: 1.80.0-nightly``LLVM version: 18.1.4host: x86_64-unknown-linux-gnurelease: 1.77.0-nightly``LLVM version: 17.0.6🛠️ 依赖&编译&构建
系统 : 一个空的 x86_64,Ubuntu 22.04。
1. 准备工作
1.1 安装依赖包
在开始之前,请确保你的系统已安装所有必要的编译依赖包。打开终端并运行以下命令:
2. 环境配置
2.1 LoongArch 交叉编译工具链环境配置
你需要配置 LoongArch 交叉编译工具链。
2.2 Rust 环境配置
hvisor和NPUcore依赖Rust,请按照以下步骤配置 Rust 环境:
2.3 Python 环境配置
Debug_tool依赖python环境运行,配置步骤如下:3.编译各个子模块
3.1 hvisor 编译、镜像生成和生成反汇编
进入
hvisor项目目录并进行编译:3.2 编译 NPUcore
NPUcore项目需要单独的交叉编译工具链。3.3 编译 Linux kernel(6.14)
下载 https://github.com/torvalds/linux/releases/tag/v6.14,放入RootLinux中
3.4 编译 rootfs
本仓库来自:https://github.com/enkerewpo/buildroot-loongarch64
若网络状态不佳,可考虑提前下载dl,2GB大小,放入buildroot-loongarch64,然后编译。
https://pan.baidu.com/s/1sVPRt0JiExUxFm2QiCL_nA?pwd=la64
3.5 编译 grub2.12
grub2.12原仓库:https://github.com/rhboot/grub2
进入
grub2.12目录并运行编译脚本:使用下面的脚本生成U盘镜像:
更新non root工作目录下的文件:
3.6 使用 Debug_tool
使用
addr2line工具,结合hvisor可执行文件和调试地址,可以定位到对应的源代码文件和行号:运行以下命令启动调试器:
如果在运行
Debugger.py时遇到以下libGL错误:解决方案:
将
/lib/x86_64-linux-gnu/dri/中的iris_dri.so、swrast_dri.so复制到/usr/lib/dri下,如果没有/usr/lib/dri路径,创建https://blog.csdn.net/weixin_43686259/article/details/141135736
如果
hvisor代码有更新,你需要运行下面指令启动调试器:
一个terminal中运行
另其一个terminal运行
用于启动的U盘的目录结构如下:
用于测试的数据盘结构如下:
如果需要设置网络:
开发板 ip :192.168.0.1/24
主机 ip:192.168.0.2/24
两者通过网线相连
🛸🔗 参考文献&资料&手册&链接
[1] Thomas K, Li F, Zand A, et al. Data breaches, phishing, or malware? Understanding the risks of stolen credentials[C]//Proceedings of the 2017 ACM SIGSAC conference on computer and communications security. 2017: 1421-1434.
[2] Kuraku S, Kalla D. Emotet malware a banking credentials stealer[J]. Iosr J. Comput. Eng, 2020, 22: 31-41.
[3] Pereira T, Barreto L, Amaral A. Network and information security challenges within Industry 4.0 paradigm[J]. Procedia manufacturing, 2017, 13: 1253-1260.
[4] Werlinger R, Hawkey K, Beznosov K. An integrated view of human, organizational, and technological challenges of IT security management[J]. Information Management & Computer Security, 2009, 17(1): 4-19.
[5] Stewin P, Bystrov I. Understanding DMA malware[C]//International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 21-41.
[6] Ravi S, Raghunathan A, Kocher P, et al. Security in embedded systems: Design challenges[J]. ACM Transactions on Embedded Computing Systems (TECS), 2004, 3(3): 461-491.
[7] Zhang Z. Enhancing iot security through trusted execution environments[C]//2024 2nd International Conference on Image, Algorithms and Artificial Intelligence (ICIAAI 2024). Atlantis Press, 2024: 580-589.
[8] Cerdeira D M. Towards Trustworthy TrustZone-Assisted TEEs[D]. Universidade do Minho (Portugal), 2024.
[9] Jeon G H, Jeon S. A Survey on Attack Cases with VBS Malware[C]//Information Security Applications: 25th International Conference, WISA 2024, Jeju Island, South Korea, August 21–23, 2024, Revised Selected Papers. Springer Nature, 2025, 15499: 284.
[10] Ng Y T, Chen Z, Qiu H, et al. Prism: To Fortify Widget Based User-App Data Exchanges Using Android Virtualization Framework[J]. 2025.
[11] Jung R. Understanding and evolving the Rust programming language.(2020)[J]. Dizertačná práca. Saarland University, 2020.
[12] Hong J, Ryu S. Type-migrating C-to-Rust translation using a large language model[J]. Empirical Software Engineering, 2025, 30(1): 3.
[13] Li Z, Narayanan V, Chen X, et al. Rust for Linux: Understanding the Security Impact of Rust in the Linux Kernel[C]//2024 Annual Computer Security Applications Conference (ACSAC). IEEE, 2024: 548-562.
[14] Sharma A, Sharma S, Tanksalkar S R, et al. Rust for embedded systems: current state and open problems[C]//Proceedings of the 2024 on ACM SIGSAC Conference on Computer and Communications Security. 2024: 2296-2310.
[15] Levy A, Campbell B, Ghena B, et al. The case for writing a kernel in rust[C]//Proceedings of the 8th Asia-Pacific Workshop on Systems. 2017: 1-7.
[16] Tian H, Peng Y, Luo Y, et al. Asterinas: A Rust-Based Framekernel to Reimagine Linux in the 2020s[J].
[17] Lankes S, Klimt J, Breitbart J, et al. RustyHermit: a scalable, rust-based virtual execution environment[C]//International Conference on High Performance Computing. Cham: Springer International Publishing, 2020: 331-342.
[18] Peng Y, Tian H, Junyang Z, et al. Asterinas: A Linux ABI-Compatible, Rust-Based Framekernel OS with a Small and Sound TCB[J]. arXiv preprint arXiv:2506.03876, 2025.
[19] 胡伟武, 高翔, 张戈. 龙芯指令系统架构及其软件生态建设[J]. 信息通信技术与政策, 2022, 48(4): 43.
[20] 胡伟武, 汪文祥, 吴瑞阳, 王焕东, 曾露, 徐成华, 高翔, 张福新. 龙芯指令系统架构技术[J]. 计算机研究与发展, 2023, 60(1): 2-16.
[21] Rusling D A. The linux kernel[EB/OL].(1999-1)
[22] Kivity A, Kamay Y, Laor D, et al. kvm: the Linux virtual machine monitor[C]//Proceedings of the Linux symposium. 2007, 1(8): 225-230.
[23] ACPI Specification 6.5[EB/OL].(2022-8-29).https://uefi.org/specs/ACPI/6.5/01_Introduction.html
[24] 龙芯中科.龙芯3A5000[EB/OL].(2021-8-11).https://www.loongson.cn/product/show?id=10
[25] 龙芯中科.龙芯3A6000[EB/OL].(2024-7-25).https://www.loongson.cn/product/show?id=26
[26] syswonder.a Rust Hypervisor for mission-critical system[EB/OL].(2025-7-2).https://hvisor.syswonder.org/chap01/Overview.html
[27] Kernel Virtual Machine[EB/OL].(2023-10-8).https://linux-kvm.org/page/Main_Page
[28] jailhouse[EB/OL].(2023-12-11).https://github.com/siemens/jailhouse
[29] Xvisor: eXtensible Versatile hypervISOR[EB/OL].(2025-5-11).https://github.com/xvisor/xvisor
[30] José Martins, Adriano Tavares, Marco Solieri, Marko Bertogna, and Sandro Pinto. “Bao: A Lightweight Static Partitioning Hypervisor for Modern Multi-Core Embedded Systems”. In Workshop on Next Generation Real-Time Embedded Systems (NG-RES 2020). Schloss Dagstuhl-Leibniz-Zentrum für Informatik. 2020.
[31] ACRN.A Big Little Hypervisor for IoT Development[EB/OL].(2018-6-20).https://github.com/projectacrn/acrn-hypervisor
[32] Jiang Z, Wei R, Dong P, et al. Bluevisor: Time-predictable hardware hypervisor for many-core embedded systems[J]. IEEE Transactions on Computers, 2021, 71(9): 2205-2218.
[33] Rust-Shyper.A Reliable Embedded Hypervisor Supporting VM Migration and Hypervisor Live-Update[EB/OL].(2013-4-23).https://gitee.com/openeuler/rust_shyper
[34] hvisor.a Rust Hypervisor for mission-critical system[EB/OL].(2025-7-1).https://github.com/syswonder/hvisor
[35] rCore.rCore-Tutorial-Book[EB/OL].(2020-11-3).https://rcore-os.cn/rCore-Tutorial-Book-v3/index.html
[36] ArceOS.An experimental modular operating system (or unikernel) written in Rust.[EB/OL].(2024-4-27).https://github.com/arceos-org/arceos
[37] Peng Y, Tian H, Junyang Z, et al. Asterinas: A Linux ABI-Compatible, Rust-Based Framekernel OS with a Small and Sound TCB[J]. arXiv preprint arXiv:2506.03876, 2025.
[38] kycore[EB/OL].(2025-5-1).https://gitee.com/openkylin/kycore
[39] Redox[EB/OL].(2025-7-13).https://www.redox-os.org/zh/
[40] NPUcore[EB/OL].(2024-6-1).https://github.com/Fediory/NPUcore-IMPACT
网页资料
[1] 7a2000 https://www.loongson.cn/EN/news/show?id=641
[2] Linux https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.19
[3] fireware https://github.com/loongson/Firmware
[4] 3a6000 https://www.loongson.cn/EN/news/show?id=658
[5] KVM https://lwn.net/Articles/927561/
[6] QEMU
https://wiki.qemu.org/ChangeLog/7.1
https://www.loongson.cn/EN/news/show?id=643
[7] grub2.12
https://fedoraproject.org/wiki/Changes/rebase_grub2_to_2_12}
[8] UEFI
https://uefi.org/press-release/uefi-forum-releases-uefi-210-specification-and-acpi-65-specification
https://www.loongson.cn/EN/news/show?id=645
[9] 3a5000
https://loongson.github.io/LoongArch-Documentation/Loongson-3A5000-usermanual-EN
[10] Archlinux
https://www.loongson.cn/EN/news/show?id=656
[11] LoongArch 卷一手册
https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html
https://www.kernel.org/doc/html/v6.13-rc3/arch/loongarch/index.html
支持LoongArch的OS
https://loongarchlinux.org/pages/download/
https://mirrors.wsyu.edu.cn/loongarch/archlinux/iso/2024.12.23/archlinux-2024.12.23-loong64.iso
https://github.com/loongarchlinux/
https://wiki.debian.org/LoongArch
https://lists.debian.org/debian-loongarch/
https://lists.debian.org/debian-loongarch/2025/06/threads.html
https://bbs.loongarch.org/d/167-lauosc-debian-ports
https://mirrors.aliyun.com/debian-ports/
https://mirrors.tuna.tsinghua.edu.cn/loongson/install/loongarch64_debian13_20240630a.zip
https://gitee.com/openeuler
https://gitee.com/organizations/openeuler/projects
https://gitee.com/openeuler/kernel
https://www.openeuler.org/zh/download/?archive=true
https://www.openeuler.org/zh/download/archive/detail/?version=openEuler%2024.03%20LTS%20SP1
https://mirror.nyist.edu.cn/openeuler/openEuler-24.03-LTS-SP1/ISO/loongarch64/openEuler-24.03-LTS-SP1-loongarch64-dvd.iso
https://www.openkylin.top/downloads/
https://gitee.com/openkylin
https://gitee.com/openkylin/linux
https://www.openkylin.top/downloads/download-smp.php?id=81
openKylin 2.0 SP2 LoongArch 最新版 2025-08-28
https://openanolis.cn/
https://gitee.com/anolis/cloud-kernel
https://openanolis.cn/download
https://mirrors.openanolis.cn/anolis/8.10/isos/GA/
https://mirrors.openanolis.cn/anolis/23.2/isos/GA/
旧版本的linux
https://www.chinauos.com/
https://www.chinauos.com/resource/download-professional
https://cdimage-download.chinauos.com/desktop-professional/1072/release/uos-desktop-20-professional-1070-loongarch64-202412.iso?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NTExMDU3NDksImZpbGVfbmFtZSI6ImRlc2t0b3AtcHJvZmVzc2lvbmFsLzEwNzIvcmVsZWFzZS91b3MtZGVza3RvcC0yMC1wcm9mZXNzaW9uYWwtMTA3MC1sb29uZ2FyY2g2NC0yMDI0MTIuaXNvIn0.ngurMi5xCCJABESNgmFB1drWlBr-aNqamDlVSSxoYEU
https://www.loongson.cn/system/loongnix
https://www.loongnix.cn/zh/loongnix/
https://docs.loongnix.cn/loongnix/lnd-20/loongarch64/Installation_Guide/04.%E5%AE%89%E8%A3%85%E6%96%B9%E5%BC%8F.html
https://pkg.loongnix.cn/loongnix/isos/
https://www.deepin.org/index/en
https://www.deepin.org/zh/download/
https://cdimage.deepin.com/releases/25/loong64/
https://cdimage.deepin.com/releases/25/loong64/deepin-desktop-community-25-loong64.iso
https://github.com/enkerewpo/linux-hvisor-loongarch64
https://github.com/enkerewpo/buildroot-loongarch64
目前LVZ下运行的多核 Root Linux 已支持运行的workload
基础:
扩展:
🏆 比赛收获与反思
向前,向前,向前!
克服重重困难,坚持到最后,就是胜利!
📬 联系方式
如有任何问题,欢迎提交 Issue。
🙌 致谢
感谢张羽教授的指导;感谢比赛主办方的精心组织与辛勤付出,为我们提供了展示自我、交流学习的宝贵平台;
感谢 syswonder 社区(陈康老师、曹东刚老师)和 计算所 张福新老师 及 龙芯中科工程师团队 的技术支持与指导;
同时感谢 hvisor 的maintainer 韩喻泷 的优化建议;
感谢队友的帮助与支持,才能让比赛能顺利完成。
🧩 未来展望
(1)提供更加丰富和完善的安全服务。
(2)对基于共享内存的跨虚拟机通信进行加密,防止共享内存数据被恶意获取和篡改。
(3)目前hvisor仅支持静态分配的CPU虚拟化功能,没有vCPU的抽象和调度,后续可以进一步扩展对应的CPU虚拟化功能,实现高效的vCPU调度,提高Rust-based OS的多核执行安全服务的能力。这同时也是syswonder社区的未来工作。
(4)将本项目的功能扩展以及性能优化代码合并进hvisor的主分支。