aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
Commit message (Collapse)AuthorAge
* proc: basic task/stack creationTianhao Wang2024-06-11
| | | | Now we can do a simple context swap (without scheduler though)
* chore: cleanupsTianhao Wang2024-06-11
| | | | Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* io: add serial output through port 0x3f8 (qemu)Tianhao Wang2024-06-11
| | | | | not yet wrapped with fmt macros because I want some thing stateless. (i.e. I don't want to pass `&mut self` to write_str...).
* mm: use linked-list-allocator as kmallocTianhao Wang2024-06-11
| | | | | | | | | | | | | | | | | | | | | | | | I'll implement my own allocator later. Currently using linked-list allocator [1] to manage the kernel heap (as in kmalloc, not vmalloc). It manages the ID-mapped region (from VA 0xffff_8000_0000_0000). This allocator is initialized to use the _largest_ physical memory block. If the kernel image (text and data) live in this zone then skip the occupied part. Key difference between kmalloc and vmalloc: - kmalloc pretty much manages the physical memory: the allocated address are within the id-mapped region (see above) therefore the allocated memory must also be contigous in physical memory. Such memory MUST NOT page fault. This is prone to fragmentation, so do not use kmalloc to allocate big objects (e.g. bigger than one 4k page). - vmalloc manages kernel heap memory and the mapping is managed by paging. Such memory could trigger pagefault in kernel mode. Note that the kmalloc conflicts with the previous used stack based PMA as they operates on the same VM zone. References: [1] https://github.com/rust-osdev/linked-list-allocator Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* chore: add page fault test codeTianhao Wang2024-06-11
| | | | Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* proc: add basic task structTianhao Wang2024-06-11
| | | | Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* toolchain: bump rust toolchain versionTianhao Wang2024-06-11
| | | | | | | | | | | | | | | | | | | 1. allow unexpected cfgs in lib.rs, in this case "no_global_oom_handling" is cause warnings [1] 2. for large code models the compiler (rust linkers) now put code and data in `.ltext`, `.ldata`, `.lbss`, `.lrodata` instead of the same `.text` , `.data` ... etc. We are adjusting accordingly in the linker script. 3. unsafe assertions identified undefined behaviours, in this case a repr(C) struct was not mared as repr(packed), therefore having an unexpected size. The unsafe assertions was not enabled by default in debug builds so the idt setup code with from_raw_parts_mut() has been working on UB. Glad we can catch this.... related: [1] https://github.com/rust-lang/rust/pull/123501 related: [2] https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#asserting-unsafe-preconditions
* chore: add v2p and p2v conversion wrt. id mappingTianhao Wang2024-06-11
| | | | Also renamed a few symbols to avoid confusion.
* mm: add basic paging infra from x86_64 crateTianhao Wang2024-06-11
| | | | | | | | | | the x86_64 crate is pretty solid and has a permissive license (Apache/MIT), but I want to make this myself in the future to "experience" the unsafe rust further....Also it has too many abstractions, which is justified as a library, but not ideal for a from sctrach toy OS as it hides the lower end. Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* mm: add stack based PMATianhao Wang2024-06-11
| | | | | | | use 8MiB reserved array to manage up to 4GiB of physical memory (4K Pages only) Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* multiboot: parse mmap blocksTianhao Wang2024-06-11
| | | | Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* multiboot: get memory info from MB infoTianhao Wang2024-06-11
| | | | Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* multiboot: basic support for multiboot infoTianhao Wang2024-06-11
| | | | | | | | well, it's not trivial to use bios function because thanks to grub + multiboot, we are already in protected mode when the startup code takes control. Also the MB info is easier to play with than BIOS (or ACPI) Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
* choreTianhao Wang2024-06-11
|
* interrupt: add rust binding for idtTianhao Wang2024-06-11
|
* choreTianhao Wang2024-06-11
|
* pic: initialize with rust codeTianhao Wang2024-06-11
|
* keyboard: implement leds and rebootTianhao Wang2024-06-11
| | | | works on qemu, untested on real machine
* paging: add basic bitmap frame allocatorTianhao Wang2024-06-11
|
* add mm and ds modules (yet empty)Tianhao Wang2024-06-11
|
* MM: add modules for memory managementTianhao Wang2024-06-11
|
* PS/2 Keyboard controller: read and decode keyTianhao Wang2024-06-11
|
* basic interrupt/PIC supportTianhao Wang2024-06-11
|
* add println! and panic! macroTianhao Wang2024-02-01
| | | | | The rust lazy_static requires interior mutability. I have to include a Mutex impl (spin::Mutex). But I'd like to implement my own primitives.
* Allow dead_code and unused_imports at crate levelTianhao Wang2024-02-01
| | | | | | to make the linter shutup.... You stupid linter, this is a new project! ofc there are stuffs defined not used.... I'll let you do the job when I finish... :(
* formatting code, use tab identation -- before it's too lateTianhao Wang2024-01-30
|
* usable printf, with some ptr magicTianhao Wang2023-03-15
|
* CGA cursor locationTianhao Wang2023-03-14
|
* cleanupTianhao Wang2023-03-14
|
* adding io portTianhao Wang2023-03-11
|
* fix linkingTianhao Wang2023-03-11
|
* a minimal working demo on bare metalTianhao Wang2023-03-10