8个版本
0.4.3 | 2020年4月10日 |
---|---|
0.4.2 | 2020年4月8日 |
0.3.3 | 2020年4月7日 |
0.2.2 | 2020年4月5日 |
#707 in 操作系统
每月24次下载
46KB
1K SLoC
rustos
Philipp Oppermann的 awesome Writing an OS in Rust
- 骨架
- 中断
- 内存管理
- 多任务
main.rs
当前的 main.rs
#![no_std]
#![no_main]
#![feature(custom_test_frameworks)]
#![test_runner(rustos::test_runner)]
#![reexport_test_harness_main = "test_main"]
extern crate bootloader;
extern crate rustos;
use bootloader::{entry_point, BootInfo};
use core::panic::PanicInfo;
use rustos::{println, task};
entry_point!(start_kernel);
fn start_kernel(boot_info: &'static BootInfo) -> ! {
println!("Welcome to the real world!");
// Initialize the kernel.
rustos::init();
rustos::memory::init(boot_info);
// Spawn async task(s).
let mut executor = task::Executor::new();
executor.spawn(task::Task::new(example_task()));
#[cfg(test)]
test_main();
println!("It did not crash!!!");
// Run forever.
executor.run()
}
#[cfg(not(test))]
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
println!("{}", info);
rustos::hlt_loop();
}
#[cfg(test)]
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
rustos::test_panic_handler(info)
}
async fn example_task() {
let number = async_number().await;
println!("async number: {}", number);
}
async fn async_number() -> u32 {
42
}
执行
您可以使用 make run
命令来运行当前的 main.rs
make run
或者之前的文章,例如使用 make run-post_name
运行 post01.rs
make run-post01
测试
您可以使用 make test
命令运行所有集成测试
make test
或使用 `make tsst-test_name` 运行特定的测试
make test-heap_allocation
愉快的编程!
依赖项
~2MB
~37K SLoC