hello world asdasd
This commit is contained in:
parent
0a34a214c1
commit
7845d5da70
37
Makefile
Normal file
37
Makefile
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
.PHONY: clean run run-iso target_dir
|
||||||
|
|
||||||
|
target/main.iso: target/kernel.elf target_dir
|
||||||
|
cp 'src/grub.cfg' target/iso/boot/grub
|
||||||
|
cp '$<' target/iso/boot
|
||||||
|
grub-mkrescue -o '$@' target/iso
|
||||||
|
|
||||||
|
target/boot.o: src/boot.s target_dir
|
||||||
|
nasm -f elf32 '$<' -o '$@'
|
||||||
|
|
||||||
|
target/kernel.elf: src/linker.ld target/boot.o target/kernel.o
|
||||||
|
i686-elf-ld -m elf_i386 -nostdlib -o '$@' -T $^
|
||||||
|
|
||||||
|
target/kernel.o: kernel/ target_dir
|
||||||
|
cd kernel && cargo build --release
|
||||||
|
cp kernel/target/x86-unknown-bare_metal/release/deps/kernel-*.o target/kernel.o
|
||||||
|
|
||||||
|
target_dir:
|
||||||
|
mkdir -p target
|
||||||
|
mkdir -p target/iso
|
||||||
|
mkdir -p target/iso/lib
|
||||||
|
mkdir -p target/iso/boot
|
||||||
|
mkdir -p target/iso/boot/grub
|
||||||
|
|
||||||
|
build: target/main.iso
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf target
|
||||||
|
rm -rf kernel/target
|
||||||
|
rm -rf kernel/Cargo.lock
|
||||||
|
mkdir target
|
||||||
|
|
||||||
|
run-elf: target/kernel.elf
|
||||||
|
qemu-system-i386 -kernel '$<'
|
||||||
|
|
||||||
|
run: target/main.iso
|
||||||
|
qemu-system-i386 -cdrom '$<'
|
15
kernel/.cargo/config.toml
Normal file
15
kernel/.cargo/config.toml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
[unstable]
|
||||||
|
build-std = ["core", "compiler_builtins"]
|
||||||
|
build-std-features = ["compiler-builtins-mem"]
|
||||||
|
|
||||||
|
[build]
|
||||||
|
target = "x86-unknown-bare_metal.json"
|
||||||
|
|
||||||
|
[target.x86-unknown-bare_metal]
|
||||||
|
rustflags = [
|
||||||
|
"-C", "opt-level=s", # Эквивалент GCC -Os
|
||||||
|
"-C", "debuginfo=0", # Убирает отладочную информацию
|
||||||
|
"-C", "relocation-model=static", # Для freestanding
|
||||||
|
"--emit=obj" # Генерация объектного файла
|
||||||
|
]
|
8
shell.nix
Normal file
8
shell.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
|
||||||
|
pkgs.mkShell {
|
||||||
|
nativeBuildInputs =
|
||||||
|
with pkgs; [
|
||||||
|
pkgsCross.i686-embedded.buildPackages.gcc
|
||||||
|
];
|
||||||
|
}
|
40
src/boot.s
Normal file
40
src/boot.s
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
global loader
|
||||||
|
global stack_ptr
|
||||||
|
|
||||||
|
extern main
|
||||||
|
|
||||||
|
MODULEALIGN equ 1<<0
|
||||||
|
MEMINFO equ 1<<1
|
||||||
|
FLAGS equ MODULEALIGN | MEMINFO
|
||||||
|
MAGIC equ 0x1BADB002
|
||||||
|
CHECKSUM equ -(MAGIC + FLAGS)
|
||||||
|
|
||||||
|
section .mbheader
|
||||||
|
align 4
|
||||||
|
MultiBootHeader:
|
||||||
|
dd MAGIC
|
||||||
|
dd FLAGS
|
||||||
|
dd CHECKSUM
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
STACKSIZE equ 0x4000
|
||||||
|
|
||||||
|
loader:
|
||||||
|
mov esp, stack+STACKSIZE
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
|
||||||
|
call main
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
hang:
|
||||||
|
hlt
|
||||||
|
jmp hang
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
align 4
|
||||||
|
stack:
|
||||||
|
resb STACKSIZE
|
||||||
|
stack_ptr:
|
5
src/grub.cfg
Normal file
5
src/grub.cfg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
set timeout=0
|
||||||
|
set default="0"
|
||||||
|
menuentry "main" {
|
||||||
|
multiboot /boot/kernel.elf
|
||||||
|
}
|
23
src/linker.ld
Normal file
23
src/linker.ld
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
ENTRY (loader)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x00100000;
|
||||||
|
.mbheader : {
|
||||||
|
*(.mbheader)
|
||||||
|
}
|
||||||
|
.text : {
|
||||||
|
*(.text)
|
||||||
|
}
|
||||||
|
.rodata ALIGN (0x1000) : {
|
||||||
|
*(.rodata)
|
||||||
|
}
|
||||||
|
.data ALIGN (0x1000) : {
|
||||||
|
*(.data)
|
||||||
|
}
|
||||||
|
.bss : {
|
||||||
|
sbss = .;
|
||||||
|
*(COMMON)
|
||||||
|
*(.bss)
|
||||||
|
ebss = .;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user