Zusätzliche Seriellports unter 10.2
Hallo, ich habe gerade einen Rechner mit SuSE 10.2 hochgezogen. Der Rechner hat eine 2-Fach-Seriellkarte in einem PCI-Slot stecken. Leider krieg ich nur einen der beiden Ports richtig konfiguriert. ttyS2 wird konfiguriert, funktioniert auch. ttyS3 ist einfach tot. lt. Dmesg sind die Ports wie folgt konfiguriert: serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A 00:07: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A ACPI: PCI Interrupt 0000:02:0d.0[A] -> GSI 21 (level, low) -> IRQ 169 0000:02:0d.0: ttyS1 at I/O 0xefe0 (irq = 169) is a 16550A 0000:02:0d.0: ttyS2 at I/O 0xefa8 (irq = 169) is a 16550A Sollte also passen. Wenn ich einen "setserial -bg /dev/ttyS*" aufrufe bekomme ich folgendes: /dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A (low_latency) /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A (low_latency) /dev/ttyS2 at 0xefa8 (irq = 169) is a 16550A Also ist doch ttyS1 lt. setserial auf einen ganz anderen IO konfiguriert. In den dmesg passts noch, wenn das das System vollständig oben ist nicht mehr. Weiß jemand warum und wieso? Gruß Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Thu 21 Feb 2008 02:56:36 NZDT +1300, Daniel Spannbauer wrote:
ich habe gerade einen Rechner mit SuSE 10.2 hochgezogen.
???? 10.3 ist schon länger da, für Neuanfänge.
Der Rechner hat eine 2-Fach-Seriellkarte in einem PCI-Slot stecken.
Wenn ich einen "setserial -bg /dev/ttyS*" aufrufe bekomme ich folgendes: /dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A (low_latency) /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A (low_latency) /dev/ttyS2 at 0xefa8 (irq = 169) is a 16550A
Also ttyS2 auf IRQ 169 ist Stumpfsinn, das wird nie gehen. Lege mit setserial die Schnittstelle auf einen freien IRQ. Möglicherweise kannst Du mit ttyS0 oder ttyS1 einen teilen. Teilen mußt Du eh, es gibt nur 15 und die sind schon lange übervoll. Die IO-Adresse efa8 sieht auch nicht gut aus. Das BIOS zeigt beim booten die IRQ-Belegungen an, wenn Du schnell genug hinguckst oder Scrolllock/pause/break drückst. Die Belegung solltest Du als erstes probieren. Dann gibts da noch ein potentielles Problem. Einige dieser Karten legen die IO-Adresse auf die grüne Wiese, den IRQ möglicherweise auch. Das kann der Kernel beim booten dann nicht mehr automatisch erkennen und Du mußt von Hand einstellen. Zur Not ausgiebig mit lspci hantieren und Adressen raten (da kanns auch mehrere Adressbereiche per Karte geben, ein Bereich hat Deine gesuchten IO-Adressen, die anderen interessiert direkt nicht). Karten mit Hardware auf weithin bekannten Adressen sind weniger Ärger... Volker -- Volker Kuhlmann is list0570 with the domain in header http://volker.dnsalias.net/ Please do not CC list postings to me. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Volker Kuhlmann schrieb:
On Thu 21 Feb 2008 02:56:36 NZDT +1300, Daniel Spannbauer wrote:
ich habe gerade einen Rechner mit SuSE 10.2 hochgezogen.
???? 10.3 ist schon länger da, für Neuanfänge.
Der Rechner hat eine 2-Fach-Seriellkarte in einem PCI-Slot stecken.
Wenn ich einen "setserial -bg /dev/ttyS*" aufrufe bekomme ich folgendes: /dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A (low_latency) /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A (low_latency) /dev/ttyS2 at 0xefa8 (irq = 169) is a 16550A
Ist da für /dev/ttyS1 schon die Konfiguration geändert worden (setserial)? Wie sieht die Ausgabe aus, wenn Du die 2fach-Karte nicht eingebaut hast? Fon welchem Hersteller ist die Karte, welche Bezeichnung steht auf den Chips:
Also ttyS2 auf IRQ 169 ist Stumpfsinn, das wird nie gehen.
Wieso sollte das Stumpfsinn sein? IRQs größer als 15 sind bei modernen Mainboards absolut üblich (Stichwort APIC, nicht ACPI!): # cat /proc/interrupts CPU0 0: 591900390 IO-APIC-edge timer 1: 200798 IO-APIC-edge i8042 7: 0 IO-APIC-edge parport0 8: 2 IO-APIC-edge rtc 9: 1 IO-APIC-level acpi 12: 3054541 IO-APIC-edge i8042 15: 5322447 IO-APIC-edge ide1 177: 12012429 IO-APIC-level libata, uhci_hcd, eth0 185: 30581845 IO-APIC-level aic7xxx 193: 33257435 IO-APIC-level ehci_hcd 201: 0 IO-APIC-level uhci_hcd, uhci_hcd 209: 66 IO-APIC-level uhci_hcd 217: 319942 IO-APIC-level eth1
Lege mit setserial die Schnittstelle auf einen freien IRQ. Möglicherweise kannst Du mit ttyS0 oder ttyS1 einen teilen. Teilen mußt Du eh, es gibt nur 15 und die sind schon lange übervoll.
Welcher IRQ verwendet wird, hängt von PNP-Manager ab, der der PCI-Karte einen Wert zuteilt. Wenn Du mit setserial einen anderen Interrupt konfigurierst, lauscht der Treiber auf einem anderen Interrupt als dem, den die Karte tatsächlich verwendet. Das funktioniert erst recht nicht. Ich habe hier unter 9.3 auch eine serielle PCI-Karte laufen: /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4 /dev/ttyS14, UART: 16550A, Port: 0xbc00, IRQ: 169 /dev/ttyS15, UART: 16550A, Port: 0xbc08, IRQ: 169 Abgesehen davon, dass die zugeordneten Devices ttyS14 und ttyS15 sind läuft das ganze prima, obwohl sich beide den gleichen Interrupt 169 teilen und I/O-Ports verwenden, die nicht 0x2F8/0x3E8/0x2E8 entsprechen, wie es zu DOS-Zeiten erforderlich war.
Die IO-Adresse efa8 sieht auch nicht gut aus.
Für Linux ist es egal, welche Interrupts und Portnummern verwendet werden, nur die Portnummern müssen eindeutig sein, und dafür ist bei Verwendung von PCI-Karten gesorgt.
Das BIOS zeigt beim booten die IRQ-Belegungen an, wenn Du schnell genug hinguckst oder Scrolllock/pause/break drückst. Die Belegung solltest Du als erstes probieren.
Das BIOS teilt die Ressourcen zu, wenn aber im BIOS nicht "Plug'n'Play OS = NO" eingestellt ist, werden die PCI-Karten nicht durch das BIOS aktiviert. Das macht dann das (PnP-fähige) Betriebssystem, nachdem es aber gegebenenfalls die Ressourcen nochmal umverteilt hat. Was unter Linux tatsächlich verwendet wird muß also nicht in jedem Fall mit den vom BIOS angezeigten Werten übereinstimmen.
Dann gibts da noch ein potentielles Problem. Einige dieser Karten legen die IO-Adresse auf die grüne Wiese, den IRQ möglicherweise auch. Das kann der Kernel beim booten dann nicht mehr automatisch erkennen und Du mußt von Hand einstellen.
Das hört sich aber nach einem fehlerhaften BIOS an ... [...]
Karten mit Hardware auf weithin bekannten Adressen sind weniger Ärger...
Das stimmt nicht. Zu DOS-Zeiten mußte das BIOS die Portadressen im BIOS-Datenbereich eintragen, damit Programme dort nachsehen konnten, an welchen Adressen die UART-Chips anzusprechen waren. Alternativ konnten auch die gut bekannten Standard-I/O-Adressen ausprobiert werden. Mit Interrupt-Nummern war es noch schlimmer, weil ein DOS-Programm die nicht automatisch rausfinden konnte. Daher war es unter DOS sinnvoll, die Standard-I/O-Adressen und die Standard-Interruptnummern zu verwenden. Aktuelle Schnittstellen-Erweiterungskarten emulieren sogar teilweise die alten Einstellungen unter Windows, damit DOS-Programme auch unter Windows mit den Karten funktionieren. Martin -- Martin Burnicki Meinberg Funkuhren Bad Pyrmont Germany -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Daniel Spannbauer
-
Martin Burnicki
-
Volker Kuhlmann