#io #kernel #no-std

nightly no-std cpuio

裸机(no_std)的 inb、outb、inw、outw、inl、outw 指令,具有类似 Rust 的 API

3 个版本 (破坏性更新)

使用旧的 Rust 2015

0.3.0 2020 年 5 月 20 日
0.2.0 2015 年 11 月 12 日
0.1.0 2015 年 11 月 8 日

#1530 in 嵌入式开发

Download history 457/week @ 2023-11-20 307/week @ 2023-11-27 292/week @ 2023-12-04 365/week @ 2023-12-11 443/week @ 2023-12-18 288/week @ 2023-12-25 184/week @ 2024-01-01 389/week @ 2024-01-08 367/week @ 2024-01-15 334/week @ 2024-01-22 217/week @ 2024-01-29 320/week @ 2024-02-05 402/week @ 2024-02-12 453/week @ 2024-02-19 433/week @ 2024-02-26 464/week @ 2024-03-04

1,834 每月下载量
4 个包中使用了 (2 直接)

Apache-2.0/MIT

8KB
79

cpuio: inboutb 等指令的 Rust 封装

警告:与低级 outboutwoutl 函数的接口已更改以匹配 Linux。请将这些三个函数的参数顺序反转。

此库旨在在裸机上运行,并且它只依赖于 core 库。

要使用此库,将其添加到您的 Cargo.toml 文件中,并调用 cpuio::Port::new 来创建一个端口,确保指定 u8u16u32,具体取决于端口支持的数据大小。

extern crate cpuio;

use cpuio::Port;

fn main() {
    // Create a port pointing at 0x60, the address of the PS/2 keyboard
    // port on x86 hardware.  This is an unsafe operation because many
    // ports can be used to reconfigure your underlying hardware, and
    // it's the responsiblity of the port creator to make sure it's
    // used safely.
    let mut keyboard: Port<u8> = unsafe { Port::new(0x60) };

    // Read a single scancode from a PS/2 keyboard.  If you run this as
    // an ordinary user, it will fail with a SIGSEGV.
    println!("scancode: {}", keyboard.read());
}

Port::new 构造函数可用作 const fn,允许您在编译时配置端口。

还有一个 UnsafePort 类型,它与上述类型相同,只是 readwrite 被显式标记为 unsafe。在单个端口操作可能损坏内存或导致未定义行为时,最好使用 UnsafePort

许可

根据您的选择,此库受 Apache 许可证 2.0 版MIT 许可证 许可。

无运行时依赖项