An open API service indexing awesome lists of open source software.

https://github.com/gz/rust-multiboot

Multiboot library written in rust.
https://github.com/gz/rust-multiboot

bootloader multiboot os osdev

Last synced: 11 months ago
JSON representation

Multiboot library written in rust.

Awesome Lists containing this project

README

          

# Multiboot [![Crates.io](https://img.shields.io/crates/v/multiboot.svg)](https://crates.io/crates/multiboot) ![Build](https://github.com/gz/rust-multiboot/actions/workflows/standard.yml/badge.svg)

This is a multiboot (v1) library written entirely in rust. The code depends only on libcore.

## How-to use

```rust
extern crate core;

use multiboot::information::{MemoryManagement, Multiboot, PAddr};
use core::{slice, mem};

struct Mem;

impl MemoryManagement for Mem {
unsafe fn paddr_to_slice(&self, addr: PAddr, size: usize) -> Option<&'static [u8]> {
let ptr = mem::transmute(addr);
Some(slice::from_raw_parts(ptr, size))
}

// If you only want to read fields, you can simply return `None`.
unsafe fn allocate(&mut self, _length: usize) -> Option<(PAddr, &mut [u8])> {
None
}

unsafe fn deallocate(&mut self, addr: PAddr) {
if addr != 0 {
unimplemented!()
}
}
}

static mut MEM: Mem = Mem;

/// mboot_ptr is the initial pointer to the multiboot structure
/// provided in %ebx on start-up.
pub fn use_multiboot(mboot_ptr: PAddr) -> Option> {
unsafe {
Multiboot::from_ptr(mboot_ptr, &mut MEM)
}
}
```

Functionality is still not complete and patches are welcome!

## Documentation

* [API Documentation](https://docs.rs/multiboot/)