3个版本
0.1.2 | 2023年12月2日 |
---|---|
0.1.1 | 2023年12月1日 |
0.1.0 | 2023年11月29日 |
#484 in 嵌入式开发
14KB
269 行
vgastream-rs
- 独立的Rust中高级VGA(0xB8000)库。
- 提供
println
print
eprintln
eprint
宏。
如何使用
cargo add vgastream-rs
示例
/*main.rs*/
#![no_std]
#![no_main]
mod multiboot;
mod panic;
extern crate vgastream_rs;
use vgastream_rs::prelude::*;
use vga_rs::Color;
#[no_mangle]
pub extern "C" fn _start() -> ! {
VgaOutStream::new().reset_with((Color::BLACK, Color::WHITE));
let _ = main();
loop{
unsafe { panic::halt() }
}
}
fn main() {
println!("Hello, World!");
}
/*multiboot.rs*/
#[repr(C, align(4))]
pub struct MultiBoot {
magic: u32,
flags: u32,
checksum: u32,
}
const ALIGN: u32 = 1 << 0;
const MEMINFO: u32 = 1 << 1;
const MAGIC: u32 = 0x1BADB002;
const FLAGS: u32 = ALIGN | MEMINFO;
#[used]
#[link_section = ".multiboot"]
#[no_mangle]
static multiboot: MultiBoot = MultiBoot {
magic: MAGIC,
flags: FLAGS,
checksum: !(MAGIC + FLAGS)+1,
};
/*panic.rs*/
use core::panic::PanicInfo;
use vgastream_rs::prelude::*;
use core::arch::asm;
#[inline]
pub unsafe fn halt() -> ! {
asm!("cli","hlt");
core::hint::unreachable_unchecked()
}
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
eprintln!("{}", info);
loop
{
unsafe { halt() }
}
}
simplekernel-rs
git clone https://gitlab.com/hwoy/simplekernel-rs.git
simplekernel-rs可以在x86独立环境中输出"Hello, World!"
。
联系我
- 网站: https://github.com/hwoy
- 电子邮件: mailto:[email protected]
- Facebook: https://127.0.0.1/watt.duean
依赖项
~22KB