Skip to content

keithnoguchi/rustos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rustos

drone crate docs

Philipp Oppermann's awesome Writing an OS in Rust

main.rs

Current 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
}

Execution

You can run the current [main.rs] with make run:

make run

or the previous posts, e.g. [post01.rs] with make run-post_name as:

make run-post01

Tests

You can run all the integration test with make test:

make test

or specific tests with `make tsst-test_name as:

make test-heap_allocation

Happy Hackin'!

About

Writing an OS in Rust

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages