#credit #operating-system #x86 #break #remove #mode #ata

ata_

所有功劳归功于NPEX42,我之所以做这个,是因为我正在开发的操作系统在导入x86_64 crate时崩溃,这个库可以移除它。一个简单而惊人的x86 ATA crate。功劳归功于NPEX42

2 个版本

0.1.1 2023年2月24日
0.1.0 2023年2月24日

#429操作系统

MIT 许可证

20KB
425

x86_ATA


所有功劳归功于NPEX42,我之所以做这个,是因为我正在开发的操作系统在导入x86_64 crate时崩溃,这个库可以移除它。一个简单而惊人的x86 ATA crate。功劳归功于NPEX42

概述

  • 24位LBA模式
  • 使用PIO模式

示例

// Read A Single block from a disk
pub fn read_single() {
    use ata_x86::{init, ATA_BLOCK_SIZE, read};
    // 1. Initialise ATA Subsystem. (Perform Once, on boot)
    init().expect("Failed To Start ATA...");
    
    // 2. Create a temporary buffer of size 512.
    let mut buffer: [u8;ATA_BLOCK_SIZE] = [0; ATA_BLOCK_SIZE];

    // 3. Pass the buffer over to the Subsystem, to be filled.
    read(0, 0, 0, &mut buffer);
}


// Write A Single block onto a disk
pub fn write_single() {
    use ata_x86::{init, ATA_BLOCK_SIZE, write};
    // 1. Initialise ATA Subsystem. (Perform Once, on boot)
    init().expect("Failed To Start ATA...");
    
    // 2. Create a buffer of size 512, filled with the data to be written.
    let buffer: [u8;ATA_BLOCK_SIZE] = [0; ATA_BLOCK_SIZE];

    // 3. Pass the buffer over to the Subsystem, to be filled.
    write(0, 0, 0, &buffer);
}

依赖项

~280–540KB
~11K SLoC