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 硬件支持


用于atopology

MIT/Apache

9MB
124K SLoC

C 110K SLoC // 0.5% comments Rust 7K SLoC // 0.0% comments Happy 6.5K SLoC Shell 338 SLoC // 0.4% comments Batch 12 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_HEADERSACPI_USE_SYSTEM_CLIBRARY

无运行时依赖