Développer un programme pour le bootup du PC
Bonjours,
ceci est mon premier post, j'espere que vous comprendrai ce que je veux faire. C'est assez peu commun comme projet...
J'ai un projet pour les prochaines années:
Avoir un mini PC sans disque dur (donc pas de OS); il serait remplacé par une clé USB qui servirait de boot (comme une disquette de boot de windows 98... je sais que c'est possible de le faire).
Dessus je metterais un programme en C++ qui partirait en autorun.
Je voulais savoir si c'est faisable en C++ de développer un tel programme qui serait exécutable hors OS. Si oui, de quel façon dois-je m'y prendre?
Info: mon programme doit être capable d'afficher du graphique (bitmap ou autre format) pour les menus, doit pouvoir faire jouer des fichiers audios.
Je n'espère pas de réponse pour cette dernière partie. Je me contenterai de savoir si c'est faisable et quelle est la sorte de programme (console, windows forms...)
Merci en avance.
Jasmin
Re: Développer un programme pour le bootup du PC
Citation:
Envoyé par deejay2221
Dessus je metterais un programme en C++ qui partirait en autorun.
Je voulais savoir si c'est faisable en C++ de développer un tel programme qui serait exécutable hors OS.
Oui, à condition de coder toi même tout ce que fait l'OS, puisqu'il n'y en a pas.
Citation:
Info: mon programme doit être capable d'afficher du graphique (bitmap ou autre format) pour les menus, doit pouvoir faire jouer des fichiers audios.
soit dans ton cas, entre autre:
- gestion de la mémoire
- gestion du système de fichier
- gestion de la carte graphique
- gestion des images
- gestion d'une interface graphique
- gestion de la carte son
- gestion des fichiers audios
- recoder la bibliothèque standard C++
- ...
en gros, coder ton propre OS + le compilo. C'est plusieurs années de travail, pour un résultat qui risque d'être décevant.
A côté de ça, tu peux comme le suggère hansaplast personnaliser une distribution Linux existante, comme le font certains logiciels de backup. Y'a déjà des distrib qui bootent sur clé USB (Flonix...)
Re: Développer un programme pour le bootup du PC
Citation:
Envoyé par deejay2221
Je voulais savoir si c'est faisable en C++ de développer un tel programme qui serait exécutable hors OS. Si oui, de quel façon dois-je m'y prendre?
Rien qu'en C++, non. Il y a trois choses qui vont bloquer: le démarrage, la gestion des périphériques et la gestion des exceptions. Il y a moyen de s'arranger pour que la part de l'assembleur soit très faible.
Pour le démarrage il y a moyen de récupérer un programme tel que grub et lui laisser cette responsabilité.
Pour la gestion des périphériques, il doit y avoir moyen aussi de récupérer des choses de Linux/xBSD. Si j'ai bonne mémoire, il y a même un projet quelque part qui s'occupe de faire un découplage de ces drivers pour les rendre réutilisable facilement dans des OS expérimentaux. Tu ne dois apparemment pas être capable de faire grand chose: lire la clé USB, y récupérer des fichiers (j'ai l'impression que c'est un système de fichier FAT, quelque chose de bien connu et facile à lire, placer l'écran en mode graphique (c'est relativement facile, voir les frame buffer de linux) et gérer le son (là j'ai aucune expérience).
Pour les exceptions, tu peux t'en passer. Sinon, je ne sais pas si gcc permet toujours les traiter avec setjmp/longjmp ce qui serait peut-être la manière la plus simple. En dernier recours, tu peux regarder comment ça ce fait maintenant avec la gestion par table, c'est peut être plus facile que je ne le pense.
Naturellement, la manière la plus simple d'arriver au même effet, c'est d'utiliser une version minimale de linux. L'extrème dans ce genre c'est de remplacer le processus init par ton programme.
Re: Développer un programme pour le bootup du PC
Citation:
Envoyé par Aurelien.Regat-Barrel
en gros, coder ton propre OS + le compilo.
Le compilo c'est pas nécessaire. g++ conviendra très bien. Au pire en le configurant en compilateur croisé. Sous Linux ce ne doit même pas être nécessaire. Sous Windows je ne sais pas comment les exceptions sont traitées et je prescens des difficultés à cause des exceptions structurées mais je me trompe peut-être.
L'OS est quand même bien réduit. Pas de protection mémoire nécessaire, pas de gestion de processus, juste deux drivers (USB, carte son) et de quoi passer la carte graphique dans un mode adéquat (c'est pas dur, tous les programmes DOS le faisaient...) s'il ne veut pas profiter des accélérateurs.
Citation:
C'est plusieurs années de travail, pour un résultat qui risque d'être décevant.
Tout dépend de l'objectif. Si c'est d'avoir quelque chose qui fonctionne, un Linux minimal est une meilleure approche.
Si c'est comprendre la chaîne, ce peut être intéressant. C'est le genre de projet qu'on abandonne peut-être mais qu'on est content d'avoir entrepris. Enfin, je parle pour moi; c'est le sort de pas mal de mes projets perso: dès qu'il me semble qu'il n'y a plus de problèmes à résoudre, juste du travail il y en a un autre qui se met à m'intéresser plus et je le laisse tomber sans état d'âme et sans aucune frustration. Note qu'il faut en mener jusqu'au bout: au minimum pour se rendre compte qu'il ne faut pas être trop optimiste et acquérir l'expérience qui permet de dire qu'il n'y a en effet plus de gros problèmes conceptuels qui attendent.
Re: Développer un programme pour le bootup du PC
Citation:
Envoyé par Jean-Marc.Bourguet
Citation:
Envoyé par Aurelien.Regat-Barrel
en gros, coder ton propre OS + le compilo.
Le compilo c'est pas nécessaire. g++ conviendra très bien. Au pire en le configurant en compilateur croisé. Sous Linux ce ne doit même pas être nécessaire. Sous Windows je ne sais pas comment les exceptions sont traitées et je prescens des difficultés à cause des exceptions structurées mais je me trompe peut-être.
Oui je me suis projeté un peu loin (créer un compilo pour l'OS cible...). Mais il y a quand même pas mal de choses à recoder au niveau de l'outil de développement, pour la bibliothèque standard : affichage (cout, cin), allocation mémoire (new/delete).
Et y'a d'autres problèmes au niveau de l'édition de liens et de la mémoire. Les objets statiques ne seront pas construits (et détruits aussi), faut être prudent avec les fonctions virtuelles si on partage des objets entre process...
Pour les execeptions structurées, sous Windows / VC++ elles sont différenciées des exceptions standards C++ (le mécanisme est très différent), et les mots clés ne sont pas les même (__try...__catch...__finally).
Citation:
L'OS est quand même bien réduit. Pas de protection mémoire nécessaire, pas de gestion de processus, juste deux drivers (USB, carte son) et de quoi passer la carte graphique dans un mode adéquat (c'est pas dur, tous les programmes DOS le faisaient...) s'il ne veut pas profiter des accélérateurs.
Quand même. Le frame buffer en 32 bits c'est pas une sinécure, car le BIOS de la carte est en 16 bits, et faut l'utiliser en 32 bits protégé... Et surtout c'est du bas niveau. Faut aimer.
Citation:
Citation:
C'est plusieurs années de travail, pour un résultat qui risque d'être décevant.
Tout dépend de l'objectif. Si c'est d'avoir quelque chose qui fonctionne, un Linux minimal est une meilleure approche.
C'était le but de cette réponse provoquante : l'encourager à s'appuyer au maximum sur l'existant, auquel cas ça reste pas simple pour autant. Sinon, s'il part "from scratch", c'est insurmontable à mon avis, et surtout c'est un manginique gaspillage d'énergie. On y gagne beaucoup plus à étudier et enrichir un système existant comme Linux.
Citation:
Il me reste la solution de me mettre DOS 6.0 sur ma clé (la même chose qu'il y a sur un disquette de démarrage de Windows 98 )... ça prend a peu près 20 Ko d'espace je crois. Je vais coder un exe.
Regarde du côté de DJGPP, et de Allegro. Tu pourras gérer le graphisme (y'a même des GUI il me semble), en 32 bits. Je me demande même s'il n'y a pas des libs sonores.
Je pense que ça devrait te convenir.