IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Développer un programme pour le bootup du PC


Sujet :

C++

  1. #1
    Membre régulier Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Points : 78
    Points
    78
    Par défaut 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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu devrais t'adresser au forum approprie, celui qui conviendrait le mieux est surement celui d'asm. Sache que dans ton cas, il faudrait que tu batisse ton propre petit kernel qui prend lui meme en charge le materiel.

    Ou du moins que tu implemente les libirairies qui seront necessaires aux programmes que tu veux demarrer a partir de ta cle usb.

  3. #3
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    ce serait pas possible pour toi de demarrer un linux embarqué sur la clef, tu veut tout refaire?

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut 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.

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

  5. #5
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Mais n'a-t-on pas forcément besoin de l'ASM pour que le PC boote dessus?
    Sinon, comment faire pour que l'ordi boote sur un simple programme "hello world" rien qu'en C++?

  6. #6
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    Les compilateurs C/C++ vont produire du code pour un OS particulier.

    Il ne reste que l'assembleur et les fonctions du bios du PC qui sont utilisable.

  7. #7
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Merci

  8. #8
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    le noyeau linux n'est pas developpé en C?
    (dsl, HS)

    donc y'a une petite partie en assembleur sur laquelle est basé le noyeau?

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Le problème c'est que "hello world" ne va pas s'afficher tout seul. Normalement, c'est l'OS qui s'en charge en demandant à la carte graphique de dessiner les lettres... avec gestion de police etc...
    Sans OS, c'est à toi de le faire.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CGi
    Les compilateurs C/C++ vont produire du code pour un OS particulier.

    Il ne reste que l'assembleur et les fonctions du bios du PC qui sont utilisable.
    Faux, pas necessairement.

    En utilisant les options suivantes avec gcc, il est possible de compiler un binaire qui n'a pas besoin de rien d'autre que la machine pour fonctionner. A condition bien sur de ne pas utiliser std::cout ou n'importe quelle autre fonction qui demande un traitement par le OS (a moins de les avoir re-implementees).

    -fno-use-cxa-atexit -nostartfiles -nostdlib -fno-rtti -fno-exceptions -fno-builtin

  11. #11
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Quels sont les fonctions qui peuvent alors être utiliser?
    Et, comment lencer le programme, sans os? Il faudras imperativement passer par de l'assembleur non?

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut 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.

  13. #13
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut 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.

    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.

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par CGi
    Les compilateurs C/C++ vont produire du code pour un OS particulier.
    Les compilateurs génèrent du code pour une architecture. Il y a peu de choses qui dépendent de l'OS en dehors des bibliothèques.

    Il ne reste que l'assembleur et les fonctions du bios du PC qui sont utilisables.
    Le BIOS n'était pas utilisable une fois passé en mode 32 bits la dernière fois que j'ai regardé.

  15. #15
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par JC_Master
    Quels sont les fonctions qui peuvent alors être utiliser?
    Ce qui ne fait pas appel à l'OS. Mais dans ce contexte, tu vas en effet implémenter une partie d'un OS.

    Et, comment lencer le programme, sans os? Il faudras imperativement passer par de l'assembleur non?
    Un boot loader simple, c'est pas difficile à écrire. Puis utiliser grub est toujours une possibilité.

  16. #16
    Membre régulier Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Points : 78
    Points
    78
    Par défaut
    Merci beaucoup pour les conseils

    En partant j'élimine la solution de me faire mon propre mini OS.
    J'élimine aussi Flonix parce que c'est payant et jusqu'à date je suis à l'étape de test alors je ne veux pas dépenser trop d'argent... en plus que je ne sais pas comment programmer en C++ pour linux.

    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.

    Finalement contrôler l'audio et mettre du graphique serait trop difficile. Je vais donc me contenter d'un programme très simple. La seul chose que j'aurait besoins de savoir c'est si avec un programme qui fonctionne sur ce OS (si on appel ça comme ça) on peut contrôler un port de la carte maîtresse comme un port DB9 ou DB25 (port d'imprimante).

    Si je peux le faire, je me créerai un circuit électronique pour l'audio contrôlé par ce port. Alors je vais régler mon problème pour la carte audio. Pour ce qui est du graphique, est-ce que le seul moyen pour en afficher est de gosser avec du ascii?

    Autre question pour prendre de l'avance: un simple programme qu'on peut démarrer avec un disquette de démarrage Windows 98 (par exemple hello world), est-ce que c'est faisable à partir d'une fenêtre console de C++?

    Merci encore

  17. #17
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par deejay2221
    J'élimine aussi Flonix parce que c'est payant et jusqu'à date je suis à l'étape de test alors je ne veux pas dépenser trop d'argent... en plus que je ne sais pas comment programmer en C++ pour linux.
    Je comprends mal. Apres avoir envisage d'ecrire un OS, tu es rebute par apprendre a faire du C++ sous Linux ou par batir ta propre installation de Linux pour etre capable de la mettre sur une cle USB?

    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.
    Je ne sais pas si Windows 98 etait batit sur DOS 6.0 (j'ai quand meme quelques doutes, j'ai souvenir d'avoir achete DOS 6.0 dans le temps, j'ai jamais touche a Windows 98 ).

    Je suis certain que ca prend plus que 20 Ko.

    Finalement contrôler l'audio et mettre du graphique serait trop difficile. Je vais donc me contenter d'un programme très simple. La seul chose que j'aurait besoins de savoir c'est si avec un programme qui fonctionne sur ce OS (si on appel ça comme ça) on peut contrôler un port de la carte maîtresse comme un port DB9 ou DB25 (port d'imprimante).
    Avec DOS tu fais ce que tu veux. Mais il faut attaquer tres bas parfois (cad c'est presque comme ne pas avoir d'OS pour ce qui n'est pas gestion de fichier).

    Si je peux le faire, je me créerai un circuit électronique pour l'audio contrôlé par ce port. Alors je vais régler mon problème pour la carte audio. Pour ce qui est du graphique, est-ce que le seul moyen pour en afficher est de gosser avec du ascii?
    Avec DOS, comme sans OS, tu accedes a ce que tu veux, parfois avec un peu d'aide du BIOS mais pas mal de programmes de l'epoque n'utilisaient pas le BIOS, repute trop lent.

    Autre question pour prendre de l'avance: un simple programme qu'on peut démarrer avec un disquette de démarrage Windows 98 (par exemple hello world), est-ce que c'est faisable à partir d'une fenêtre console de C++?
    Je ne comprends pas la question.

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    http://fr.wikipedia.org/wiki/MS-DOS
    Windows 95 s'appuyait sur DOS 7, on peut supposer que Windows 98/Me aussi.

  19. #19
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut 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).

    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.

    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.

    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.

  20. #20
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Si quelqu'un veut partir sur la piste linux, ce lien peut éventuellement aider: http://www.informatimago.com/linux/e...ode-linux.html

Discussions similaires

  1. Réponses: 62
    Dernier message: 15/05/2015, 16h17
  2. Réponses: 1
    Dernier message: 18/05/2014, 17h20
  3. Réponses: 1
    Dernier message: 07/10/2010, 23h50
  4. Réponses: 0
    Dernier message: 11/02/2009, 22h39
  5. Votre avis : Quel langage de programmation pour développer ce programme ?
    Par julien.nasser dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 28/11/2008, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo