11 Star 37 Fork 32

openEuler/open-source-summer

为openEuler Embedded新增Rust语言支持

已完成
任务
创建于  
2022-05-09 20:24

评论 (7)

chenjingwen 创建了任务 3年前
openeuler-ci-bot 添加了
 
sig/sig-OSCourse
标签
3年前

openEuler-embedded 介绍

openEuler Embedded采用的面向嵌入式系统Yocto构建体系,当前openEuler Embedded已经实现了80+软件包的支持,主要编程语言为C/C++。

该信息引用自: https://openeuler.gitee.io/yocto-meta-openeuler/yocto/overview.html

Rust 语言介绍

这个项目不需要对Rust语言本身有深入的理解,但是了解Rust语言的设计哲学有助于我们理解这个项目本身的价值和意义。

Rust是一门通用、编译型编程语言。设计准则为“高性能、高可靠性、高生产力”,并且支持泛型、函数式编程、迭代器等现代化语言特性。

为什么要在嵌入式领域使用Rust语言,这两位嵌入式领域的工程师对Rust的评价来说明。

  • “以往,在嵌入式领域被认为 C/C++ 是不可替代的选择。但现在,我们认为在嵌入式领域能够使用一门现代化的优秀语言真的很棒。” Aleksei Arbuzov, 高级软件工程师, Terminal Technologies

  • "Rust 使得我们可以比想象中更快、更健壮的软件推向市场。感谢 Rust,让我们将内存安全看得理所当然,同时带有复杂类型系统的零开销语言所带来的其他好处,帮助我们开发出了可维护的软件。Rust 既让我们的客户变得快乐,也让我们的工程师变得快乐。" Marc Brinkmann, CEO, 49nord

  • “天下苦C语言久矣!” 我

新增Rust语言支持意味着什么?

这里说的新增Rust语言支持,代表着能在openEuler Embedded平台上使用“Rust工具链”构建出Rust程序。
在这里“Rust工具链”狭隘地可以认为是两个命令 rustccargo

  • rustc:rustc于Rust语言正如GCC于C语言,rustc 是官方支持的Rust编译器,它将源代码编译成二进制程序。
  • cargo: “Cargo是Rust软件包管理器, Cargo 会下载您 Rust 的包依赖项,编译您的包,生成可分发的包,并将它们上传到crates.io”,这个是官网的解释。 虽然不太类似,但是姑且可以认为 Cargo 有点类似 CMake,虽然它可能比CMake 更强大。

一般情况下,我们都倾向于使用 cargo 来构建我们的Rust程序,而非直接使用 rustc
所以 “为openEuler Embedded新增Rust语言支持” ** 可以一句话概括为 **
为openEuler Embedded写一个yocto layer或者在meta-yocto-openeuler上修改,以支持Rust程序在该平台的编译、运行

引言引用自:https://www.rust-lang.org/zh-CN/what/embedded

chenjingwen 修改了描述 3年前
chenjingwen 修改了标题 3年前

YOCTO 资料

yocto是openEuler Embedded选择的,也是嵌入式领域主流的构建框架,为YOCTO框架新增功能/layer需要
基本熟悉Shell和Python这两门语言 ,并且了解YOCTO构建的基本概念和流程。
例如:层(layer)、菜谱(recipes)、bitbake使用、bb文件的编写等。
这些概念和指南都可以在下面这2个文档找到:

Yocto Love Rust攻略

现在开源社区有2个比较流行给Yocto框架新增Rust支持的项目可供参考,分别是:

这两个项目是两个路线的选择:

  • meta-rust-bin 选择了 直接使用已经构建好 的rust&cargo工具进行编译Rust程序
  • meta-rust则选择了从源码开始构建主机端Rust工具链 (rust-nativecargo native) ,然后使用这个工具再进行交叉编译Rust程序。

选择哪条路?

这2种路线的优劣性可以参考 https://github.com/rust-embedded/meta-rust-bin#pre-built-vs-compiled 说明,不详细讨论。
但根据 “面向嵌入式场景的构建系统Yocto应用与思考” https://mp.weixin.qq.com/s/zyC9NFu9SAHYBkD3HTrZYA 中的构建原则,我们 更倾向 于直接使用已经构建好的工具链,即 meta-rust-bin
若您想尝试 meta-rust 路线,基于同源原则,请使用openEuler维护的Rust仓源码,即:https://gitee.com/src-openeuler/rust/tree/openEuler-22.03-LTS/

个人认为两种技术都可以进行探索,但是基于已经构建好的工具链 可能 更符合openEuler embedded社区的构建原则。

当然,openEuler embedded 与原生的YOCTO框架是有一些区别的,
所以我们希望申请者能在这2个开源项目的基础上,将其中一个移植到openEuler embedded平台。

其他

与此项目不强相关,但是和嵌入式、Rust有关,可能会有人感兴趣的材料

CHANGELOG:

  1. 删掉了标题中的“内核”,该项目不局限于内核
  2. 新增了一些材料说明
chenjingwen 修改了描述 3年前
Se7en 任务状态待办的 修改为已完成 2年前

登录 后才可以发表评论

状态
负责人
项目
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
预计工期 (小时)
开始日期   -   截止日期
-
置顶选项
优先级
里程碑
分支
参与者(3)
5329419 openeuler ci bot 1632792936 chenjingwen-chenjingwen6 MRNIU-MRNIU233
1
https://gitee.com/openeuler/open-source-summer.git
git@gitee.com:openeuler/open-source-summer.git
openeuler
open-source-summer
open-source-summer

搜索帮助