科技 > 操作系统 > 鸿蒙系统

新突破!openEuler UniProton 实时操作系统成功适配 RISC-V 架构

159人参与 2024-08-04 鸿蒙系统

近日,risc-v sig 的罗君同学@jer6y 在 risc-v 架构上完成了对 uniproton 进行的初步适配工作,目前项目已经可以在 qemu 上启动运行 demo 程序。

uniproton 是一款由 openeuler 社区推出的实时操作系统,具备极致的低时延和灵活的混合关键性部署特性,可以适用于工业控制场景,既支持微控制器 mcu,也支持算力强的多核 cpu。

risc-v sig 在持续完善 openeuler risc-v 生态系统能力的同时,不断深入探索嵌入式领域的广泛应用场景。这些应用场景覆盖了实时操作系统(rtos)、异构多核系统以及 bsp(board support package)支持等关键技术领域。

risc-v 架构的适配工作

为了补足 uniproton 在 risc-v 架构下的能力,罗同学在以下几个方面进行了深入的适配:

  1. 中断框架方面,添加了 risc-v plic(外设中断控制器)和本地中断控制器的对应驱动代码,添加了板载配置,用于指定 plic 和 clint 的基地址以及适配 uniproton 实时操作系统的硬件中断 api 框架,包括初始化相关 api 、优先级相关 api 、中断操作相关 api 以及添加外部中断处理函数分发入口 api。

  2. 异常框架方面,添加了异常 dump 的上下文结构体,并实现了异常函数分发入口 api,以及与软件异常相关的 api,以确保 uniproton 能够有效地处理各种异常情况。

  3. 进程框架方面,添加了 risc-v 下的进程上下文结构体,并适配了进程初始化 api 和进程上下文切换 api,实现了 risc-v 下的进程 cpu 信息的屏蔽。

  4. ipc 框架方面,进行了一些调度 api 的适配工作,利用 riscv ecall 硬件特性实现 tasktrap 接口,屏蔽了 risc-v 底层的硬件异常机制,以支持利用如信号量、信号和消息队列等 ipc 的 api 进行线程同步。

  5. 用户 api 框架方面,添加了用户使用的 trap 入口 api,并适配了用户使用的临界区 api,cpu 占用率 api,内核钩子模块 api。

在上述能力的支持下,开发者可以利用中断系列的 api 开发 risc-v 芯片的设备驱动程序;利用异常系列的 api 开发 risc-v 下的 dump 工具作为内核开发的辅助调试工具,如打印出异常相关的 risc-v 寄存器值和异常原因,利用回调处理特殊的 risc-v 异常,并且结合 risc-v mmu 实现 lazy_brk, cow 等类似的特性;利用进程 api 结合其他系列的 api 开发 risc-v 架构设备驱动,开发基础组件如自定义 shell,自定义协议栈等;利用其他用户 api 如 cpu 占用率 api,钩子模块 api 等开发性能测试工具

为了帮助用户更好地理解和在 risc-v 上探索 uniproton,罗同学还提供了相关文档、示例 demo 以及基于 uapi 开发的应用:

  • uniproton risc-v 文档:https://gitee.com/jer6y/uniproton-documentation
  • riscv64_qemu_helloworld 工程:https://gitee.com/openeuler/uniproton/blob/master/doc/demousageguide/riscv64_demo_usage_guide.md

未来规划

项目目前仅仅对 uniproton 在 risc-v64 进行了初步的架构适配,后续还有大量完善适配的空间,罗同学计划 risc-v sig 一起在以下几个方面进行进一步的完善:

  1. 添加 s 态的适配,包括适配构建框架、添加 s 态编译可选项,并在 arch 侧添加支持 s 态的代码。这将进一步提升 uniproton 在 risc-v 架构上的兼容性和可扩展性。
  2. 适配 mcs 仓库,并添加 openamp 示例 app,在 risc-v64 virt 上进行混合部署。这将帮助用户更好地理解和应用 uniproton 在实际场景中的能力。
  3. 添加 licheerv nano 的 bsp 适配 demo,并适配 nano 在 openeuler embedded 的 bsp 驱动,以实现在 nano 上的混合部署。这将进一步扩展 uniproton 的应用范围和适配能力。
  4. 添加 uniproton risc-v 的门禁测试,以验证 uniproton 在实际环境中的可靠性和安全性。

