Grub2 multiboot1

This commit is contained in:
hyperassembler 2014-09-23 18:00:39 -07:00
parent 589f2bb02e
commit b157087658
8 changed files with 208 additions and 29 deletions

View File

@ -1,10 +0,0 @@
KERNELIMG=$1
KERNELBIN=$2
sudo umount /mnt
sudo losetup -d /dev/loop0
sudo losetup /dev/loop0 $KERNELIMG -o 1048576
sudo mount /dev/loop0 /mnt
sudo cp $KERNELBIN /mnt/boot/
sudo umount /mnt
sudo losetup -d /dev/loop0

6
OScript/grub.cfg Normal file
View File

@ -0,0 +1,6 @@
menuentry "HOS Multiboot [Dev]" {
multiboot /HOS/kernel_multiboot.bin
}
menuentry "HOS Multiboot2 [Pending]" {
multiboot2 /HOS/kernel_multiboot2.bin
}

View File

@ -0,0 +1,106 @@
org 0x01000000
GRUB_LOADED_FLAG equ 0x2BADB002
GRUB_MAGIC_NUMBER equ 0x1BADB002
GRUB_FLAGS equ 0x10003
GRUB_CHECK_SUM equ -(GRUB_MAGIC_NUMBER + GRUB_FLAGS)
GRUB_HEADER_ADDR:
dd GRUB_MAGIC_NUMBER
dd GRUB_FLAGS
dd GRUB_CHECK_SUM
dd GRUB_HEADER_ADDR
dd GRUB_HEADER_ADDR
dd 0
dd 0
dd GRUB_ENTRY_ADDR
%include "pm.inc"
;GDT to load
DESC_VOID: Descriptor 0,0,0
DESC_GRAPH: Descriptor 0b8000h,0xffff,DA_DRW | DA_DPL3
DESC_FLAT_C: Descriptor 0,0xfffff,DA_CR | DA_32 | DA_LIMIT_4K
DESC_FLAT_RW: Descriptor 0,0xfffff,DA_DRW | DA_32 | DA_LIMIT_4K
GDT_END:
GDT_LENGTH equ GDT_END - DESC_VOID - 1
GDT_PTR:
dw GDT_LENGTH
dd DESC_VOID
;SELECTORS
SLCT_CODE_0 equ DESC_FLAT_C - DESC_VOID
SLCT_GRAPH_0 equ DESC_GRAPH - DESC_VOID
SLCT_DATA_0 equ DESC_FLAT_RW - DESC_VOID
;Message
DUMMY_MSG:
db 'Loaded by multiboot1!',0
;stack
times 1024 db 0
_KERNEL_STACK:
GRUB_ENTRY_ADDR:
[BITS 32]
cli
cmp eax,GRUB_LOADED_FLAG
jmp LOADED_BY_GRUB
hlt
LOADED_BY_GRUB:
mov eax,_KERNEL_STACK
mov esp,eax
push dword 0
popfd
lgdt [GDT_PTR]
jmp SLCT_CODE_0:Reload_CS
Reload_CS:
mov ax,SLCT_DATA_0
mov ss,ax
mov ds,ax
mov es,ax
mov fs,ax
mov ax,SLCT_GRAPH_0
mov gs,ax
push DUMMY_MSG
call _printf
add esp,4
end:
jmp end
_printf:
;void printf(char* str)
;EAX,ECX,EDX
push ebp
mov ebp,esp
push edi
push esi
mov edi,dword [ss:ebp+8]
xor esi,esi
xor ecx,ecx
.begin:
mov al,byte [ds:edi]
cmp al,0 ;0 ended
je .end
mov byte [gs:esi],al
inc esi
mov byte [gs:esi],0x0c
inc edi
inc esi
jmp .begin
.end:
pop esi
pop edi
mov esp,ebp
pop ebp

View File

