Crée un programme bootable sans OS (kernel? )
Fermé
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
-
31 août 2012 à 14:00
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 sept. 2012 à 15:29
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 sept. 2012 à 15:29
A voir également:
- Crée un programme bootable sans OS (kernel? )
- Clé bootable windows 10 - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Reinstaller mac os - Guide
- Comment créer un groupe whatsapp - Guide
9 réponses
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
31 août 2012 à 15:57
31 août 2012 à 15:57
des réponse là :
https://forums.commentcamarche.net/forum/affich-25370544-systeme-d-exploitation
En fait, tu veux faire un OS. Les langages que tu cites conviennent tous.
https://forums.commentcamarche.net/forum/affich-25370544-systeme-d-exploitation
En fait, tu veux faire un OS. Les langages que tu cites conviennent tous.
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
Modifié par jisisv le 1/09/2012 à 02:39
Modifié par jisisv le 1/09/2012 à 02:39
Assembleur pour le chargeur et C pour le reste.
Tu peux regarder les sources des noyaux historiques de Linux et de Minix.
Tu peux ensuite tester ton code sur une machine virtuelle Qemu, VirtualBox etc..
Tu peux également regarder des système du genre AtheOS .
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
Tu peux regarder les sources des noyaux historiques de Linux et de Minix.
Tu peux ensuite tester ton code sur une machine virtuelle Qemu, VirtualBox etc..
Tu peux également regarder des système du genre AtheOS .
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
Pierrecastor
Messages postés
41466
Date d'inscription
mercredi 5 novembre 2003
Statut
Modérateur
Dernière intervention
5 avril 2024
4 131
31 août 2012 à 16:04
31 août 2012 à 16:04
Salut
Généralement, les noyaux sont codée en C, c'est le cas de linux en tout cas.
Si tu veut te faire une idée :
https://www.kernel.org/
Pour les source de linux, mais bon, ça fait quand même 77Mo de sources. Il me semble qu'il y à un noyau minimaliste, mais je ne sais pas ou le trouver.
En plus simple (je pense) tu a aussi les source de freeDOS :
https://sourceforge.net/projects/freedos/
Généralement, les noyaux sont codée en C, c'est le cas de linux en tout cas.
Si tu veut te faire une idée :
https://www.kernel.org/
Pour les source de linux, mais bon, ça fait quand même 77Mo de sources. Il me semble qu'il y à un noyau minimaliste, mais je ne sais pas ou le trouver.
En plus simple (je pense) tu a aussi les source de freeDOS :
https://sourceforge.net/projects/freedos/
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
31 août 2012 à 16:17
31 août 2012 à 16:17
merci pour vos reponses je regarde une os ouais mais simpliste ( pas d'interface graphique juste des commandes je souhaiterais une reponse precises assembleur ou c ?? je maitrise un peu le c++ ( grace a l'arduino =) )
a bientot j'espere =)
a bientot j'espere =)
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
31 août 2012 à 16:20
31 août 2012 à 16:20
apparament c'est le MBR qui lance le programme ? une idée pour le modifier ou l'editer ?
Pierrecastor
Messages postés
41466
Date d'inscription
mercredi 5 novembre 2003
Statut
Modérateur
Dernière intervention
5 avril 2024
4 131
31 août 2012 à 16:21
31 août 2012 à 16:21
C, je pense que tu ne t'en sortirait pas en assembleur.
Pour le MBR, aucune idée, il va falloir travailler sur l'architecture système d'un PC, tu à de bon dossier sur CCM.
Pour le MBR, aucune idée, il va falloir travailler sur l'architecture système d'un PC, tu à de bon dossier sur CCM.
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
31 août 2012 à 16:43
31 août 2012 à 16:43
sachant que linux est gratuit ? si je telecharge un noyau ( le plus leger ) puis je le modifié ? est une bonne idée plutot que de partir a zero ? des idées de noyau leger ? ( android ,ubuntu ,debian ,fedora ?) merci =)
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
31 août 2012 à 16:46
31 août 2012 à 16:46
un noyau sa implique pagination multitaches ? etc non ? ...
Pierrecastor
Messages postés
41466
Date d'inscription
mercredi 5 novembre 2003
Statut
Modérateur
Dernière intervention
5 avril 2024
4 131
31 août 2012 à 16:54
31 août 2012 à 16:54
Il est plus que gratuit, il est libre, donc oui, tu peut le modifier, les 4 liberté du logiciel libre :
la liberté d'exécuter le programme, pour tous les usages ;
la liberté d'étudier le fonctionnement du programme et de l'adapter à ses besoins ;
la liberté de redistribuer des copies du programme (ce qui implique la possibilité aussi bien de donner que de vendre des copies) ;
la liberté d'améliorer le programme et de distribuer ces améliorations au public, pour en faire profiter toute la communauté.
Par contre, ce n'est pas forcement léger niveau code, surtout, ça fait des milliers (millions ?) de ligne de code.
Par contre, tu fait une confusion, linux est le noyau, il est commun à android, ubuntu, debian et fedora. Le site kernel.org te donne accès au code de ce noyau.
Par contre, pour ce qui est de partir à 0 ou non, je ne sais pas.
Mais je te conseillerait déjà de bien te documenter sur l'histoire des OS et sur l'architecture matériel d'un PC, ça me semble un préalable avant d'aller plus loin.
la liberté d'exécuter le programme, pour tous les usages ;
la liberté d'étudier le fonctionnement du programme et de l'adapter à ses besoins ;
la liberté de redistribuer des copies du programme (ce qui implique la possibilité aussi bien de donner que de vendre des copies) ;
la liberté d'améliorer le programme et de distribuer ces améliorations au public, pour en faire profiter toute la communauté.
Par contre, ce n'est pas forcement léger niveau code, surtout, ça fait des milliers (millions ?) de ligne de code.
Par contre, tu fait une confusion, linux est le noyau, il est commun à android, ubuntu, debian et fedora. Le site kernel.org te donne accès au code de ce noyau.
Par contre, pour ce qui est de partir à 0 ou non, je ne sais pas.
Mais je te conseillerait déjà de bien te documenter sur l'histoire des OS et sur l'architecture matériel d'un PC, ça me semble un préalable avant d'aller plus loin.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Une distribution de très petite taille qui permet de créer facilement des isos personnalisés, donc tu peux te familiariser avec les différents composants d'un os qui fonctionne et pourquoi pas modifier remplacer ou intégrer un module que tu écris
http://www.slitaz.org/fr/doc/releases/1.0/relnotes.fr.html
Une distribution de très petite taille qui permet de créer facilement des isos personnalisés, donc tu peux te familiariser avec les différents composants d'un os qui fonctionne et pourquoi pas modifier remplacer ou intégrer un module que tu écris
http://www.slitaz.org/fr/doc/releases/1.0/relnotes.fr.html
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
31 août 2012 à 21:56
31 août 2012 à 21:56
merci de vos reponses mais pour le moment je me concentre sur mes recherches pour comprendre le fonctionnement du MBR je souhaiterais avoir votre avis sur
les tutoriels presentes dans mon lien precedent
les tutoriels presentes dans mon lien precedent
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
3 sept. 2012 à 08:55
3 sept. 2012 à 08:55
As tu vu ça : https://systeme.developpez.com/cours/#C2
Je ne retrouve plus le source, mais la MBR, c'est juste un morceau du disque où l'ordinateur va chercher pour booter. Il faut donc écrire dans cette zone ton amorce (programme très particulier qui doit respecter certaines spécification, notamment de taille). Il existe des logiciels qui permettent d'écrire dans cette zone.
Sinon, je pense que le mieux c'est de repartir d'un code existant : tu apprends, autant ne pas perdre du temps à réinventer la roue. Le but de l'OS Minix est l'enseignement, il me semble donc tout indiquer pour débuter.
Bonne chance.
Je ne retrouve plus le source, mais la MBR, c'est juste un morceau du disque où l'ordinateur va chercher pour booter. Il faut donc écrire dans cette zone ton amorce (programme très particulier qui doit respecter certaines spécification, notamment de taille). Il existe des logiciels qui permettent d'écrire dans cette zone.
Sinon, je pense que le mieux c'est de repartir d'un code existant : tu apprends, autant ne pas perdre du temps à réinventer la roue. Le but de l'OS Minix est l'enseignement, il me semble donc tout indiquer pour débuter.
Bonne chance.
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
3 sept. 2012 à 10:49
3 sept. 2012 à 10:49
merci pour cette source tres utile , j'ai fini de faire le bootloader et ca marche ( en assembleur c'etait pas de la tarte^^ ) maintenant je n'ai plus besoin de l'assembleur seulement du "C" merci pour votre aide et a tres vite =)
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
4 sept. 2012 à 08:09
4 sept. 2012 à 08:09
bonjour , apres avoir crée mon bootloader en ASM ,je me suis mis au noyaux en c grace a de trés bon tuto je suis arrivé au multitache et la probleme lors de la compil j'obtiens une erreur bizarre (compilateur gcc ) sur ubuntu :
ps : j'utilise un makefile
.................................................................................................................................
make -C boot
make[1]: entrant dans le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/boot »
nasm -f bin -o bootsect bootsect.asm ;
make[1]: quittant le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/boot »
make -C kern
make[1]: entrant dans le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/kern »
gcc -Wall -c -o kernel.o kernel.c
gcc -Wall -c -o screen.o screen.c
gcc -Wall -c -o lib.o lib.c
gcc -Wall -c -o gdt.o gdt.c
gcc -Wall -c -o idt.o idt.c
gcc -Wall -c -o interrupt.o interrupt.c
nasm -f elf -o int.o int.asm
gcc -Wall -c -o pic.o pic.c
gcc -Wall -c -o syscalls.o syscalls.c
gcc -Wall -c -o mm.o mm.c
gcc -Wall -c -o printk.o printk.c
gcc -Wall -c -o process.o process.c
gcc -Wall -c -o schedule.o schedule.c
nasm -f elf -o sched.o sched.asm
ld --oformat binary -Ttext 1000 kernel.o screen.o lib.o gdt.o idt.o interrupt.o int.o pic.o syscalls.o mm.o printk.o process.o schedule.o sched.o -o kernel
printk.o: In function 'printk':
printk.c:(.text+0x35d): undefined reference to '__stack_chk_fail'
make[1]: *** [kernel] Erreur 1
make[1]: quittant le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/kern »
make: *** [kernel] Erreur 2
.................................................................................................................................
"undefined reference to '__stack_chk_fail'" apparament c'est une erreur causée par gcc qui, pour certaines versions, ajoute par défaut un "canari" dans la pile utilisateur lors de chaque appel de fonction . Pour désactiver ce comportement, il suffit de lui ajouter l'option -fno-stack-protector. (ma question est ou ecrire " -fno-stack-protector " ? dans le makefile ? a quel endroit ? par avance je vous remercie =)
makefile:
-----------------------------------------------------------------------------------------------------------------------------
OBJ=floppyA
all: $(OBJ)
floppyA: bootsect kernel
cat boot/bootsect kern/kernel /dev/zero | dd of=floppyA bs=512 count=2880
bootsect:
make -C boot
kernel:
make -C kern
clean:
rm -f $(OBJ) *.o bochs.log
make -C boot clean
make -C kern clean
------------------------------------------------------------------------------------------------------------------------------
ps : j'utilise un makefile
.................................................................................................................................
make -C boot
make[1]: entrant dans le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/boot »
nasm -f bin -o bootsect bootsect.asm ;
make[1]: quittant le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/boot »
make -C kern
make[1]: entrant dans le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/kern »
gcc -Wall -c -o kernel.o kernel.c
gcc -Wall -c -o screen.o screen.c
gcc -Wall -c -o lib.o lib.c
gcc -Wall -c -o gdt.o gdt.c
gcc -Wall -c -o idt.o idt.c
gcc -Wall -c -o interrupt.o interrupt.c
nasm -f elf -o int.o int.asm
gcc -Wall -c -o pic.o pic.c
gcc -Wall -c -o syscalls.o syscalls.c
gcc -Wall -c -o mm.o mm.c
gcc -Wall -c -o printk.o printk.c
gcc -Wall -c -o process.o process.c
gcc -Wall -c -o schedule.o schedule.c
nasm -f elf -o sched.o sched.asm
ld --oformat binary -Ttext 1000 kernel.o screen.o lib.o gdt.o idt.o interrupt.o int.o pic.o syscalls.o mm.o printk.o process.o schedule.o sched.o -o kernel
printk.o: In function 'printk':
printk.c:(.text+0x35d): undefined reference to '__stack_chk_fail'
make[1]: *** [kernel] Erreur 1
make[1]: quittant le répertoire « /home/piere/Documents/pjboxkernelbuild/floppy/MultiTask/kern »
make: *** [kernel] Erreur 2
.................................................................................................................................
"undefined reference to '__stack_chk_fail'" apparament c'est une erreur causée par gcc qui, pour certaines versions, ajoute par défaut un "canari" dans la pile utilisateur lors de chaque appel de fonction . Pour désactiver ce comportement, il suffit de lui ajouter l'option -fno-stack-protector. (ma question est ou ecrire " -fno-stack-protector " ? dans le makefile ? a quel endroit ? par avance je vous remercie =)
makefile:
-----------------------------------------------------------------------------------------------------------------------------
OBJ=floppyA
all: $(OBJ)
floppyA: bootsect kernel
cat boot/bootsect kern/kernel /dev/zero | dd of=floppyA bs=512 count=2880
bootsect:
make -C boot
kernel:
make -C kern
clean:
rm -f $(OBJ) *.o bochs.log
make -C boot clean
make -C kern clean
------------------------------------------------------------------------------------------------------------------------------
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
4 sept. 2012 à 08:22
4 sept. 2012 à 08:22
Salut.
Il faudrait que tu apprennes à compiler aussi :-p
Petite explication :
Dans le makefile que tu donnes tu vois qu'il n'y a aucune information de compilation (enfin, quand tu sais compiler tu le vois).
Dans les messages d'erreur, tu vois que la dernière commande avant l'erreur est "make -C kern". En te reportant au "man make" (si tu ne connais pas "man" dit le car c'est l'outils indispensable de tout programmeur débutant), tu vois que l'option "-C" veux dire changement de répertoire et utilisation de makefile. Si tu veux ajouter ton option, il faut donc probablement modifier le fichier kern/makefile, et plus précisément la ligne relative à l'édition des liens (car on voit que c'est "ld" qui retourne l'erreur).
Il faudrait que tu apprennes à compiler aussi :-p
Petite explication :
Dans le makefile que tu donnes tu vois qu'il n'y a aucune information de compilation (enfin, quand tu sais compiler tu le vois).
Dans les messages d'erreur, tu vois que la dernière commande avant l'erreur est "make -C kern". En te reportant au "man make" (si tu ne connais pas "man" dit le car c'est l'outils indispensable de tout programmeur débutant), tu vois que l'option "-C" veux dire changement de répertoire et utilisation de makefile. Si tu veux ajouter ton option, il faut donc probablement modifier le fichier kern/makefile, et plus précisément la ligne relative à l'édition des liens (car on voit que c'est "ld" qui retourne l'erreur).
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
4 sept. 2012 à 08:39
4 sept. 2012 à 08:39
j'avoue ne rien savoir a propos de makefile j'ai decouvert ce truc hier (lol) je trouve sa pratique donc sans reflechir je fesais mes petits melange au début sa marcher mais maintenant...^^
plus sérieusement voici le makefile du dossier kern ( j'ai cru comprendre que c'est ici que ca se passe )
----------------------------------------------------------------------------------------------------------------------------------
OBJ=kernel
CC=gcc -Wall
all: $(OBJ)
kernel: kernel.o screen.o lib.o gdt.o idt.o interrupt.o int.o pic.o syscalls.o mm.o printk.o process.o schedule.o sched.o
ld --oformat binary -Ttext 1000 $^ -o $@
int.o: int.asm
nasm -f elf -o $@ $^
sched.o: sched.asm
nasm -f elf -o $@ $^
.o: .c
$(CC) -c $^
clean:
rm -f $(OBJ) *.o
---------------------------------------------------------------------------------------------------------------------------------merci de votre aide =)
plus sérieusement voici le makefile du dossier kern ( j'ai cru comprendre que c'est ici que ca se passe )
----------------------------------------------------------------------------------------------------------------------------------
OBJ=kernel
CC=gcc -Wall
all: $(OBJ)
kernel: kernel.o screen.o lib.o gdt.o idt.o interrupt.o int.o pic.o syscalls.o mm.o printk.o process.o schedule.o sched.o
ld --oformat binary -Ttext 1000 $^ -o $@
int.o: int.asm
nasm -f elf -o $@ $^
sched.o: sched.asm
nasm -f elf -o $@ $^
.o: .c
$(CC) -c $^
clean:
rm -f $(OBJ) *.o
---------------------------------------------------------------------------------------------------------------------------------merci de votre aide =)
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
4 sept. 2012 à 09:06
4 sept. 2012 à 09:06
ça doit en effet être là, et plus spécifiquement cette ligne :
ld --oformat binary -Ttext 1000 $^ -o $@
ajoute ton option :
ld --oformat binary -Ttext 1000 $^ -o $@ -fno-stack-protector
ld --oformat binary -Ttext 1000 $^ -o $@
ajoute ton option :
ld --oformat binary -Ttext 1000 $^ -o $@ -fno-stack-protector
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
4 sept. 2012 à 09:14
4 sept. 2012 à 09:14
j'obtiens cette erreur
ld: -f may not be used without -shared
make[1]: *** [kernel] Erreur 1
make[1]: quittant le répertoire « /home/piere/Documents/pjboxkernelbuild/MultiTask/kern »
make: *** [kernel] Erreur 2
--shared ?? ou ca ??
un peu perdu ( je connais le C ) mais tres peu gcc compiler ( avant j'etais sur win mais ca c'etait avant ) =) merci par avance
ld: -f may not be used without -shared
make[1]: *** [kernel] Erreur 1
make[1]: quittant le répertoire « /home/piere/Documents/pjboxkernelbuild/MultiTask/kern »
make: *** [kernel] Erreur 2
--shared ?? ou ca ??
un peu perdu ( je connais le C ) mais tres peu gcc compiler ( avant j'etais sur win mais ca c'etait avant ) =) merci par avance
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
4 sept. 2012 à 11:03
4 sept. 2012 à 11:03
ha...
Je ne connais pas toutes ces options. Mais en relisant ce que tu as écris, il est possible qu'en fait ce soit dans les instructions "nasm" qu'il faille ajouter l'option. N'oublie pas de supprimer tout les .o avant de recompiler.
Je ne connais pas toutes ces options. Mais en relisant ce que tu as écris, il est possible qu'en fait ce soit dans les instructions "nasm" qu'il faille ajouter l'option. N'oublie pas de supprimer tout les .o avant de recompiler.
pjbox
Messages postés
28
Date d'inscription
vendredi 31 août 2012
Statut
Membre
Dernière intervention
12 août 2015
4 sept. 2012 à 15:13
4 sept. 2012 à 15:13
cela n'a rien a voir avec nasm , ( sa rajoute des msg d'erreur ) =/
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
4 sept. 2012 à 15:29
4 sept. 2012 à 15:29
Hou, ba ça devient compliqué alors...
https://gcc.gnu.org/legacy-ml/gcc-patches/2010-10/msg01308.html
il y a peut être des problèmes avec les bibliothèques liées par défaut.
Le code, ce n'est pas toi qui l'a écrit. Lit bien les instructions de compilation et reporte toi à la FAQ associé.
a tout hasard donne les erreurs dionnées par nasm.
Dernier essai, modifie la ligne de compilation ainsi :
j'avais mal lu le makefile, l'erreur semble venir d'un .c et non d'un .asm.
https://gcc.gnu.org/legacy-ml/gcc-patches/2010-10/msg01308.html
il y a peut être des problèmes avec les bibliothèques liées par défaut.
Le code, ce n'est pas toi qui l'a écrit. Lit bien les instructions de compilation et reporte toi à la FAQ associé.
a tout hasard donne les erreurs dionnées par nasm.
Dernier essai, modifie la ligne de compilation ainsi :
$(CC) -c $^ -fno-stack-protector
j'avais mal lu le makefile, l'erreur semble venir d'un .c et non d'un .asm.