开发者说

项目的主要贡献者罗同学分享了自己的开发感想:

“作为一个内核开发者兼内核爱好者,我在使用 uniproton 开发之前已经体验过一些常见的 rtos 如 tencentos tiny、ucos-iii 等的内核开发。在我看来,uniproton 除了像其他 rtos 一样提供了丰富的 api ,同时还对硬件中断管理进行了一层抽象,支持在不同芯片上使用相同的中断管理 api 对中断进行管理,例如中断回调函数注册,中断优先级设置等,这使得内核开发者非常容易管理各个中断。”

“不仅如此,uniproton 在异常错误管理方面也十分具有特色,为每个任务设置了对应的异常错误码,当任务运行过程产生异常时,会根据优先级进行记录,优先级高的异常还会主动的调用异常接口 api 进入硬件异常,执行用户的回调函数,这极大的方便了开发者的调试。更重要的是,uniproton 可以与 openeuler mcs 混合部署,在多核异构上实现 linux + rtos。”

“不过,虽然 uniproton 在性能和对内核开发者的使用体验方面都十分卓越,但是仍然存在一些不足,即软件基础组件较少,芯片架构支持也需要进一步的完善。相信在 openeuler 社区的各位朋友的支持下,uniproton 会逐渐有更多的软件支持,适配在更多的芯片上。”

加入我们

目前 risc-v sig 正在筹备 24.03 lts 完全官方架构支持工作,这是 23.09 最小官方支持工作的延续。在本次发版中我们会研究丰富多样的官方原生应用软件对 risc-v 架构的支持,完全对标 x86 和 arm 的官方支持范围,让 risc-v 成为 openeuler 主流的架构选择。与此同时我们还在进行 llvm 平行宇宙计划,探索 risc-v 在嵌入式场景的有趣玩法和试验一切与 risc-v 生态相关的各种好玩的事情。

我们希望在不久的将来能有更多的社区朋友参与到类似 uniproton 支持 risc-v 架构的工作中,鼓励大家积极参与开放 openeuler 社区的 risc-v sig,共同推动 openeuler 社区在 risc-v 生态方面的发展。我们相信 risc-v 架构将成为未来的趋势,并希望通过社区的共同努力,助力 openeuler 社区在 risc-v 领域的蓬勃发展。

目前中科院软件所在长期招募相关实习生,如果您对 risc-v 生态感兴趣,欢迎联系下面的微信号加入 risc-v sig 交流群,一起讨论更多关于 risc-v 的内容,为推动 openeuler & risc-v 生态贡献力量!

中科院软件所 王经纬

请备注 oerv

关于贡献者

周锐发,中科院软件所实习生,openeuler 社区 risc-v sig 贡献者 ,目前在辽宁科技大学读研三,对于深度学习,linux 内核内存管理有着浓厚兴趣,负责协助 risc-v sig 的公众号运营工作,同时在研究 uniproton risc-v 门禁支持工作。

罗君,中科院软件所实习生,openeuler 社区 risc-v sig 贡献者,目前在四川大学读大三,当前主要在为 embedded-sig 的项目做 risc-v 方面的支持,包括不限于 uniproton 软件 risc-v 支持,mcs risc-v 支持等。kernel 爱好者,verilog 爱好者,沙盒游戏玩家。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

【成都Meetup议题征集】openEuler G11N & doc SIG 邀您探索语言与文字的力量

08-04

红包封面抢先领!openEuler 2023 社区年报发布

08-04

openEuler 成立 SIG-Intelligence:打造智能体应用与工具链的创新引擎,引领AI技术前沿探索

08-04

在openEuler环境下快速编译GreatSQL RPM包

08-04

OERV-RTOS: UniProton 适配 Milk-V Duo,加速 openEuler RISC-V 生态

08-04

恒生电子的创新之旅,携手openEuler走在金融科技前沿

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论