Crée un programme bootable sans OS (kernel? )
pjbox
Messages postés
29
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, je suis agé de 16 ans en sti2d specialité SIN et passionne d'informatique j'aimerai
crée un programme sans interface graphique ( pour le moment ) permettant de manipuler le pc ( charger la ram , accelerer CPU afficher un simple message le tout sans os ( c'est a dire booter directement ) ma question est quel language , assembleur , c ,c++ ) par avance je vous remercie =)
crée un programme sans interface graphique ( pour le moment ) permettant de manipuler le pc ( charger la ram , accelerer CPU afficher un simple message le tout sans os ( c'est a dire booter directement ) ma question est quel language , assembleur , c ,c++ ) par avance je vous remercie =)
A voir également:
- Crée un programme bootable sans OS (kernel? )
- Cree un compte google - Guide
- Mac os 15 - Accueil - MacOS
- Comment créer un groupe whatsapp - Guide
- Reinstaller mac os - Guide
- Clé bootable windows 10 - Guide
9 réponses
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.
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)
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/
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 =)
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
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
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.
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
------------------------------------------------------------------------------------------------------------------------------
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).
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 =)
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
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.