@ -1,10 +1,9 @@
org 0x01000000
;void HkSystemInit(PMULTIBOOT_INFO info)
GRUB_LOADED_FLAG equ 0x36d76289
GRUB_MAGIC_NUMBER equ 0xE85250D6
GRUB_ARCHITECTURE equ 0x0
GRUB_CHECK_SUM equ -(GRUB_MAGIC_NUMBER + GRUB_HEADER_LENGTH)
GRUB_CHECK_SUM equ - (GRUB_MAGIC_NUMBER + GRUB_ARCHITECTURE + GRUB_HEADER_LENGTH)
GRUB_HEADER_LENGTH equ (GRUB_HEADER_END - GRUB_HEADER_START)
GRUB_HEADER_START:
dd GRUB_MAGIC_NUMBER
@ -14,13 +13,13 @@ dd GRUB_CHECK_SUM
;===================
;Address_tag
GRUB_LOAD_BASE equ 0x01000000 ;1MB
GRUB_ADDRESS_TAG_SIZE equ GRUB_ADDRESS_TAG_END - GRUB_HEADER_START
GRUB_ADDRESS_TAG_SIZE equ GRUB_ADDRESS_TAG_END - GRUB_ADDRESS_TAG_START
GRUB_ADDRESS_TAG_START:
dw 0x2 ;type=2
dw 0x0 ;flag=0
dd GRUB_ADDRESS_TAG_SIZE; size
dd 0; Since at the beginning of the file
dd GRUB_LOAD_BASE
dd GRUB_HEADER_START; Since at the beginning of the file
dd GRUB_ENTRY
dd 0 ;load end
dd 0 ;bss
GRUB_ADDRESS_TAG_END:
@ -63,11 +62,15 @@ SLCT_CODE_0 equ DESC_FLAT_C - DESC_VOID
SLCT_GRAPH_0 equ DESC_GRAPH - DESC_VOID
SLCT_DATA_0 equ DESC_FLAT_RW - DESC_VOID
DUMMY_MSG:
db 'Loaded by multiboot2!',0
;stack
times 1024 db 0
_KERNEL_STACK:
GRUB_ENTRY:
[BITS 32]
cli
cmp eax,GRUB_LOADED_FLAG
@ -85,16 +88,17 @@ lgdt [GDT_PTR]
jmp SLCT_CODE_0:Reload_CS
Reload_CS:
mov ax,cs
mov ss,ax
mov ax,SLCT_DATA_0
mov ss,ax
mov ds,ax
mov es,ax
mov fs,ax
mov ax,SLCT_GRAPH_0
mov gs,ax
push ebx
push DUMMY_MSG
call _printf
add esp,4
_printf:
;void printf(char* str)
@ -112,11 +116,12 @@ xor ecx,ecx
mov al,byte [ds:edi]
cmp al,0 ;0 ended
je .end
mov byte [es:esi],al
mov byte [gs:esi],al
inc esi
mov byte [es:esi],0xFF
mov byte [gs:esi],0xFF
inc edi
inc esi
jmp .begin
.end:
pop esi
pop edi

View File

@ -19,7 +19,7 @@ sudo losetup /dev/loop0 $KERNELIMG -o 1048576
sudo losetup /dev/loop1 $KERNELIMG
sudo mkfs.ext4 /dev/loop0
sudo mount /dev/loop0 /mnt
sudo grub-install --root-directory=/mnt --no-floppy /dev/loop1
sudo grub-install --root-directory=/mnt --no-floppy --recheck /dev/loop1
sudo grub-mkconfig -o /mnt/boot/grub/grub.cfg
sudo umount /mnt
sudo losetup -d /dev/loop0

12
OScript/mkiso Executable file
View File

@ -0,0 +1,12 @@
sudo rm HOS.iso
sudo nasm -f bin kernel_multiboot.asm -o kernel_multiboot.bin
sudo nasm -f bin kernel_multiboot2.asm -o kernel_multiboot2.bin
sudo mkdir temp_iso
sudo mkdir temp_iso/HOS
sudo mkdir temp_iso/boot
sudo mkdir temp_iso/boot/grub
sudo mv kernel_multiboot.bin temp_iso/HOS/kernel_multiboot.bin
sudo mv kernel_multiboot2.bin temp_iso/HOS/kernel_multiboot2.bin
sudo cp grub.cfg temp_iso/boot/grub/
sudo grub-mkrescue -o HOS.iso temp_iso
sudo rm -rf temp_iso

