4个版本
使用旧的Rust 2015
0.0.8 | 2021年8月19日 |
---|---|
0.0.7 | 2021年8月18日 |
0.0.6 | 2021年5月2日 |
0.0.5 | 2021年4月6日 |
#859 in 硬件支持
9MB
124K SLoC
acpica-sys
构建acpica,并为其提供绑定。要使用其中大部分功能,需要提供各种符号,这些符号在ACPICA参考手册的第9节中有所描述。
这是对现有acpica-sys crate的分支,略有修改
- 使用GCC
- 修改后的构建
- 更近期的acpica源代码
更多详情请查看https://crates.io/crates/libacpica
更新ACPICA源代码
一些可能有用的步骤
- 从https://acpica.org/downloads下载新的源代码
- 将acpica重命名为acpica-old
- 解压缩新的acpica源代码,将文件夹重命名为acpica
cp acpica-old/source/include/platform/acnrk.h acpica/source/include/platform/acnrk.h
- 在平台列表中包含acnrk头文件
acenv.h
应如下所示
#if defined(NRK)
#include "acnrk.h"
#elif defined(_LINUX) || defined(__linux__)
#include "aclinux.h"
mv src/raw64.rs src/raw64.bak.rs
bash update-bindings.sh
(确保已安装rust-bindgen以便执行此步骤)- 检查
raw64.rs
,查看它是否大致代表src/raw64.bak.rs
文件。 - 将使用此版本的项目切换到crate的新版本,并查看是否可以编译
rm src/raw64.bak.rs
rm-rf acpica-old
可能遇到的问题及其解决方案
- 由于__va_list_tag、AcpiOsVprintf等导致的编译错误 -> 只需删除这些定义。
- 编译错误
error[E0433]: failed to resolve: maybe a missing crate std?
-> 用core替换,或者如果不需要,则删除这些定义。 error[E0308]: mismatched types expected i32, found u32
:确保UINT8、UINT32、UINT64分别映射到u8、u32、u64(而不是i8、i32、i64)。- 链接器抛出符号重复定义的错误
| = note: ld: ./target/x86_64-nrk/debug/deps/liblibacpica-e827d49529440c52.rlib(utglobal.o):(.data+0x0): multiple definition of `AcpiGbl_FixedEventInfo'; ./target/x86_64-nrk/debug/deps/liblibacpica-70ca8cf5bc7406ee.rlib(utglobal.o):(.data+0x0): first defined here
某些旧版本的libacpica可能通过传递依赖项(例如rust-topology)渗入。在本地克隆rust-topology并使用那里的update libacpica或使用cargo patch section来覆盖。
- 链接器错误:查找libc函数吗?
| = note: ld: ./target/x86_64-nrk/debug/deps/liblibacpica-1986a2fed1aa7eb7.rlib(utdebug.o): in function `AcpiDebugPrint':
| utdebug.c:(.text+0x169): undefined reference to `strlen'
检查编译时定义 ACPI_USE_STANDARD_HEADERS
和 ACPI_USE_SYSTEM_CLIBRARY
。