彻底系统重弄(Linux Kernel Driver)前置重写条件

·

1 min read

https://immunant.com/blog/2020/06/kernel_modules/

 sudo apt-get install bear llvm clang clang-tools gcc cmake make git wget curl -y

C2Rust规定👇

apt install build-essential llvm clang libclang-dev cmake libssl-dev pkg-config python3 git -y

intercept-build make

apt install python3-pip -y

warning: be sure to add /root/.cargo/bin to your PATH to be able to run the installed binaries

cargo install 命令会将二进制文件安装到 ~/.cargo/bin 目录下,但是如果这个目录没有被添加到系统的 PATH 环境变量中,那么在终端中就无法直接运行这些命令。

你可以通过修改你的 shell 配置文件(取决于你的默认 shell,可能是 .bashrc, .bash_profile, 或者 .zshrc等)来永久地添加这个路径到你的 PATH 环境变量中。对于 bash 或者 zsh 用户,你可以添加以下内容:

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc

对于 zsh 用户,需要更改 .bashrc.zshrc

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc

完成后,你需要让这个修改生效,可以通过运行以下命令:

source ~/.bashrc

或者,对于 zsh:

source ~/.zshrc

你也可以通过重新打开你的终端来使这个修改生效。

在添加完 PATH 之后,你应该能够直接运行 c2rust 了。

四个arguments

  1. -mfunction-return=thunk-extern: 这个选项在编译器中是用来设置函数返回类型的。thunk-extern 指定了一种特殊的函数返回机制,这种机制是在 GCC 8.0 以后版本中引入的,用于优化函数的返回。但这种机制在某些版本的 clang 编译器中可能不受支持,导致出现了错误信息。

  2. -fzero-call-used-regs=used-gpr: 这个编译选项是在函数调用后将所有使用过的通用寄存器清零,这对于增加安全性有帮助,特别是对于防止密码等敏感信息泄露有一定作用。这个选项在某些版本的 clang 编译器中可能不受支持。

  3. -fconserve-stack: 这个编译选项用来指导编译器在生成代码时尽量减少栈的使用。这在栈空间非常有限的环境中可能非常有用,例如在嵌入式系统或内核代码中。然而,这个选项在 clang 编译器中可能不受支持。

  4. -mrecord-mcount: 这个编译选项是在内核构建过程中用来插入特殊的函数指令,以支持动态追踪技术。在这个指令的帮助下,内核可以记录函数调用的情况。然而,这个选项在 clang 编译器中可能不受支持。

总的来说,这些编译选项可能是 GCC 特有的,而 clang 并不全部支持,因此你在使用 clang 编译时出现了错误。解决方法可能包括升级你的 clang 版本,或者更换为 GCC 编译器。

cargo build -Z 是一个只能在 Rust 的夜间(nightly)版本上使用的参数

这个错误信息告诉你 -Z 是一个只能在 Rust 的夜间(nightly)版本上使用的参数,但是你当前正在使用的是稳定版(stable)。-Z 参数可以用来开启一些还在实验阶段的功能。

为了能够使用 -Z 参数,你需要切换到 Rust 的夜间版本。这可以通过 rustup 这个 Rust 版本管理工具来实现。如果你还没有安装 rustup,你可以通过以下命令安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后,你可以通过以下命令切换到 Rust 的夜间版本:

rustup default nightly

现在你应该能够使用 -Z 参数了。请注意,由于夜间版本包含的是一些实验性的功能,因此它可能不如稳定版那么稳定