3个版本
0.1.2 | 2023年12月24日 |
---|---|
0.1.1 | 2023年12月17日 |
0.1.0 | 2023年12月17日 |
#1663 在 硬件支持
1.5MB
10K SLoC
ACPICA Rust 绑定
与ACPI表和AML代码交互的ACPI内核子系统的Rust绑定。有关使用库的信息,请参阅crate级别的文档
更改ACPICA版本
ACPICA的源代码作为tarball包含在crate根目录中。要更新版本,从下载页面下载新代码,并用此文件替换tarball。然后运行cargo clean
以删除旧版本的对象文件。
此库的构建脚本会自动对源代码进行一些更改,以配置其在内核中使用。如果没有更新Rust代码就更新了ACPICA代码,可能会导致库无法编译,或者即使编译成功也可能无法正常工作。
lib.rs
:
ACPICA绑定
Intel ACPICA内核子系统的Rust绑定(不完全)。此crate仍在积极开发中 - 我正在添加所需的特性到我的OS项目。如果您正在使用此crate,请预计会有很多编译器警告和todo!
。
构建依赖
此crate使用cc
crate从源代码构建ACPICA。此crate需要在系统上存在C编译器 - 有关更多信息,请参阅该crate的文档。
此crate还使用不稳定的Rust特性,因此需要nightly或beta编译器。
运行时依赖
由于此crate设计为在OS内核中使用,因此它的依赖性最小。然而,crate确实需要动态内存分配。
此crate还使用[log
] crate进行日志记录。
用法
ACPICA内核子系统使用以AcpiOs
为前缀的各种函数调用OS代码。这些函数通过此库转换为对AcpiHandler
trait上的方法的调用。实现此trait的对象必须在任何ACPI功能可以使用之前传递给register_handler
。初始化库可能如下所示
struct HandlerStruct {}
impl AcpiHandler for HandlerStruct {
// ...
}
let handler = HandlerStruct {};
let initialization = register_interface(handler)?;
let initialization = initialization.load_tables()?;
let initialization = initialization.enable_subsystem()?;
let initialization = initialization.initialize_objects()?;