Answer the question
In order to leave comments, you need to log in
What needs to be changed in the bootloader to load the C kernel?
there is a working kernel in C, it works on qemu-system-i386 -kernel, but with -kernel it does not allow using vbe / vesa, I found a bootloader, but I can’t figure out what needs to be changed so that it starts the kernel, KERNEL OFFSET also changed the number of sectors to be loaded, Here is the code for the unmodified bootloader:
[org 0x7c00]
KERNEL_OFFSET equ 0x1000 ; The same one we used when linking the kernel
mov [BOOT_DRIVE], dl ; Remember that the BIOS sets us the boot drive in 'dl' on boot
mov bp, 0x8000 ; 0x8000
mov sp, bp
mov bx, MSG_16BIT_MODE
call print16
call print16_nl
call load_kernel ; read the kernel from disk
call switch_to_32bit ; disable interrupts, load GDT, etc. Finally jumps to 'BEGIN_PM'
jmp $ ; Never executed
%include "boot/print-16bit.asm"
%include "boot/print-32bit.asm"
%include "boot/disk.asm"
%include "boot/gdt.asm"
%include "boot/switch-to-32bit.asm"
[bits 16]
load_kernel:
mov bx, MSG_LOAD_KERNEL
call print16
call print16_nl
mov bx, KERNEL_OFFSET ; Read from disk and store in 0x1000
mov dh, 1 ;31 or 54
mov dl, [BOOT_DRIVE]
call disk_load
ret
[bits 32]
BEGIN_32BIT:
mov ebx, MSG_32BIT_MODE
call print32
call KERNEL_OFFSET ; Give control to the kernel
jmp $ ; Stay here when the kernel returns control to us (if ever)
BOOT_DRIVE db 0 ; It is a good idea to store it in memory because 'dl' may get overwritten
MSG_16BIT_MODE db "Started in 16-bit Real Mode", 0
MSG_32BIT_MODE db "Landed in 32-bit Protected Mode", 0
MSG_LOAD_KERNEL db "Loading kernel into memory", 0
; padding
times 510 - ($-$$) db 0
dw 0xaa55
ENTRY(_start)
SECTIONS
{
loaded at by the bootloader. */
. = 1M;
.text BLOCK(4K) : ALIGN(4K)
{
*(.multiboot)
*(.text)
}
.rodata BLOCK(4K) : ALIGN(4K)
{
*(.rodata)
}
.data BLOCK(4K) : ALIGN(4K)
{
*(.data)
}
.bss BLOCK(4K) : ALIGN(4K)
{
*(COMMON)
*(.bss)
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question