Send REDOXFS_UUID to kernel

This commit is contained in:
Jeremy Soller
2017-09-30 18:05:49 -06:00
parent d48e8237f2
commit 3755c7cbdd
3 changed files with 70 additions and 14 deletions
+38 -9
View File
@@ -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
+2
View File
@@ -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
+30 -5
View File
@@ -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