Salut !
En ce moment je travaille sur un OS 16 bits très simple mais j'ai un problème que je n'arrive pas à comprendre : lorsque je lie mon bootloader et mon noyau, puis que je lance le système, seul le bootloader fonctionne, et je ne pense même pas qu'il arrive à passer le contrôle au noyau. Voici mon code :
Le bootloader :
Le noyau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 %define BASE 0x100 %define KSIZE 1 [BITS 16] [ORG 0x0] jmp start %include "brl/stdio.inc" start: ; Initialize segments mov ax, 0x07c0 mov ds, ax mov es, ax mov ax, 0x8000 mov ss, ax mov sp, 0xf000 mov [bootdrv], dl ; Print a character print ld_kernel print nl ; Load the kernel xor ax, ax int 0x13 push es mov ax, BASE mov es, ax mov bx, 0 mov ah, 2 mov al, KSIZE mov ch, 0 mov dl, 2 mov dh, 0 mov dl, [bootdrv] int 0x13 pop es ; Jump to the kernel jmp dword BASE:0 ; VARIABLES bootdrv db 0 ld_kernel db "Loading kernel...", 0 times 510-($-$$) db 0 dw 0xaa55
Le fichier de lancement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 [BITS 16] [ORG 0x1000] jmp start %include "brl/stdio.inc" start: ; Initialize registers mov ax, 0x100 mov ds, ax mov es, ax mov ax, 0x8000 mov ss, ax mov sp, 0xf000 ; Print a message print strd_kernel print nl ; VARIABLES strd_kernel db "Kernel started!", 0
Pour ce qui est des macros comme print, elles marchent parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #!/bin/bash # Create binaries nasm -f bin -o bin/boot.bin src/boot.asm nasm -f bin -o bin/kernel.bin src/kernel.asm # Create OS image cat bin/boot.bin bin/kernel.bin /dev/zero | dd of=bin/benix.img bs=512 count=2880 iflag=fullblock # Run with qemu qemu-system-x86_64 -drive format=raw,file=bin/benix.img
Donc voilà, si quelqu'un peut m'aider, merci !
(J'ai suivi le tutoriel de Pépin OS pour le bootloader)
Partager