Send REDOXFS_UUID to kernel
This commit is contained in:
+38
-9
@@ -67,6 +67,13 @@ redoxfs:
|
||||
.file:
|
||||
times 512 db 0
|
||||
|
||||
.env:
|
||||
db "REDOXFS_UUID="
|
||||
.env.uuid:
|
||||
db "00000000-0000-0000-0000-000000000000"
|
||||
.env.end:
|
||||
db 0
|
||||
|
||||
redoxfs.open:
|
||||
mov eax, 0
|
||||
mov bx, redoxfs.header
|
||||
@@ -96,27 +103,49 @@ redoxfs.open:
|
||||
mov al, ' '
|
||||
call print_char
|
||||
|
||||
mov di, redoxfs.env.uuid
|
||||
xor si, si
|
||||
.uuid:
|
||||
cmp si, 4
|
||||
je .dash
|
||||
je .uuid.dash
|
||||
cmp si, 6
|
||||
je .dash
|
||||
je .uuid.dash
|
||||
cmp si, 8
|
||||
je .dash
|
||||
je .uuid.dash
|
||||
cmp si, 10
|
||||
je .dash
|
||||
jmp .no_dash
|
||||
.dash:
|
||||
je .uuid.dash
|
||||
jmp .uuid.no_dash
|
||||
.uuid.dash:
|
||||
mov al, '-'
|
||||
call print_char
|
||||
.no_dash:
|
||||
mov [di], al
|
||||
inc di
|
||||
.uuid.no_dash:
|
||||
mov bx, [redoxfs.header + Header.uuid + si]
|
||||
rol bx, 8
|
||||
call print_hex
|
||||
|
||||
mov cx, 4
|
||||
.uuid.char:
|
||||
mov al, bh
|
||||
shr al, 4
|
||||
|
||||
cmp al, 0xA
|
||||
jb .uuid.below_0xA
|
||||
|
||||
add al, 'a' - 0xA - '0'
|
||||
.uuid.below_0xA:
|
||||
add al, '0'
|
||||
|
||||
mov [di], al
|
||||
inc di
|
||||
|
||||
shl bx, 4
|
||||
loop .uuid.char
|
||||
|
||||
add si, 2
|
||||
cmp si, 16
|
||||
jb .uuid
|
||||
|
||||
call print
|
||||
call print_line
|
||||
|
||||
xor ax, ax
|
||||
|
||||
@@ -6,6 +6,8 @@ args:
|
||||
.kernel_size dq 0
|
||||
.stack_base dq 0
|
||||
.stack_size dq 0
|
||||
.env_base dq 0
|
||||
.env_size dq 0
|
||||
|
||||
startup:
|
||||
; enable A20-Line via IO-Port 92, might not work on all motherboards
|
||||
|
||||
@@ -123,23 +123,48 @@ long_mode:
|
||||
mov ss, rax
|
||||
|
||||
; stack_base
|
||||
mov rdx, 0xFFFFFF0000080000
|
||||
mov [args.stack_base], rdx
|
||||
mov rsi, 0xFFFFFF0000080000
|
||||
mov [args.stack_base], rsi
|
||||
; stack_size
|
||||
mov rcx, 0x1F000
|
||||
mov [args.stack_size], rcx
|
||||
|
||||
; set stack pointer
|
||||
mov rsp, rdx
|
||||
mov rsp, rsi
|
||||
add rsp, rcx
|
||||
sub rsp, 256
|
||||
|
||||
; copy env to stack
|
||||
%ifdef KERNEL
|
||||
mov rsi, 0
|
||||
mov rcx, 0
|
||||
%else
|
||||
mov rsi, redoxfs.env
|
||||
mov rcx, redoxfs.env.end - redoxfs.env
|
||||
%endif
|
||||
mov [args.env_size], rcx
|
||||
cmp rcx, 0
|
||||
je .no_env
|
||||
.copy_env:
|
||||
mov al, [rsi + rcx]
|
||||
dec rsp
|
||||
mov [rsp], al
|
||||
loop .copy_env
|
||||
.no_env
|
||||
mov [args.env_base], rsp
|
||||
|
||||
; align stack
|
||||
and rsp, 0xFFFFFFFFFFFFFFF0
|
||||
|
||||
; set args
|
||||
mov rdi, args
|
||||
|
||||
; entry point
|
||||
mov rax, [args.kernel_base]
|
||||
jmp [rax + 0x18]
|
||||
call [rax + 0x18]
|
||||
.halt:
|
||||
cli
|
||||
hlt
|
||||
jmp .halt
|
||||
|
||||
long_mode_ap:
|
||||
mov rax, gdt.kernel_data
|
||||
|
||||
Reference in New Issue
Block a user