Outils pour utilisateurs

Outils du site


issue60:linux_lab

The old laptop I got from my dad features an RS-232 port. So, now that, technically, I had a client that I could test my RS-232 connection with, I ordered a null modem cable. There is no RS-232 outlet on my desktop computer, but there’s a connector on the mainboard where an RS-232 outlet can be attached. The outlet will then cover up a PCI slot. Several of the programs referred to below must be installed from Software Center, Synaptic, or by using apt-get.

Le vieux portable que j'ai reçu de mon père dispose d'un connecteur RS-232. Donc, maintenant que, techniquement, j'avais un client avec lequel je pouvais tester ma connexion RS-232, j'ai commandé un câble « modem nul » (Null Modem).

Il n'y a pas de sortie RS-232 sur mon ordinateur de bureau, mais il y a un connecteur sur la carte mère où une sortie RS-232 peut être fixée. La sortie couvrira alors un slot PCI.

Plusieurs des programmes mentionnés ci-dessous doivent être installés via la Logithèque, Synaptic, ou en utilisant apt-get.

Activating RS-232 Ok, once all the cables were in place, I tried to access both RS-232 ports by reading from them directly. They're usually ttyS0 or ttyS1, depending on what COM-Port it is. From the file /proc/tty/driver/serial, information about the serial setup can be obtained, or you could try typing: setserial -q /dev/ttyS0 which might be useful. Usually, the UART Type is 16550A on a standard PC. Mine wasn't working, though. At least not right from the start, when I tried to read the interface with: cat /dev/ttyS0

Activation d'RS-232

Ok, une fois que tous les câbles furent en place, j'ai essayé d'accéder aux deux ports RS-232 directement en lecture. Ils sont généralement nommés ttyS0 ou ttyS1, en fonction du port COM.

On peut obtenir des informations à partir du fichier /proc/tty/driver/serial au sujet de la configuration du port série ou vous pouvez éventuellement taper :

setserial -q /dev/ttyS0

ce qui pourrait être utile. Habituellement, le type UART est 16550A sur un PC standard. Le mien ne fonctionnait cependant pas. Du moins pas dès le début, quand j'ai essayé de lire l'interface avec:

cat /dev/ttyS0

I got the following error: cat: /dev/ttyS0: Input/output error Obviously, the driver couldn't activate the hardware. Reason was, it was deactivated in the BIOS. After activating RS-232 there, it worked well. As a last action, I added myself to the uucp group, so I have user permission to the serial lines. It is not necessary for the terminal setup, but a good idea to do so, just for future projects, maybe.

J'ai eu l'erreur suivante:

cat: /dev/ttyS0: Input/output error

De toute évidence, le pilote n'a pas pu activer le matériel. La raison était qu'il avait été désactivé dans le BIOS. Après l'activation de RS-232 ici, cela a bien fonctionné.

Enfin, je me suis ajouté au groupe uucp, obtenant ainsi l'autorisation d'utiliser les lignes série. Il n'est pas nécessaire pour pouvoir paramétrer le terminal, mais c'est une bonne idée de le faire, juste pour de futurs projets, peut-être.

Setting up a terminal Once the Serial line is configured and working properly, it's time to let a terminal run on that port. This is what I added to my /etc/inittab: s0:2345:respawn:/sbin/agetty -L 38400 ttyS0 I added it at the top of that file, right below the 'si' statement, mingetty cannot be used for serial connections; it cannot be run in a console, too. I tried it for testing purposes, but the console - along with your login program - will log you out, as soon as you log in over your serial line. -L means this is a local line, with no carrier signal. 38400 is the standard speed of a Linux console, it might be a bit high, I was told, but it works well. I tested that with some higher values as well (115200), and it worked too. I guess it depends on things like cable length, etc. Last parameter is the serial tty to listen on. The terminal type can be specified as an additional parameter at the end of the parameter list, vt102, for instance. This is sometimes required, depending on the client. After finishing editing /etc/inittab, typing: init q will make the system re-read /etc/inittab and apply changes. The agetty should now be listening on ttyS0 .

Mise en place d'un terminal

Une fois que la ligne série est configurée et fonctionne correctement, il est temps de faire fonctionner un terminal sur ce port. Voici ce que j'ai ajouté à mon /etc/inittab :

s0:2345:respawn:/sbin/agetty -L 38400 ttyS0

Je l'ai ajouté en haut de ce fichier, juste en dessous de la déclaration du « si », mingetty ne peut pas être utilisé pour les connexions série, il ne peut pas non plus être exécuté dans une console. Je l'ai essayé pour le tester, mais la console (avec votre programme de connexion) vous déconnectera, dès que vous vous connecterez sur votre ligne série.

-L signifie que c'est une ligne locale, sans signal porteur. 38400 est la vitesse standard d'une console Linux ; elle pourrait être un peu élevée, m'a-t'on dit, mais elle fonctionne bien. J'ai aussi testé cela avec quelques valeurs plus élevées (115200) et cela a également fonctionné. Je suppose que ça dépend de certaines choses comme la longueur du câble, etc. Le dernier paramètre est le numéro de tty série à écouter. Le type de terminal peut être spécifié comme un paramètre supplémentaire à la fin de la liste des paramètres, vt102, par exemple. Cela est parfois nécessaire, en fonction du client.

Après avoir terminé l'édition de /etc/inittab, taper :

init q

