Bonjour,
J'ai développé un petit driver pouvoir transmettre des informations via le port COM1 entre un petit noyau et une machine hôte.
En indiquant à Bochs d'enregistrer ce qui sort du port serie depuis le noyau, ça marche nickel (donc avec comme paramètre indiqué à bochs : com1: enabled=1, mode=file, dev=serial.txt).
Mon but est maintenant de transmettre des info depuis ma machine hôte vers le noyau. J'ai pour ça essayer d'écrire dans le fichier sans trop d'espoir, j'ai ensuite testé avec l'utilisation d'un pipe mais ça ne semble juste pas possible sous linux... quelqu'un pour confirmer ? Si oui existe-t-il un autre moyen ? (j'ai testé avec ça mais bizarrement aucune erreur, rien ne se passe.. com1: enabled=1, mode=pipe, dev=/tmp/myfifo).
J'ai vérifié la configuration du pic, et la l'interruption en question n'est pas masquée à priori :
J'ai vérifié l'état de mon idt, j'ai bien l'adresse de ma routine de renseignée à priori, et celle de l'horloge est bien appelée donc pas de problème d'interruption :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 mov al, 0xEC out 0x21, al ; horloge, clavier et COM1
Bonne journée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 IDT[0x20]=32-Bit Interrupt Gate target=0x0008:0x000016b0, DPL=0 // horloge (IRQ0) IDT[0x21]=32-Bit Interrupt Gate target=0x0008:0x000016d0, DPL=0 // clavier (IRQ1) IDT[0x22]=32-Bit Interrupt Gate target=0x0008:0x00001690, DPL=0 // routine par defaut... IDT[0x23]=32-Bit Interrupt Gate target=0x0008:0x00001690, DPL=0 IDT[0x24]=32-Bit Interrupt Gate target=0x0008:0x000016f0, DPL=0 // port COM1 (IRQ4) IDT[0x25]=32-Bit Interrupt Gate target=0x0008:0x00001690, DPL=0
Edit : j'ai aussi tenté le coup avec qemu, pour le coup j'ai réussi à recevoir des données depuis le noyau dans mon pipe (au lieu d'un fichier avec bochs), mais je n'arrive toujours pas à envoyer des données à mon noyau via ce même pipe... La commande utilisée pour qemu : qemu-system-i386 -boot a -fda floppyA -serial pipe:/tmp/myfifo
Partager