Jump to rust successfully
Yay! :D
This commit is contained in:
7
rust_experiments/Cargo.toml
Normal file
7
rust_experiments/Cargo.toml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[package]
|
||||||
|
name = "rust_kernel"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["yo"]
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["staticlib"]
|
||||||
@@ -1,14 +1,17 @@
|
|||||||
|
|
||||||
arch ?= x86-64
|
arch ?= x86-64
|
||||||
|
rust_target := x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
linker_script := src/linker.ld
|
linker_script := src/linker.ld
|
||||||
grub_cfg := src/grub.cfg
|
grub_cfg := src/grub.cfg
|
||||||
kernel := kernel.bin
|
kernel := kernel.bin
|
||||||
iso := os.iso
|
iso := os.iso
|
||||||
|
|
||||||
|
|
||||||
asm_source := $(wildcard src/*.asm)
|
asm_source := $(wildcard src/*.asm)
|
||||||
asm_object := $(patsubst src/%.asm, \
|
asm_object := $(patsubst src/%.asm, \
|
||||||
%.o, $(asm_source))
|
%.o, $(asm_source))
|
||||||
|
rust_object := target/$(rust_target)/debug/librust_kernel.a
|
||||||
|
|
||||||
.PHONY: all clean run iso
|
.PHONY: all clean run iso
|
||||||
|
|
||||||
@@ -23,8 +26,11 @@ $(iso): $(kernel) $(grub_cfg)
|
|||||||
@cp $(grub_cfg) isofiles/boot/grub
|
@cp $(grub_cfg) isofiles/boot/grub
|
||||||
@grub-mkrescue -o $(iso) isofiles 2> /dev/null
|
@grub-mkrescue -o $(iso) isofiles 2> /dev/null
|
||||||
|
|
||||||
$(kernel): $(asm_object) $(linker_script)
|
cargo:
|
||||||
@ld -n -T $(linker_script) -o $(kernel) $(asm_object)
|
@cargo build --target $(rust_target)
|
||||||
|
|
||||||
|
$(kernel): cargo $(rust_object) $(asm_object) $(linker_script)
|
||||||
|
@ld -n -T $(linker_script) -o $(kernel) $(asm_object) $(rust_object)
|
||||||
|
|
||||||
%.o: src/%.asm
|
%.o: src/%.asm
|
||||||
@nasm -f elf64 $< -o $@
|
@nasm -f elf64 $< -o $@
|
||||||
@@ -34,3 +40,4 @@ clean:
|
|||||||
@rm -f *.o
|
@rm -f *.o
|
||||||
@rm -f kernel.bin
|
@rm -f kernel.bin
|
||||||
@rm -f os.iso
|
@rm -f os.iso
|
||||||
|
@cargo clean
|
||||||
|
|||||||
12
rust_experiments/src/lib.rs
Normal file
12
rust_experiments/src/lib.rs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
#![feature(no_std, lang_items)]
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern fn rust_main() {}
|
||||||
|
|
||||||
|
#[lang = "eh_personality"]
|
||||||
|
extern fn eh_personality() {}
|
||||||
|
|
||||||
|
#[lang = "panic_fmt"]
|
||||||
|
extern fn panic_fmt() -> ! { loop {}}
|
||||||
@@ -5,6 +5,8 @@ bits 64
|
|||||||
|
|
||||||
long_mode_start:
|
long_mode_start:
|
||||||
; print "OKAY"
|
; print "OKAY"
|
||||||
|
extern rust_main
|
||||||
|
call rust_main
|
||||||
mov rax, 0x2f59_2f41_2f4b_2f4f
|
mov rax, 0x2f59_2f41_2f4b_2f4f
|
||||||
mov qword [0xb8000], rax
|
mov qword [0xb8000], rax
|
||||||
hlt
|
hlt
|
||||||
|
|||||||
Reference in New Issue
Block a user