cela forcera le système à relire le fichier /etc/inittab et appliquer les modifications. Le agetty devrait maintenant être à l'écoute sur ttyS0.

Setting up a client It's time to establish a connection and test the serial line. I use a laptop that has an RS-232 port, so some preliminary setup is required. I tried minicom as a terminal program initially, but it turned out not to be the best client. It tries to initialize the modem - this lasts quite long, and it doesn't convey ANSI colors. So the better option is cu, it's part of the UUCP-Package. Oh, and the serial port of that computer has to be accessible as well, of course. Once everything was set up, I established the connection: cu -l ttyS0 -38400 –nostop Pretty self explanatory, I think. The –nostop option disables XON/XOFF handling.

Mise en place d'un client

Il est temps d'établir une connexion et de tester la ligne série. J'utilise un ordinateur portable doté d'un port RS-232, de sorte que certaines configurations préalables sont requises. J'ai essayé minicom comme un programme de terminal au départ, mais il s'est avéré ne pas être le meilleur client. Il tente d'initialiser le modem, cela dure assez longtemps, et il ne rend pas les couleurs ANSI. La meilleure option est donc cu, qui fait partie du paquet UUCP.

Oh, et le port série de cet ordinateur doit aussi être accessible, bien sûr.

Une fois que tout a été mis en place, j'ai créé la connexion :

cu -l ttyS0 -38400 –nostop [pour le scribeur : deux tirets avant nostop]

Assez explicite, je pense. L'option –nostop désactive la prise en charge de XON/XOFF. [idem]

Root Access Over ttyS0 In order to become root over the serial terminal, the tty needs to be added to /etc/securetty. I appended ttyS0 to the end of the file. It is now possible to gain root access over the serial terminal. The agetty process needs to be restarted to apply changes. Accessing GRUB over ttyS0 To make bootloader access possible over ttyS0, some changes to /boot/grub/menu.lst need to be done. (GRUB is the bootloader I use, I suppose LiLo has similar capabilities.) These are the two lines I added to the top of my menu.lst : serial –unit=0 –speed=38400 –word=8 –parity=no –stop=1 terminal –timeout=3 serial console

Accès root par ttyS0

Afin de devenir root sur le terminal de série, le tty doit être ajouté au fichier /etc/securetty. J'ai ajouté ttyS0 à la fin du fichier. Il est maintenant possible d'obtenir un accès root sur le terminal série. Le processus agetty doit être redémarré pour prendre en compte les modifications.

Accès à GRUB par ttyS0

Pour rendre l'accès possible au bootloader par ttyS0, certains changements dans /boot/grub/menu.lst doivent être fait. (GRUB est le bootloader que j'utilise, je suppose que LiLo a des fonctionnalités similaires). Voici les deux lignes que j'ai ajoutées à la partie supérieure de mon menu.lst:

serial –unit=0 –speed=38400 –word=8 –parity=no –stop=1 [Deux tirets avant unit, speed, word, parity et stop]

terminal –timeout=3 serial console [Deux tirets avant timeout]

The serial command initiates the serial terminal option, –unit=0 defines our first serial connector, in my case it's the only one I have on my machine. I used the standard Linux-Console speed, as well as the “8N1” connection strategy. terminal defines the terminal priorities, first terminal (serial) is the standard one, the last one is the secondary terminal (console). –timeout=3 enables a delay on both consoles, with a prompt for a keystroke. Depending on which terminal the key is pressed, this terminal will be used. If no key is pressed after the timeout, the standard console (in my case serial) will be used.

La commande serial initie l'option terminal série, –unit=0 [deux tirets avant unit] définit notre premier connecteur série, dans mon cas c'est le seul que j'ai sur ma machine. J'ai utilisé la vitesse standard de la console Linux, ainsi que la stratégie de connexion « 8N1 ».

terminal définit la priorité des terminuax, le premier terminal (serial) est celui par défaut, le dernier est le terminal secondaire (console).

–timeout=3 [deux tirets] permet un délai d'attente sur les deux consoles, avec une invite pour frapper une touche. Selon le terminal où la touche est enfoncée, ce terminal sera utilisé. Si aucune touche n'est actionnée après le délai d'attente, la console standard (dans mon cas serial) sera utilisée.

Relaying Kernel Output on Boot The Kernel accepts multiple console options, of which the last one is the standard console, and the one that will be used in Single User mode. These are my Kernel options: title Fedora Core (2.6.20-1.2316.fc5) root (hd0,0) kernel /vmlinuz-2.6.20-1.2316.fc5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet vga=795 console=tty0 console=ttyS0,38400 initrd /initrd-2.6.20-1.2316.fc5.img console=tty0 is the standard console located on the machine, i.e. monitor and keyboard.

Retransmettre la sortie du noyau lors du boot

Le noyau accepte plusieurs options de console, dont la dernière est la console standard, celle qui sera utilisée en mode mono-utilisateur. Voici mes options de noyau :

title Fedora Core (2.6.20-1.2316.fc5)

root (hd0,0)

kernel /vmlinuz-2.6.20-1.2316.fc5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet vga=795 console=tty0 console=ttyS0,38400

initrd /initrd-2.6.20-1.2316.fc5.img

console=tty0 est la console standard située sur la machine, c.-à-d. le moniteur et le clavier.

issue60/linux_lab.txt · Dernière modification : 2012/05/10 20:33 de d.grin