Comment programmer un nouveau pilote ? - ASM - Programmation
Marsh Posté le 23-11-2004 à 00:59:07
Tu crées une politique au niveau du noyau (un niveau d'abstraction sur le matériel qui décrit comment telle et telle fonctionnalité doivent etre utilisée et une API).
La programmation du pilote consistera à permettre au noyau d'interagir avec le pilote, c'est le noyau qui va le piloter le hardware, le code du pilote doit lui donner les moyens (les méchanisme) pour le faire (support pour les opérations synchones ou asynchrones, exploiter toutes les possibilités du matériel...). Les fonctions du pilotes sont définis via une API fournit par le noyau (des routines standards) qui seront surchargées dans le code du pilote.
Marsh Posté le 23-11-2004 à 02:03:37
Ok, mais je voulais plutôt savoir au niveau du fonctionnement de la programmation. J'imagine qu'il faut avoir les specs hardware du périphérique en question ? Mais de là, comment on programme en asm pour que le code que l'on crée inter-réagit avec le matériel ?
Par exemple, si je voulais exploiter des fonctions d'une carte vidéo, je devrais dabord communiquer avec la carte, mais cela se fait de quelle façon ? Ce que je comprends, jusqu'à présent, c'est que le cpu exécute des instructions, mais comment envoyer des données par le réseau de bus pour que les données arrivent sur le port AGP pour que la carte reçoive ces données ?
Marsh Posté le 23-11-2004 à 04:32:52
Pour piloter le matériel tu as plusieurs options, memory mapped ou port mapped.
En gros memory mapped, le hardware est alloué une plage d'adresse dans l'espace d'adressage. Communiquer avec le hardware consiste dans ce cas là à lire et à écrire dans ces adresses comme tu le fais avec de la mémoire classique. Sauf que chaque écriture/lecture peut provoquer une action/réponse du hardware en question.
Port mapped, tu as des instructions spéciales (IN and OUT par exemple) pour écrire dans les registres hardware ou lancer des fonctions de librairie. Ces instructions ne sont pas définis dans les langages standards comme le C++ et donc nécéssitent le plus souvent de l'assembleur (quoi que ça devait être possible d'avoir des équivalents depuis le basic de pas mal de machines anciennes).
Bien évidemment pour connaitre ces adresses et leurs effets il faut la doc du hardware en question. Et cela ne représente que la partie émergée des hardware les plus complexes. Certains hardware ont accès à un véritable langage de programmation et les registres exposés par port mapped ou memory mapped I/O ne sont là que pour les fonctions de base.
Marsh Posté le 23-11-2004 à 04:47:22
Perso je n'ai jamais programmé à aussi bas niveau mais je crois que tu peux trouver des infos générales ici:
http://www.vesa.org/vbe3.pdf
c'est le standard VBE par l'organisme vesa qui regroupe la plupart des constructeurs de carte graphique. Ce n'est pas une interface qui donne accès aux dernieres fonctionalités des cartes graphiques (pas de 3D) mais qui est généralement la seule option quand on n'a pas d'autres infos sur le hardware. Les interfaces utilisées dans les drivers sont top secret, faut pas trop te faire d'illusion .
Marsh Posté le 23-11-2004 à 10:03:51
Juste une petite précision mon petit Nermal, tu dis vouloir créer ton os.
Je te souhaite bien du plaisir car je suis en train de faire la meme chose et je sais ce que ça implique. Quand à vouloir dialoguer avec ta carte video en ASM, je te conseille d'abord d'essayer de comprendre le fonctionne ment VGA en mode réél avant de passer au standard VBE. Ensuite essaye les fonction VESA (VBE) en mode réél puis en mode protégé. Maintenant si tu cherche a faire ça ailleurs que dans ton propre OS a mon avis c'est mission impossible !
Marsh Posté le 23-11-2004 à 18:41:12
Ok, oui je suis conscient que ce n'est pas de la petite bière, mais je suis curieux
Mais puisque il y a des concepts top secret comment linux et windows font pour fonctionner ??
Marsh Posté le 23-11-2004 à 19:13:56
ben pour Windows c'est simple c'est le constructeur lui meme qui écrit le driver donc pas de problème de divulgation de secret.
Pour ce qui est de Linux tout dépend de la bonne volonté du constructeur. Par exemple Nvidia écrit ses drivers lui-meme et seule une petite partie est open source mais ils sont en général à jour par rapport aux drivers Windows. Au contraire ATI écrit aussi ses drivers pour cartes récentes mais n'y consacre pas de ressources donc ses fonctionalités sont très limitées. Ils proposent des drivers open source pour leurs cartes les plus anciennes. Si pas de constructeur et pas de bonne volonté ou de divulgation alors il n'y a plus qu'à programmer en mode VESA, ou autre.
Marsh Posté le 23-11-2004 à 20:08:37
Je vois, alors pour quelqu'un qui fait un nouveau OS, soit sont OS est inutile faute de drivers disponibles. Soit il passe un accord avec les principaux constructeurs ?
Marsh Posté le 23-11-2004 à 20:26:07
LeGreg a écrit : Perso je n'ai jamais programmé à aussi bas niveau mais je crois que tu peux trouver des infos générales ici: |
Le problème des VBE c'est que c'est du BIOS extension, donc il faut pas mal de code derrière pour faire la conversion mode protégé/mode réél. C'est ce qui a empéché Linux pendant pas mal de temps de s'en servir (je pense au début des années 90).
Le fait que les programmes utilisant Watcom (via Pmode/W ou DOS/4G) y arriv(ai)ent tiens au fait que justement, les DOS extenders permettaient ce genre de péripéties.
Enfin, les VBE ne sont bien sûr plus trop d'actualité, vu que c'est via le groupe OpenGL ou le groupe DirectX (!) que se fait la standardisation des fonctions modernes des cartes graphiques.
Mais VESA continue à standardiser beaucoup de choses hardware, heureusement
Marsh Posté le 23-11-2004 à 21:33:37
Nermal a écrit : Je vois, alors pour quelqu'un qui fait un nouveau OS, soit sont OS est inutile faute de drivers disponibles. Soit il passe un accord avec les principaux constructeurs ? |
Ben oui... Et puis créer un nouvel OS, c'est pas seulement un problème de pilote, mais aussi un problème d'applications disponibles pour cet OS.
Si Linux a pu percer, c'est aussi parce que c'est un UNIX et que bcp de codes sources pour UNIX ont pu être adaptés.
Dans le cas d'un OS "révolutionnaire tout neuf", faut repartir de 0. Et là, à moins d'avoir bcp, bcp d'amis et d'arriver à les convaincre que ton nouvel OS, est le truc de la mort qui va tout tuer dans les 20 prochaines années, c'est mal barré.
Marsh Posté le 23-11-2004 à 22:44:40
Hermes le Messager a écrit : Ben oui... Et puis créer un nouvel OS, c'est pas seulement un problème de pilote, mais aussi un problème d'applications disponibles pour cet OS. |
Bah pour les app il y a toujours les émulateurs, mais pour les pilotes c'est un peu bête d'être bloqué comme ça..
Marsh Posté le 23-11-2004 à 23:24:49
Hermes le Messager a écrit : |
le vbe a mon avis c'est mieux que rien.
Sinon la seule alternative c'est de s'appeler Microsoft. Ou d'utiliser les méthodes mafieuses (reverse engineering).
Le reverse engineering a un certain succès, par exemple tu envoies des commandes une par une à ton hardware et tu suis ce que fait le driver en assembleur. Enfin avec le digital millenium act tout ceci sera bientot illégal. Donc la seule solution sera de s'appeler Microsoft (ou Apple).
Marsh Posté le 24-11-2004 à 00:38:19
Lam's a écrit : Le problème des VBE c'est que c'est du BIOS extension, donc il faut pas mal de code derrière pour faire la conversion mode protégé/mode réél. C'est ce qui a empéché Linux pendant pas mal de temps de s'en servir (je pense au début des années 90). |
Il me semblait que VBE 3 était utilisable 100% en pmode.
Citation : VBE is expected to work on all 80x86 platforms, in real and protected modes. Starting with VBE |
Dans la pratique c'est difficile depuis NT car moi j'ai jamais trouvé comment allouer un segment de code exécutable 16 bits. C'est du niveau driver de toutes façons.
Pour les techniques d'analyse du fonctionnement d'un driver y'a d'autres moyens que le reverse engineering (p'tet pas pour les drivers video). Les drivers Windows sont structurés en couches, alors les mecs ils insèrent leur driver entre le driver à étudier et le système, driver qui ne fait rien d'autre que logger les trames qui passent... C'est utilisé pour mettre au point certains modems USB Linux.
Sinon c'est pas la qualité technique qui fait le succès d'un OS. Y'a plein de projets brillants qui se sont vautrés, alors que Win95 rafflait la mise.
Marsh Posté le 24-11-2004 à 04:55:16
oui il y a des interfaces en mode protégé même en VBE 2.0.
mais bon c'est surtout pour éviter les pertes de temps pour le page-flipping etc...
Marsh Posté le 24-11-2004 à 04:56:22
LeGreg a écrit : |
Ou exclusif ou pas ?
Marsh Posté le 24-11-2004 à 08:47:12
LeGreg a écrit : le vbe a mon avis c'est mieux que rien. |
Le Digital Millenium Act ne s'applique qu'aux USA et le reste du monde en a rien à battre des lois restrictives des USA.
Le reverse engineering n'a rien de mafieux en soit, toutes les industries le pratiquent plus ou moins.
Marsh Posté le 24-11-2004 à 10:37:06
el muchacho a écrit : Le reverse engineering n'a rien de mafieux en soit, toutes les industries le pratiquent plus ou moins. |
c'était du second degré pour le coté mafieux .
Mais bon pour le DMCA, il faut remarquer que toute entreprise européenne qui est présente sur le sol américain s'expose à des poursuites et ce n'est pas rien (marché américain = plus gros marché tout court).
En plus l'union européenne est soumise aux memes lobbies (taxes sur les supports, brevets logiciels, etc..).
Marsh Posté le 18-02-2005 à 13:38:36
sauf si on fait un OS qu'on met sur le net gratuitement ensuite yaura pas de taxe !
Marsh Posté le 18-02-2005 à 14:02:46
Joli up.
Ceci dit, quand tu download une Mandrake sur le net, et que tu la graves sur CD pour l'exécuter, tu payes une taxe à la SACEM.
Marsh Posté le 23-02-2005 à 14:36:16
de toute facon si tu peu pas faire de 3D avec ta carte graphique laisse tombe ton projet personne ne voudra d'un os qui ne peut faire que du 2D, a moin que ca interesse plien de monde et que nvidiaet ati te devellope leur drivers. mais la micro mou t'aura deja mangé.
Marsh Posté le 23-11-2004 à 00:01:32
Supposons que je crée un OS, comment doit-on s'y prendre pour créer des pilotes pour ce nouveau OS ?
J'ai essayé de chercher sur google, mais sans succès.
Merci pour vos informations