Make -kernel for linux work with bochsbios
While trying to run -kernel with -bios pc-bios/pcbios.bin, I realized that I was actually writing data to %es, but only set up %ds to a 32-bit segment we want to write to. So at the end of the day the data hasn't actually been copied. Oops. So here's a fix to set ES instead of DS, which makes -kernel work with BOCHS bios again (and actually makes the code do the correct thing)! Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
0745eb1e43
commit
dc61b0dc5a
@ -102,11 +102,11 @@ copy_kernel:
|
|||||||
mov $1, %eax
|
mov $1, %eax
|
||||||
mov %eax, %cr0
|
mov %eax, %cr0
|
||||||
|
|
||||||
/* So we can set DS to a 32-bit segment */
|
/* So we can set ES to a 32-bit segment */
|
||||||
mov $0x10, %eax
|
mov $0x10, %eax
|
||||||
mov %eax, %ds
|
mov %eax, %es
|
||||||
|
|
||||||
/* We're now running in 16-bit CS, but 32-bit DS! */
|
/* We're now running in 16-bit CS, but 32-bit ES! */
|
||||||
|
|
||||||
/* Load kernel and initrd */
|
/* Load kernel and initrd */
|
||||||
read_fw_blob(FW_CFG_KERNEL)
|
read_fw_blob(FW_CFG_KERNEL)
|
||||||
@ -118,9 +118,9 @@ copy_kernel:
|
|||||||
mov $0, %eax
|
mov $0, %eax
|
||||||
mov %eax, %cr0
|
mov %eax, %cr0
|
||||||
|
|
||||||
/* DS = CS */
|
/* ES = CS */
|
||||||
mov %cs, %ax
|
mov %cs, %ax
|
||||||
mov %ax, %ds
|
mov %ax, %es
|
||||||
|
|
||||||
jmp boot_kernel
|
jmp boot_kernel
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user