💡
原文中文,约9100字,阅读约需22分钟。
📝
内容提要
本文回顾了《Rust for Linux:跟着清华训练营从零打造 Linux 驱动》第二课,讲解了配置 Rust for Linux 驱动环境和Linux源码目录结构分析,介绍了常用的Linux内核模块命令和Bindings机制的使用方式。
🎯
关键要点
- 本文回顾了《Rust for Linux:跟着清华训练营从零打造 Linux 驱动》第二课的内容。
- 课程主要讲解了如何配置 Rust for Linux 驱动环境和分析 Linux 源码目录结构。
- 使用最新的 6.6.0-rc4 版本内核进行实验,主要基于 rust-dev 分支。
- Rust for Linux 官方维护四个分支:rust-next、rust-fixes、rust-dev 和 rust。
- Linux 源码目录结构包括 arch、block、certs、crypto、driver、fs、include、ipc、mm、net、rust、samples、sound 和 tools。
- 常用的 Linux 内核模块命令包括 insmod、rmmod、lsmod、modprobe 和 depmod。
- 通过创建 rust_helloworld.rs 文件实现 Hello World 驱动,并在 menuconfig 中添加模块。
- 使用 make menuconfig 和 make build 命令配置和编译内核,验证模块加载成功。
- module! 宏用于定义模块的入口和出口函数,确保与 C 语言的符号一致性。
- Bindings 机制为 Rust for Linux 提供了对 Linux 内核接口的封装和抽象。
- 开发者可以通过 bindings 和 helper 直接调用 Linux 内核接口,简化开发过程。
- bindgen 工具生成 bindings_generated.rs 和 bindings_helpers_generated.rs 文件,方便在 Rust 驱动代码中调用内核接口。
- 直接从 bindings 获取的内核代码接口通常是 unsafe 的,但可以通过封装转变为 safe 的代码。
➡️