29
bochsrc.bxrc → bochs.bxrc Normal file → Executable file
View File

@ -1,24 +1,28 @@
# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, gameport=1
config_interface: win32config
display_library: nogui
memory: host=64, guest=64
display_library: win32
magic_break: enabled=1
memory: host=256, guest=512
romimage: file="C:\Program Files (x86)\Bochs-2.6.6/BIOS-bochs-latest"
vgaromimage: file="C:\Program Files (x86)\Bochs-2.6.6/VGABIOS-lgpl-latest"
boot: disk
boot: cdrom
floppy_bootsig_check: disabled=0
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="C:\Users\Oscar\Documents\HOS\HOS.img", mode=flat, cylinders=1024, heads=4, spt=32, model="HOS", biosdetect=auto, translation=auto
ata0-master: type=cdrom, path="C:\Users\Oscar\Desktop\HOS.iso", status=inserted, model="Generic 1234", biosdetect=auto
ata0-slave: type=none
ata1: enabled=0
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=none
ata1-slave: type=none
ata2: enabled=0
ata3: enabled=0
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=5
cpu: count=1, ips=4000000, model=bx_generic, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="Generic", brand_string="Generic CPU"
cpuid: mmx=1, apic=xapic, simd=sse3, sse4a=0, misaligned_sse=0, sep=1, movbe=0, adx=0
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
cpuid: mmx=1, apic=xapic, simd=sse2, sse4a=0, misaligned_sse=0, sep=1, movbe=0, adx=0
cpuid: aes=0, sha=0, xsave=0, xsaveopt=0, x86_64=1, 1g_pages=0, pcid=0, fsgsbase=0
cpuid: smep=0, smap=0, mwait=1, vmx=1
print_timestamps: enabled=0
@ -29,10 +33,17 @@ clock: sync=none, time0=local, rtc_sync=0
# no loader
log: -
logprefix: %t%e%d
debug: action=ignore, pci=report
debug: action=ignore
info: action=report
error: action=report
panic: action=ask
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
sound: driver="default", waveout=none, wavein=none
speaker: enabled=1, mode=sound
parport1: enabled=1, file=none
parport2: enabled=0
com1: enabled=1, mode=null
com2: enabled=0
com3: enabled=0
com4: enabled=0

49
bochsdbg.bxrc Executable file
View File

@ -0,0 +1,49 @@
# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, gameport=1
config_interface: win32config
display_library: win32, options="gui_debug"
magic_break: enabled=1
memory: host=256, guest=512
romimage: file="C:\Program Files (x86)\Bochs-2.6.6/BIOS-bochs-latest"
vgaromimage: file="C:\Program Files (x86)\Bochs-2.6.6/VGABIOS-lgpl-latest"
boot: cdrom
floppy_bootsig_check: disabled=0
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=cdrom, path="C:\Users\Oscar\Desktop\HOS.iso", status=inserted, model="Generic 1234", biosdetect=auto
ata0-slave: type=none
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=none
ata1-slave: type=none
ata2: enabled=0
ata3: enabled=0
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=5
cpu: count=1, ips=4000000, model=bx_generic, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
cpuid: mmx=1, apic=xapic, simd=sse2, sse4a=0, misaligned_sse=0, sep=1, movbe=0, adx=0
cpuid: aes=0, sha=0, xsave=0, xsaveopt=0, x86_64=1, 1g_pages=0, pcid=0, fsgsbase=0
cpuid: smep=0, smap=0, mwait=1, vmx=1
print_timestamps: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0
clock: sync=none, time0=local, rtc_sync=0
# no cmosimage
# no loader
log: -
logprefix: %t%e%d
debug: action=ignore
info: action=report
error: action=report
panic: action=ask
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
sound: driver="default", waveout=none, wavein=none
speaker: enabled=1, mode=sound
parport1: enabled=1, file=none
parport2: enabled=0
com1: enabled=1, mode=null
com2: enabled=0
com3: enabled=0
com4: enabled=0