Super IO UART configuratie ubuntu 12.04

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik doe een poging om vanuit ubuntu 12.04 mijn super IO chip UART to configureren, het is een MSC SCH3114 met 4 UARTs. De hardware configureer ik via een user space applicatie, de driver wil ik configureren via een upstart script, net voordat ik een getty start op ttyS2.

Middels een user space applicatie configureer ik de hardware zelf, waarbij de uarts of IO ports 0x04e8, 0x04ef (interrupt 3) en 0x04e8, 0x04ef (interrupt 4) gezet wordt. Dit is hard-coded en wordt gedaan door een tooltje genaamd sioca. Ik kan dus op het moment niet om deze configuratie heen.

Ik enable alle 4 de poorten in BIOS, maar deze heeft niet de optie om 0x04** te selecteren voor 2 van de 4 poorten. Deze staan dus default op 0x02e8 en 0x02ef. Nu wil ik tijdens boot de driver informeren over de correcte hardware settings en de IO ports wijzigen zodat de driver van het bestaan af weet. Ik gebruik een upstart script waarbij ik de settings wil zetten net voor het starten van een getty op ttyS2.

Setserial* is geinstalleerd en het lukt me de poorten te lezen/schrijven na het runnen van het volgende upstart script (simplified). Na boot zie ik dan dat de driver correct geconfigureerd is door setserial -g /dev/ttyS* te draaien:

C:
1
2
3
4
5
6
7
8
9
 
start on stopped rc RUNLEVEL:[2345]
...
pre-start script
    sleep 5;
    *hier configureer ik de hardware door een call naar user space applicatie 'sioca'
    *hier roep ik setserial aan voor de 4 UART zodat de driver correct werkt
end script
*hier start ik een getty op ttyS2


Mijn probleem:
zonder de sleep 5 werkt dit niet en kan de driver niet bij alle poorten. Ook heb ik geen andere, werkende, 'start on' gevonden welke meer geschikt is. Indien ik iets anders doe dan bovenstaande lijkt het alsof tijdens boot iets anders (een driver?) ook probeert de 8250 driver te configureren, waardoor niet alle UARTs benaderbaar zijn. Sommige staan nog op 0x02**, soms lijken ze niet te configureren omdat ze 'in use' zijn.

Het lieft los ik dit probleem door enkel startup scripts te gebruiken en dus geen BIOS en/of kernel wijziging te doen.

Mijn vragen:
- Waarom heb ik de sleep 5 nodig? Is de kernel hiervoor ook bezig met deze poorten waardoor ik in gevecht ben met de kernel om de resources (uarts)?
- Ik hoopte op een meer zinvolle event als start on, zoals 'start on tty-device-added DEVNAME=ttyS2'. Maar dit heeft weer als resultaat dat de driver niet correct geconfigureerd is na boot (uarts op 0x02**). Ook moet ik bij een user space applicatie zijn, dus het rootfs moet gemount zijn. Heeft iemand suggesties?
- Tijdens boot zie ik pnp gerelateerde logging in de syslog die de 4 UARTs herkend en IO ports 0x02e* / 0x03e* (en interrupts) rapporteert. Ik zou dus hierna deze configuratie willen overschrijven. Hoe kan ik er zeker van zijn dat ik de laatste ben die rommelt met de uart configuratie?

* alle setserial gerelateerde startup scripts heb ik disabled, dus deze scripts zijn het niet die me lastig vallen tijdens mijn startup configuratie.

[ Voor 4% gewijzigd door Verwijderd op 04-04-2015 16:55 ]


Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Kan je ze niet beter vanuit de driver module of kernel commandline overschrijven?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Doel je op een boot cmd line met iets als 8250.nr_uart=4, maar dan de poort configuratie parameters voor de driver (als die bestaan)?

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 10:04

CAPSLOCK2000

zie teletekst pagina 888

Is het misschien udev dat je in de weg zit?
Misschien is udev sowieso wel de beste plek om je aanpassingen te doen. Dan haak je aan bij het mechanisme dat hardware en software moet configureren als het daar tijd voor is. Via die weg kun je ook logberichten laten genereren met nuttige debuginfo.

[ Voor 19% gewijzigd door CAPSLOCK2000 op 05-04-2015 13:52 ]

This post is warranted for the full amount you paid me for it.