RustForLinux:跟着清华训练营从零打造 Linux 驱动【第二课】

RustForLinux:跟着清华训练营从零打造 Linux 驱动【第二课】

💡 原文中文,约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 的代码。
➡️

继续阅读