问题

编译 rust for linux 源码时总是在 menuconfig 中没有 rust support 条目选项,记录一次成功开启 rust support 的编译过程

检测 Rust 相关依赖

首先从github的git clone rfl项目,进入内核编译目录,输入

make LLVM=1 rustavailable

该命令的作用是:在构建 Linux 内核时,检测是否满足 Rust 相关的依赖,确保编译环境中已经安装了满足内核开发所需的 Rust 编译器、工具链(包括 rustc、bindgen、cargo 等),以及所有必备的库和工具。如果检测到任何不满足条件的地方,构建会中断并给出错误信息,提醒用户需要升级或安装某些工具和依赖,然后根据提示去做就好。最终出现 Rust is available! 即可
在这里插入图片描述

配置正确版本的 rustc

配置工作目录使用正确版本的 rustc,而不影响默认工具链:

rustup override set $(scripts/min-tool-version.sh rustc)

在这里插入图片描述

rust 标准库源代码

下载一份 rust 标准库源代码:

rustup component add rust-src

若升级了 Rust 编译器版本则需要重新添加组件
在这里插入图片描述

libclang

libclang 是 LLVM 的一部分,bindgen 依赖其理解内核中的 C 代码,所以需要安装 LLVM,并且在编译时开启 LLVM=1
可以先通过 clang --version 和 llvm-config --version 检查是否已经安装了 clang 和 LLVM,我这里的版本是14.0.0,若没有安装则可以通过以下命令安装:

sudo apt install llvm-14 libclang-14-dev

在这里插入图片描述

bindgen

安装 bindgen 以生成内核的 C 端绑定:

cargo install --locked --version $(scripts/min-tool-version.sh bindgen) bindgen-cli

在这里插入图片描述

配置

运行

make menuconfig

在菜单中找到 General setup -------> Rust Support 并点空格启用。按理说一切都正确的话应该会自动出现这一选项,但如果没有找到(像我之前的n次一样),那就输入 / 并搜索rust,看 Depends On 中哪一条没有符合,比如我之前一直遇到的情况是其中 MODVERSIONS 需要是 n,但当时显示是 y请添加图片描述
于是可以输入 / 并搜索 MODVERSIONS,按照 LOCATION 定位将其关闭。
开启 Rust Support 之后,进入 Kernel hacking -------> Sample kernel code -------> Rust samples,选择想要加载的样例模块

编译构建

make LLVM=1
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