diff --git a/Cargo.lock b/Cargo.lock index 5a8d1bd..7b5e62d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,27 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "atest" +version = "0.1.0" +dependencies = [ + "libfelix", +] + +[[package]] +name = "btest" +version = "0.1.0" +dependencies = [ + "libfelix", +] + +[[package]] +name = "ctest" +version = "0.1.0" +dependencies = [ + "libfelix", +] + [[package]] name = "felix-boot" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 668db0c..7772359 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["boot", "bootloader", "kernel", "apps/hello"] +members = ["boot", "bootloader", "kernel", "apps/hello", "apps/atest", "apps/btest", "apps/ctest"] resolver = "2" [workspace.package] diff --git a/Makefile b/Makefile index 491566c..dee863b 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,9 @@ objcopy: @$(OBJCOPY) -I elf32-i386 -O binary target/x86_16-felix/debug/felix-bootloader build/bootloader.bin @$(OBJCOPY) -I elf32-i386 -O binary target/x86_32-felix/debug/felix-kernel build/kernel.bin @$(OBJCOPY) -I elf32-i386 -O binary target/x86_32-felix/debug/hello build/hello.bin + @$(OBJCOPY) -I elf32-i386 -O binary target/x86_32-felix/debug/atest build/atest.bin + @$(OBJCOPY) -I elf32-i386 -O binary target/x86_32-felix/debug/btest build/btest.bin + @$(OBJCOPY) -I elf32-i386 -O binary target/x86_32-felix/debug/ctest build/ctest.bin .PHONY: image image: @@ -62,6 +65,9 @@ image: @$(MCOPY) -i build/partition.img dante "::dante" @$(MCOPY) -i build/partition.img lorem "::lorem" @$(MCOPY) -i build/partition.img build/hello.bin "::hello" + @$(MCOPY) -i build/partition.img build/atest.bin "::atest" + @$(MCOPY) -i build/partition.img build/btest.bin "::btest" + @$(MCOPY) -i build/partition.img build/ctest.bin "::ctest" @dd if=build/partition.img of=build/disk.img bs=512 seek=36864 conv=notrunc @rm -rf build/partition.img @dd if=build/bootloader.bin of=build/disk.img bs=512 seek=2048 conv=notrunc diff --git a/apps/atest/Cargo.toml b/apps/atest/Cargo.toml new file mode 100644 index 0000000..b63784b --- /dev/null +++ b/apps/atest/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "atest" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[dependencies.libfelix] +path = "../../lib" diff --git a/apps/atest/build.rs b/apps/atest/build.rs new file mode 100644 index 0000000..66b7cf4 --- /dev/null +++ b/apps/atest/build.rs @@ -0,0 +1,10 @@ +use std::path::Path; + +fn main() { + let local_path = Path::new(env!("CARGO_MANIFEST_DIR")); + //tell rust to use custom linker script + println!( + "cargo:rustc-link-arg-bins=--script={}", + local_path.join("linker.ld").display() + ); +} diff --git a/apps/atest/linker.ld b/apps/atest/linker.ld new file mode 100644 index 0000000..86422b6 --- /dev/null +++ b/apps/atest/linker.ld @@ -0,0 +1,39 @@ +ENTRY(_start) + +SECTIONS { + . = 0x02000000; + + .start_marker : + { + LONG(0xB16B00B5) + } + + _app_start = .; + + .start : { + *(.start) + } + .text : { + *(.text .text.*) + } + .bss : { + *(.bss .bss.*) + } + .rodata : { + *(.rodata .rodata.*) + } + .data : { + *(.data .data.*) + } + .eh_frame : { + *(.eh_frame .eh_frame.*) + } + .eh_frame_hdr : { + *(.eh_frame_hdr .eh_frame_hdr.*) + } + + .end_marker : + { + SHORT(0xdead) + } +} \ No newline at end of file diff --git a/apps/atest/src/main.rs b/apps/atest/src/main.rs new file mode 100644 index 0000000..d0a8f3b --- /dev/null +++ b/apps/atest/src/main.rs @@ -0,0 +1,34 @@ +//HELLO +//Simple program to test libfelix + +#![no_std] +#![no_main] + +use core::panic::PanicInfo; +use libfelix; + +#[no_mangle] +#[link_section = ".start"] +pub extern "C" fn _start() { + let mut a: u32 = 0; + let mut b: u8 = 0; + loop { + if a == 100_000_000 { + libfelix::println!("Process A running. {}% complete.", b); + a = 0; + b += 1; + + if b == 100 { + libfelix::println!("Process A complete."); + break; + } + } + a += 1; + } + loop {} +} + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} +} diff --git a/apps/btest/Cargo.toml b/apps/btest/Cargo.toml new file mode 100644 index 0000000..94ce1be --- /dev/null +++ b/apps/btest/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "btest" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[dependencies.libfelix] +path = "../../lib" diff --git a/apps/btest/build.rs b/apps/btest/build.rs new file mode 100644 index 0000000..66b7cf4 --- /dev/null +++ b/apps/btest/build.rs @@ -0,0 +1,10 @@ +use std::path::Path; + +fn main() { + let local_path = Path::new(env!("CARGO_MANIFEST_DIR")); + //tell rust to use custom linker script + println!( + "cargo:rustc-link-arg-bins=--script={}", + local_path.join("linker.ld").display() + ); +} diff --git a/apps/btest/linker.ld b/apps/btest/linker.ld new file mode 100644 index 0000000..86422b6 --- /dev/null +++ b/apps/btest/linker.ld @@ -0,0 +1,39 @@ +ENTRY(_start) + +SECTIONS { + . = 0x02000000; + + .start_marker : + { + LONG(0xB16B00B5) + } + + _app_start = .; + + .start : { + *(.start) + } + .text : { + *(.text .text.*) + } + .bss : { + *(.bss .bss.*) + } + .rodata : { + *(.rodata .rodata.*) + } + .data : { + *(.data .data.*) + } + .eh_frame : { + *(.eh_frame .eh_frame.*) + } + .eh_frame_hdr : { + *(.eh_frame_hdr .eh_frame_hdr.*) + } + + .end_marker : + { + SHORT(0xdead) + } +} \ No newline at end of file diff --git a/apps/btest/src/main.rs b/apps/btest/src/main.rs new file mode 100644 index 0000000..ee279da --- /dev/null +++ b/apps/btest/src/main.rs @@ -0,0 +1,34 @@ +//HELLO +//Simple program to test libfelix + +#![no_std] +#![no_main] + +use core::panic::PanicInfo; +use libfelix; + +#[no_mangle] +#[link_section = ".start"] +pub extern "C" fn _start() { + let mut a: u32 = 0; + let mut b: u8 = 0; + loop { + if a == 100_000_000 { + libfelix::println!("Process B running. {}% complete.", b); + a = 0; + b += 1; + + if b == 100 { + libfelix::println!("Process B complete."); + break; + } + } + a += 1; + } + loop {} +} + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} +} diff --git a/apps/ctest/Cargo.toml b/apps/ctest/Cargo.toml new file mode 100644 index 0000000..31e5640 --- /dev/null +++ b/apps/ctest/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "ctest" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[dependencies.libfelix] +path = "../../lib" diff --git a/apps/ctest/build.rs b/apps/ctest/build.rs new file mode 100644 index 0000000..66b7cf4 --- /dev/null +++ b/apps/ctest/build.rs @@ -0,0 +1,10 @@ +use std::path::Path; + +fn main() { + let local_path = Path::new(env!("CARGO_MANIFEST_DIR")); + //tell rust to use custom linker script + println!( + "cargo:rustc-link-arg-bins=--script={}", + local_path.join("linker.ld").display() + ); +} diff --git a/apps/ctest/linker.ld b/apps/ctest/linker.ld new file mode 100644 index 0000000..86422b6 --- /dev/null +++ b/apps/ctest/linker.ld @@ -0,0 +1,39 @@ +ENTRY(_start) + +SECTIONS { + . = 0x02000000; + + .start_marker : + { + LONG(0xB16B00B5) + } + + _app_start = .; + + .start : { + *(.start) + } + .text : { + *(.text .text.*) + } + .bss : { + *(.bss .bss.*) + } + .rodata : { + *(.rodata .rodata.*) + } + .data : { + *(.data .data.*) + } + .eh_frame : { + *(.eh_frame .eh_frame.*) + } + .eh_frame_hdr : { + *(.eh_frame_hdr .eh_frame_hdr.*) + } + + .end_marker : + { + SHORT(0xdead) + } +} \ No newline at end of file diff --git a/apps/ctest/src/main.rs b/apps/ctest/src/main.rs new file mode 100644 index 0000000..3676955 --- /dev/null +++ b/apps/ctest/src/main.rs @@ -0,0 +1,34 @@ +//HELLO +//Simple program to test libfelix + +#![no_std] +#![no_main] + +use core::panic::PanicInfo; +use libfelix; + +#[no_mangle] +#[link_section = ".start"] +pub extern "C" fn _start() { + let mut a: u32 = 0; + let mut b: u8 = 0; + loop { + if a == 100_000_000 { + libfelix::println!("Process C running. {}% complete.", b); + a = 0; + b += 1; + + if b == 100 { + libfelix::println!("Process C complete."); + break; + } + } + a += 1; + } + loop {} +} + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} +}