开启linux内核的rust support
问题
编译 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
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)