近日,OpenCloudOS 社区推出 OpenCloudOS Kernel Stream (以下简称为 OCKS) 2207.2 内核版本,新版本中增加了对 RISC-V 64 架构的支持。这也意味着,OCKS目前已实现对主流CPU架构的全适配。
作为新一代开源精简指令集(RISC)架构,近年来RISC-V在半导体领域备受关注。得益于其完全开放、免费授权、低成本研发、精简灵活等特性,RISC-V生态正逐渐起步,也被视为继x86、Arm后的第三大CPU架构。
OpenCloudOS 是由操作系统、云平台、软硬件厂商与开发者等共同倡议发起的全链路国产化开源操作系统,沉淀了腾讯及多家厂商在技术和开源生态方面的优势。自社区成立以来,OpenCloudOS 一直在积极建设硬件及芯片支持生态。其中,适配国产“芯”的RSIC-V架构,从一开始就列为 OpenCloudOS 硬件支持计划中的重点项目。
在保持了 L1 (源社区)项目的上游即时性与友好性的同时,OCKS 在 5.18 内核版本基础上,对上游所欠缺的一些最新的 RISC-V 平台特性增加了适配和支持。其中,OCKS 特别对 StarFive VisionFive 开发板进行了测试适配,从而让 OpenCloudOS 社区在提供稳定而可靠的企业级内核的同时,更可以支持体验到最新的业界开源硬件。
技术实现细节如下:
验证环境
硬件环境:VisionFive RISC-V 开发板
VisionFive 开发板是一块高性价比的,支持 Linux 系统的 RISC-V 单板计算机。SoC 为 JH7100 芯片,提供了双核 64 位 1.5 GHz RISC-V CPU,2MB 二级缓存,并带有深度学习处理引擎及图像视频处理系统,为 RISC-V 开源架构生态提供了更高的水平开发套件,让开发者得到更大的自由及更强的能力去创新和设计行业领先的解决方案。
软件环境:OCKS 2207,Fedora 33 RISC-V版 runtime,GCC 12
VisionFive 官方镜像目前以 Fedora 33 为基础,官方默认使用下游内核 5.10 作为默认版本进行引导。启动过程为 uboot -> grub2 -> kernel。其中 grub2 会将 device-tree 与 initramfs 加载并传递给内核。
我们使用官方镜像为基础,并使用上游 GCC 12 进行交叉编译,进行了 OCKS 2207 的编译与运行测试。
适配步骤
1、OCKS 2207对 RISC-V 的适配
OpcnCloudOS Kernel Stream 在发布之初,便为多架构、多平台支持而进行了构建与发布系统的优化设计。在经过了第一个版本的沉淀与积累后,我们正式将 OpenCloudOS Stream 2207 的支持拓展到 RISC-V 架构。从而使得 OCKS 同时支持三大架构:x86_64,aarch64,RISC-V64。
在 2207.2 中,OpenCloudOS Kernel Stream 在上游软件基础上,增加了针对 RISC-V 架构进行发布和构建,以及功能支持的相关代码。针对 StarFive 开发板,我们进行了大量适配工作,增加板级支持,对硬件驱动等,进行了实际验证和测试。同时最大程度保持了代码的一致性,在同源的基础上,异构地发布多个不同软件包,保持了上游友好的管理风格,易于维护的代码结构,以及良好的下游支持。
同时为了缓解资源紧张与加速迭代,我们的构建系统提供了完成的开箱即用式交叉编译支持,可以异构地进行版本发布,管理,kABI 验证,RPM 打包等过程,将开发,维护,学习成本降到最低。
技术细节
OCKS 2207 现在可以通过单一入口,控制 ARCH 参数来生成不同架构对应的 RPM 包。并且在进行异构构建的时候,自动切换为交叉编译模式。
OCKS 2207 构建 RISC V 版本内核只需在 Kernel Repo 中调用如下命令即可:
make dist-rpm ARCH=RISC-V64
生成的 RPM 包默认包含所有支持设备的 device tree,vmlinuz,调试信息等,和普通编译基本无异。
2、在 VisionFive RISC-V 开发板上使用 OCKS 内核
OCKS 针对 RISC-V 会发布标准的 RPM 包裹。其中内核会安装到标准的路径中,并且将 Device Tree 与内核捆绑在一起发布。
VisionFive 官方提供了 基于 Fedora 的系统镜像。OCKS 便是在此基础上进行了测试与适配。
若要体验 OCKS,在官方 Fedora 镜像基础上安装 OCKS RPM 包,并对 bootloader 进行手动配置即可。OCKS 安装路径均为标准路径。
由于不同开发板并没有十分统一的启动引导机制,在内核安装后,用户需要手动配置引导选项。
技术细节
OCKS 2207 由两个包组成,kernel-core 与 kernel-modules。开发板作为物理边缘设备,需要安装两个包。OCKS 2207 安装后会在 /boot 下生成对应的 kernel vmlinuz 与 initramfs。与官方内核一样,用户需要手动配置 grub.cfg,增加如下引导选项:
menuentry 'OCKS 2207' {
linux /vmlinuz-5.18.15-2207.2.0.ocks <original boot param>
devicetree <dtb defaults to jh7100-starfive-visionfive-v1.dtb>
initrd /initramfs-5.18.15-2207.2.0.ocks.fc33.img
}
其中 <> 内的内容用户需酌情填写。最新的 device tree 也会在 /usr/lib/modules/5.18.15-2207.2.0.ocks/dtbs 中提供,用户可酌情升级。
3、OCKS RISC-V运行效果
在 Starfive 双核 8G 系统上,OCKS 可以很好的与官方 Fedora 镜像一起运行,如下:
发布 OCKS 2207.2,添加针对RISC-V支持
- 源代码 Rebase 到上游 5.18.15。
- RISC-V 平台 DMA 相关功能和兼容性问题进行补全和修复。
- 拓展构建系统,支持 RISC-V 架构。
- 增加 StarFive VisionFive 开发板原生支持。
- 修复一些潜在的发行版兼容性问题。
OpenCloudOS Stream 2207.2 相关链接
源代码仓库:https://gitee.com/OpenCloudOS...
RPM Repo:Index of /opencloudos/8/kernel-ocks/2207.2/
RISC-V64版下载地址:Index of /opencloudos/8/kernel-ocks/2207.2/riscv64/
后续规划
目前 VisionFive 相关外设的大量驱动仍旧在上游讨论中,我们暂时使用了 StarFive 的下游版本。我们会持续跟踪其上游动向,及时同步相关组件代码。
对于 RISC-V 整体架构框架,上游成熟度也并不高,其中很多细节仍旧需要上游的打磨和开发。我们采用了保留最大兼容的模式适配了 VisionFive 开发板。待上游有进一步进展后,我们会在 rebase 时对现有相关下游代码进行整理,清理,保持和上游一致。
同时 RISC-V 和其它更多架构生态也在持续丰富中,通过对 RISC-V 进行适配,也更进一步验证了 OCKS 的跨架构进行开发,发布,构建的系统潜力。日后会对更多架构和硬件提供支持。