Bonsoir , svp , pour ne pas oubli� ce que j'ai vu , pourrais-je avoir les exercices ou les projets concernant la conception des syst�mes d'exploitation??
Merci...
Bonsoir , svp , pour ne pas oubli� ce que j'ai vu , pourrais-je avoir les exercices ou les projets concernant la conception des syst�mes d'exploitation??
Merci...
Salut , d�sol� pour le d�rangement ....
En fait je suis encore bloqu� sur un module concernant la gdt , ...
J'ai bien compris le principe , mais au niveau du code , je ne comprends pas grand chose....
Quelqu'un pourra t-il m'aider sur le code , la parite o� se trouve :l'initialisation du poiteur de la GDT??
....merci
Bonjour Mr , j'ai compris sagement votre cours sur comment concevoir son propre noyau.
Cependant , j'ai un souci sur la partie : "Ecrire un noyau en c"
En suivant votre principe de compilation , je me suis rendu compte que la compilation de votre cour se fait sur une architecture 32 bits , mais le mien est sur 64 bits... donc mes compilations � partir de ce niveau se d�roule avec plusieurs �checs .
S'il vous pla�t Mr , pourrez vous m'aidez ou me donner des indices pour que je puisse continuer votre cour ?
Merci
Un processeur 64 bits peut ex�cuter du code 32 bits.
Pour la compilation, un compilateur 64 bits g�n�rera du code 64 bits, mais pourra g�n�rer du 32 bits si on lui demande.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Salut tout le monde , j'ai un probleme au niveau de la sortie du message dans la m�moire video :
Je vous laisse admirez le code :
Code pour le secteur boot :
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 %define BASE_KERNEL 0x100 ;base du noyau %define KERNEL_SIZE_DRIVER 100 ;nombre de secteur à lire pour charger le noyau bits 16 org 0x0000 jmp start_bootsector %include "print_bootsector.INC" %include "load_kernel.INC" start_bootsector : mov ax, 0x07c0 cli mov ds, ax mov es , ax mov ax , 0x0000 mov ss , ax mov sp , 0xf000 sti mov si, msg_boot call print_boot mov si , msg_kernel call print_boot mov [bootdrv] , dl call get_status_drive ; initialisation du pointeur sur la GDT mov ax, gdtend ; calcule la limite de GDT mov bx, gdt sub ax, bx mov word [gdtptr], ax xor eax, eax ; calcule l'adresse lineaire de GDT xor ebx, ebx mov ax, ds mov ecx, eax shl ecx, 4 mov bx, gdt add ecx, ebx mov dword [gdtptr+2], ecx ; passage en modep cli lgdt [gdtptr] ; charge la gdt mov eax, cr0 or ax, 1 mov cr0, eax ; PE mis a 1 (CR0) jmp next next: mov ax, 0x10 ; segment de donne mov ds, ax mov fs, ax mov gs, ax mov es, ax mov ss, ax mov esp, 0x9F000 jmp dword 0x8:0x1000 ; reinitialise le segment de code msg_boot db 10,'Chargement du boot sans aucune verification' , 13 , 10 , 0 msg_kernel db 'Chargement du noyau sans aucune verification' ,13 ,10,0 bootdrv : db 0 gdt: db 0, 0, 0, 0, 0, 0, 0, 0 gdt_cs: db 0xFF, 0xFF, 0x0, 0x0, 0x0, 10011011b, 11011111b, 0x0 gdt_ds: db 0xFF, 0xFF, 0x0, 0x0, 0x0, 10010011b, 11011111b, 0x0 gdtend: ;-------------------------------------------------------------------- gdtptr: dw 0 ; limite dd 0 ; base ;-------------------------------------------------------------------- times 510-($-$$) db 0 db 0x55 db 0xAA
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 ;charger le secteur de kernel en memoire get_status_drive : xor ax , ax int 0x13 load_kernel : push es mov ax , BASE_KERNEL mov es , ax mov bx , 0 mov ah , 2 mov al , KERNEL_SIZE_DRIVER mov ch , 0 mov cl , 2 mov dh , 0 mov dl , [bootdrv] int 0x13 pop es ret
Bon � ce niveau , je ne vois aucun probl�me .
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 cld print_boot : push ax push bx aff : lodsb cmp al , 0; zero=end or str jz exit_print_boot ; get out mov ah, 0x0E mov bh, 0 mov bl , 0x0001 int 0x10 jmp aff exit_print_boot : pop bx pop ax ret
Maintenant , j'ai un certains cas :
le cas ou j'�cris sur la m�moire vid�o , tout ce passe bien , je donne un exemple :
l'autre cas , est au niveau du fait que je decide d'�crire dans la m�moire video en c :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 bits 32 mov byte [0xb8000] , 'H' mov byte [0xb8001] , 0x57 end : jmp end msg db 'premier message de chargement',13,10,0
on va l'appeler screen.c
Code C : 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 #include "types.h" static int kx = 0 ; static u8 *container ; static inline putchar(u8 c) { container = (u8*)0xb8000 ; container[kx] = c ; conainer[kx+1] = 0x57 ; kx +=2 ; } void print(char *s) { while(*s != 0) { putchar(*s) ;s++ ; } }
types.h :
Code C : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 #ifndef _I386_TYPE_ #define _I386_TYPE_ typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned char uchar; #endif
Maintenant regardons le kernel :
kernel.asm :
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 bits 32 extern print global _start _start : mov eax, msg push eax call print pop eax end : jmp end msg db 'premier message de chargement',13,10,0
Maintenant je lance le code shell pour les compilations :
Sur ce deuxi�me cas , rien ne s'affiche , je ne sais pas pourquoi .
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 gcc -m32 screen.c -o screen.o nasm -f elf32 -o kernel.o kernel.asm ld -m elf_i386 -Ttext 1000 kernel.o screen.o -o kernel nasm -f bin -o boot boot.asm cat boot kernel /dev/zero | dd of=floppyA bs=512 count=2880
Qulequ'un pourra m'aider ??![]()
Un GRAND merci � Michelizza pour ce magnifique tutorial !
Depuis un bon moment, je m'int�resse au fonctionnement du mode prot�g� du microprocesseur, et de la mani�re dont sont g�r�s les acc�s � la m�moire, les privil�ges et compagnie. Et l�, je tombe sur ce tuto...J'ai commenc� � le lire, et d�s le d�but, c'est passionnant !
![]()
Partager