泰晓科技 -- 聚焦 Linux - 追本溯源,见微知著!
网站地址:https://tinylab.org

泰晓RISC-V实验箱,转战RISC-V,开箱即用
请稍侯

Linux Lab 新近支持 Rust For Linux 开发,3 条命令可极速体验

Wu Zhangjin 创作于 2021/09/25

By Falcon of TinyLab.org Sep 25, 2021

开源之夏

今年的开源之夏活动马上接近尾声,开源之夏是由中科院软件所组织的暑期开源活动,主要面向高校学生和开源社区,由开源社区出项目和 Mentor,面向高校召集学生报名开展 3 个月的开源项目开发活动。

泰晓科技技术社区每年都参与了该项活动,今年更是提报了 5 个左右的项目,相关信息见:https://tinylab.org/summer2021

目前活动即将结束,提报的几个项目也陆续进入到紧张的代码集成和总结阶段,相关项目的开发过程见:https://gitee.com/tinylab/cloud-lab/issues

由于部分学生在开展项目的过程中,有的在企业实习,有的在撰写论文,所以开发时间其实是非常紧张的,而参与指导的 Mentor 们自己本身有繁重的企业项目工作,所以能取得目前的进展还是非常不容易的。

感谢所有实实在在投入精力参与指导的 Mentor 们,也祝贺花费时间思考和动手并获得一定提升的同学们。

欢迎同学们关注并报名明年社区即将提报的项目 ;-)

Rust For Linux

今年提报的项目之一是:Linux Lab 新增 Rust for Linux 开发支持。

Rust For Linux 项目旨在允许使用 Rust 开发 Linux 内核模块,从而把 Rust 的一些特性带入到驱动开发领域,以便消除更多的 UB 行为,可参考:https://static.linaro.org/connect/lvc21f/presentations/LVC21F-317.pdf

该项目提报的时候,Rust For Linux 已经进入到了 linux-next 分支,我们本来预期在 Linux v5.13/v5.14 的时候 Rust For Linux 能进入到主线。但是,现实是,在具体提交的过程中,包括 Linus 在内的大佬提出了不少改进的建议,所以开发者一直在完善和修复遗留的问题:

在 Linux Lab 中极速体验用 Rust 开发 Linux 内核模块

基于 Rust For Linux “缓慢”的 upstream 进展,短期内直接在 Linux 主线分支或 tag 中体验 Rust For Linux 就不实际了,所以我们转而采用了 Linux Lab 的 kernel-feature 特性功能,以独立 patchset 的方式来轻量级管理和快速体验一个新的内核特性,更为重要的是,一条命令就能使用和验证新特性。

考虑到需要保留一些时间作更充分的测试,目前 Linux Lab 新建了一个名叫 “rust”的分支来管理 Rust For Linux 功能,在 rust 分支下面,用这三条命令就可以快速体验:

// 用 x86_64/pc 这块板子
$ make BOARD=x86_64/pc
// 从默认的 v5.1 克隆一套 v5.13 内核配置,最新的 patchset 只能打到 v5.13 上
$ make kernel-clone LINUX_NEW=v5.13
// 直接使能 rust for linux, 编译,启动,并插入和移除 rust_print 模块
$ make test f=rust m=rust_print FPL=0
...
module: modprobe rust_print 

[    3.742751] rust_print: loading out-of-tree module taints kernel.
[    3.743931] rust_print: Rust printing macros sample (init)
[    3.744587] rust_print: Emergency message (level 0) without args
[    3.745338] rust_print: Alert message (level 1) without args
[    3.746119] rust_print: Critical message (level 2) without args
[    3.746939] rust_print: Error message (level 3) without args
[    3.747723] rust_print: Warning message (level 4) without args
[    3.748499] rust_print: Notice message (level 5) without args
[    3.749420] rust_print: Info message (level 6) without args
[    3.750458] rust_print: A line that is continued without args
[    3.751253] rust_print: Emergency message (level 0) with args
[    3.752015] rust_print: Alert message (level 1) with args
[    3.752679] rust_print: Critical message (level 2) with args
[    3.753397] rust_print: Error message (level 3) with args
[    3.754076] rust_print: Warning message (level 4) with args
[    3.754846] rust_print: Notice message (level 5) with args
[    3.755495] rust_print: Info message (level 6) with args
[    3.756142] rust_print: A line that is continued with args
...

手头有 Linux Lab Disk 的同学可以直接体验了,在 labs/linux-lab 目录下更新仓库并 checkout rust 分支即可,之后的用法同上:

$ git fetch --all
$ git checkout -b rust origin/rust

也可以进一步更新到最新的镜像,新镜像支持 llvm,这样运行的时候就不需要下载 llvm了:

$ cd /path/to/cloud-lab
$ git fetch --all
$ git checkout next
$ git pull
$ tools/docker/rerun linux-lab

手头没有 Linux Lab Disk 的同学可以去某宝检索集成了 Linux Lab 的 “Linux Lab真盘”。

image

动手能力较强,喜欢折腾的同学也可以自行摸索并安装 Linux Lab,安装完记得顺手给个 Star 哈:

感兴趣的同学们可以借这个机会把 Rust 入个门,上半年社区有幸邀请到 Rustcc 联和创始人 Mike 老师来做直播分享,后面补齐实验案例后发表在社区视频频道,欢迎观摩学习:Rust 语言快速上手

后续计划

预计在 2 周左右,会把该功能合并到 Linux Lab 的 next 分支,随后再发布到 v0.8-rc3,敬请期待,v0.8 正式版预计也会在一个月左右发布。

另外,x86_64/pc board 将升级内核版本到 v5.13,并支持 LLVM 编译。

接下来会陆续合并对 openEuler 内核开发的支持,包括 x86_64 和 aarch64 两个平台都会支持。



Read Related:

Read Latest: