概述
我是在Debian 11下进行编译的,相信在其它的Linux发行版操作应该也没有问题,但没试过。
Rust-for-Linux组织的目标是为linux内核添加Rust支持,选择它提供的linux内核是为了得到更好的Rust支持。
使用Clang作为Linux内核的默认编译器,因为它和Rust一样,都是LLVM的前端,这会让Rust和C之间有更好的互操作性。
在X86_64和Aarch64下编译运行是成功的,但在Riscv64下还不能成功编译。然而这并非是Rust支持不够,而只是一个单纯的内核bug。相关情况可参考lkml。
操作记录
安装依赖
1 | git clone https://github.com/Rust-for-Linux/linux.git -b rust --single-branch |
配置与编译
1 | for amd64 |
运行
1 | 从https://people.debian.org/~gio/dqib/下载预编译好的debian,解压 |
错误记录
执行
make LLVM=1 rustavailable
出现./scripts/rust_is_available.sh: 21: arithmetic expression: expecting primary:
原因分析:在
rust_is_available.sh
里加set -x
可发现是bindgen_libclang_cversion
为空,因没有安装libclang引起的。解决方法:安装clang和llvm
menuconfig里没有找到Rust samples
原因分析:在General setup -> Rust support没有选中,选中它即解决此问题。
执行
make LLVM=1
提示linker 'ld.lld' not found
原因分析:没有安装它,通过
sudo apt install lld
安装执行
make LLVM=1
提示'libelf.h' file not found
和'gelf.h' file not found
解决方法:
sudo apt install libelf-dev
执行
make ARCH=arm64 CROSS_COMPILE=aarch64_linux_gnu LLVM=1 -j
提示unknown target triple 'aarch64_linux_gnu'
解决方法:使用
CLANG_TRIPLE=
执行
make ARCH=riscv LLVM=1 LLVM_IAS=0 -j
提示ERROR: modpost: "riscv_cbom_block_size" undefined
原因分析:使用gcc也报同样的问题。这是内核bug,待修复。
解决方法: 该错误出现在编译虚拟化模块kvm时出现,在内核配置中关掉这个模块即可: “Kernel-based Virtual Machine (KVM) support”