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
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 =)



A voir également:

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
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.
1
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
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)
1
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
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/
0
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
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 =)
0
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
apparament c'est le MBR qui lance le programme ? une idée pour le modifier ou l'editer ?
0
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
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.
0
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
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 =)
0
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
un noyau sa implique pagination multitaches ? etc non ? ...
0
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
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.
0

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
0
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
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
0
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
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.
0
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
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 =)
0
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
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
------------------------------------------------------------------------------------------------------------------------------
0
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
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).
0
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
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 =)
0
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
ç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
0
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
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
0
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
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.
0
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
cela n'a rien a voir avec nasm , ( sa rajoute des msg d'erreur ) =/
0
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
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 :
$(CC) -c $^  -fno-stack-protector 

j'avais mal lu le makefile, l'erreur semble venir d'un .c et non d'un .asm.
0