#内核模块 #字节 #FreeBSD #hello #load #read #version

nightly johalun/module

FreeBSD 内核模块 (Rust 编写)

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年6月9日

#2207Rust 模式

64 星 & 10 关注者

1.5MB
29K SLoC

Echo - 一个用 Rust 编写的 FreeBSD 内核模块 (WIP)

要求

  • FreeBSD 机器
  • Rust nightly
  • Xargo

我建议使用 rustup 来安装和处理 Rust 的不同版本。

安装

Rust

https://www.rustup.rs/

Xargo

$ cargo install xargo

设置 Rust nightly

在 crate 根目录下执行

$ rustup override set nightly

内容

根目录

此目录是模块本身的 Cargo 根目录。

Crates

这里列出了所有不在 crates.io 上可用的依赖 crates。

core 完全由 Xargo 构建。

libstd_unicode

从 Rust 源代码复制,未修改。

libcollections

从 Rust 源代码复制,未修改。

liballoc

从 Rust 源代码复制,未修改。

liballoc_system

从 Rust 源代码复制。

添加了 kern_malloc.rs,这是内核 malloc 函数的 FFI 绑定。

修改了 lib.rs 以使用这些函数。

freebsd_kernel_std

为 echo 模块实现的 std 的最小版本。在构建时生成 FFI 绑定。存在安全的绑定,用于运行此代码所需的东西。

构建

如果需要更改,请检查 build.sh 脚本,然后运行

$ ./build.sh

加载模块

如果构建成功,根目录下应该有一个 hello.ko 文件。使用以下方式加载:

$ sudo kldload ./hello.ko

使用

$ cat /dev/rustmodule  
Default Message :)  
$ echo Hello > /dev/rustmodule   
Read 6 bytes. Setting new message to "Hello\n"  
$ cat /dev/rustmodule  
Hello  
$ sudo kldunload hello  

警告

如果存在任何错误或代码错误,内核很可能会挂起。

我建议在虚拟机上测试该模块。

这可以保护您的系统安全,并使开发和测试更容易。

依赖项

~165KB