• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mehr als 4 serielle Schnittstellen möglich ?

ich möchte gerne mehr als 4 serielle Schnittstellen an meinem Linux Server nutzen, dazu habe ich eine Schnittstellenkarte mit 6 weiteren Schnittstellen eingebaut.
Eine serielle habe ich on Board, 3 werden zusätzlich von der PCI Karte beim booten erkannt.

Nun habe ich in /usr/src/linux mit make menuconfig die Anzahl der seriellen Schnittstellen von 4 auf 6 erhöht.

Beim Booten bekomme ich jetzt dummerweise:

Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
GSI 16 sharing vector 0xD9 and IRQ 16
ACPI: PCI Interrupt 0000:01:06.0[A] -> Link [APC1] -> GSI 16 (level, low) -> IRQ 217
0000:01:06.0: ttyS1 at I/O 0xcc00 (irq = 217) is a 16550A
0000:01:06.0: ttyS2 at I/O 0xc800 (irq = 217) is a 16550A
0000:01:06.0: ttyS3 at I/O 0xc400 (irq = 217) is a 16550A
Couldn't register serial port 0000:01:06.0: -28


die nächste wäre ttyS4, diese hat unter /dev
folgende Rechte:

crw------- 1 root uucp 4, 70 Nov 25 2006 ttyS4

die ersten 4 haben aber
crw-rw----

also habe ich die Rechte geändert mit
chmod 660 /dev/ttyS4

diese bleiben aber nur bis zum nächsten reboot so, nech nem Neustart springen diese wieder zur alten Config zurück.

mit setserial kann ich der ttyS4 auch keine weitere zuweisen, da bekomme ich immer den Fehler

/dev/ttyS4 no such device oder adress

kann ich denn nicht mehr als 4 serielle Schnittstellen nutzen ???
 
Nun habe ich in /usr/src/linux mit make menuconfig die Anzahl der seriellen Schnittstellen von 4 auf 6 erhöht.

Beim Booten bekomme ich jetzt dummerweise:

Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
Wieso dummerweise? Hast du auch den Kernel recompiled oder doch nur menuconfig ausgeführt...
 
OP
F

fritzbee21

Hacker
dummerweise weil ich dachte das reicht um mehr Schnittstellen verfügbar zu machen.

Ich habe nur das make menuconfig ausgeführt und dann die config abgespeichert.
Deiner Aussage nach vermute ich, ich muss den Kernel neu compilieren ?

habe ich bislang noch nicht gemacht, eben mal nach kernel +recompile gegoogelt, inwieweit ist das Vorgehen hier korrekt (nutze suse 10.2):

- Änderungen mit make menuconfig ausführen + speichern
- make dep
- make clean
- make zImage
- make modules
- cp /usr/Linux/src/arch/i386/boot/zImage /boot/newkernel
- make modules_install

jetzt muss ich den neuen kernel aber im grub eintragen ... richtig ?

oder gibt es eventuell ein HowTo wie man den Kernel neu baut?
 
Ganz einfach. Nach dem du jetzt schon in den SUSE-Sourcen gefummelt hast, erstmal make mrproper (sonst nicht!), und dann Standardprozedere:
Code:
make O=/tmp/sonstwo cloneconfig
make O=/tmp/sonstwo menuconfig
make O=/tmp/sonstwo
make O=/tmp/sonstwo modules_install
cp /tmp/obj/arch/i386/boot/bzImage /boot/gibeinenschönennamen
sonstwo != /usr/src/linux. Mehr ist da nicht zu tun (natürlich einige Pfade sinnvoll einsetzen, empfiehlt sich).
 
OP
F

fritzbee21

Hacker
Hi,

ich hab bislang nur mit make menuconfig etwas verändert.

Du hast ja geschrieben,

sonstwo wird /usr/src/linux


findet denn grub den kernel "gibeinenschönennamen" beim starten ?
 
!= heißt ungleich im C-Slang. Das soll bewirken, dass du das kompilierte Zeugs (sprich, was cloneconfig, menuconfig, usw. alles erzeugen) nicht unter /usr/src/linux ballerst (weil das dann Ärger mit 3rd-Party-Modulen macht), sondern in ein gesondertes Verzeichnis schreiben lässt (mittels O= Parameter).
Das erlaubt dir außerdem, die Kompilation als Normaluser durchzuführen, auch wenn /usr/src/linux nicht schreibbar ist. Und das ist auch gut so™.
 
OP
F

fritzbee21

Hacker
so heute hatte ich mal Zeit und bin vor allem in Reichweite des Rechners.

ich habe unter
/usr/src/linux
mit
make menuconfig
die Anzahl detr Schnittstellen auf 7 geändert (eine onBoard und 6 auf der PCI Karte).
Dann
Code:
make mrproper
make O=/comp cloneconfig
make O=/comp menuconfig
make O=/comp
make O=/comp modules_install
cp /comp/arch/x86_64/boot/bzImage /boot/kernel_neu
mein neuer kernel liegt jetzt also unter boot und heisst "kernel_neu"
in meiner menu.lst vom bootloader grub (liegt unter /boot/grub)
gibts aber leider den Eintrag kernel_neu nicht.
um den neuen Kernel jetzt beim starten auswähölen zu können (bzw. an die erste Stelle zu schieben), muss ich dazu sicher im YAST im Menu Bootloader den Eintrag zufügen oder ?

Nachtrag1:
ich habe im YAST beim Bootloadermenü noch einen Eintrag hinzugefügt und zwar den Standardeintrag kopiert und das als kernel_image
/boot/kernel_neu
eingetragen.
mehr habe ich nicht verändert. Das initrd file ist weiterhin
/boot/initrd-2.6.18.2-34-default

Der Rechner startet zwar, aber mehr serielle Schnittstellen werden beim booten nicht erkannt.


Nachtrag2:
irgendwie habe ich immer 4 serielle Ports im menuconfig, nachdem ich make mrproper ausgeführt habe.
Beispiel:
serielle Ports auf 7 geändert, kernelconfig abgespeichert, make mrproper
make menuconfig -> serielle Ports: 4
baue ich nen neuen kernel und boote mit diesem habe ich auch 4 serielle Ports ...
irgendwie wird die 7 nicht übernommen
 
Ich lese gerade im kconfig:
Code:
config SERIAL_8250_NR_UARTS
        int "Maximum number of 8250/16550 serial ports"
        depends on SERIAL_8250
        default "4"
        help
          Set this to the number of serial ports you want the driver
          to support.  This includes any ports discovered via ACPI or  
          PCI enumeration and any ports that may be added at run-time
          via hot-plug, or any ISA multi-port serial cards.
beim SUSE-Kernel ist das normalerweise schon 8. Und:
Code:
config SERIAL_8250_RUNTIME_UARTS
        int "Number of 8250/16550 serial ports to register at runtime"
        depends on SERIAL_8250
        range 0 SERIAL_8250_NR_UARTS
        default "4"
        help
          Set this to the maximum number of serial ports you want
          the kernel to register at boot time.  This can be overridden
          with the module parameter "nr_uarts", or boot-time parameter
          8250.nr_uarts
D.h. du solltest in der Lage sein, mittels dieses Bootparameters allein, ohne Neukompilation, mehrere Ports freizuschalten (siehe auch die "range"-Zeile die angibt, wieviel)
 
OP
F

fritzbee21

Hacker
na gut also doch nicht neu kompilieren.
Ich ändere beide Wert von 4 auf 7 und speichere die neue Config.
Beim verlassen bekomme ich

#
# configuration written to .config
#


*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.

wenn ich jetzt neu starte bekomme ich

CPI: PCI Interrupt 0000:01:06.0[A] -> Link [APC1] -> GSI 16 (level, low) -> IRQ 217
0000:01:06.0: ttyS1 at I/O 0xcc00 (irq = 217) is a 16550A
0000:01:06.0: ttyS2 at I/O 0xc800 (irq = 217) is a 16550A
0000:01:06.0: ttyS3 at I/O 0xc400 (irq = 217) is a 16550A
Couldn't register serial port 0000:01:06.0: -28

wenn ich make mrproper eingebe, habe ich wieder 4 dort stehen.
 
OP
F

fritzbee21

Hacker
OK, verstanden ...

Zitat von Thomas Hertweck
"Um auf der sicheren Seite zu sein und mit Sicherheit einen saubere Kernel-Quellbaum zu haben, kann folgender Befehl ausgeführt werden - dieser löscht alle generierten Dateien, eine evtl. vorhandene Konfiguration und zahlreiche evtl. vorhandene Backup-Dateien und versetzt den Kernel-Quellbaum damit in den Zustand, in dem er eigentlich sein sollte:
make mrproper"

dann ists klar warum ich nachher wieder 4 dort stehen habe.

Zurück zum eigentlichen Problem, wie bekomme ich mehr als 4 Schnittstellen zum laufen ?
Wenn ich die Zahl im menuconfig erhöhe, bekomme ich beim booten diese Anzahl der Schnittstellen aber aktiv.

So ich habs jetzt nochmal ausprobiert

Code:
Linux agpgart interface v0.101 (c) Dave Jones
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
GSI 16 sharing vector 0xD9 and IRQ 16
ACPI: PCI Interrupt 0000:01:06.0[A] -> Link [APC1] -> GSI 16 (level, low) -> IRQ 217
0000:01:06.0: ttyS1 at I/O 0xcc00 (irq = 217) is a 16550A
0000:01:06.0: ttyS2 at I/O 0xc800 (irq = 217) is a 16550A
0000:01:06.0: ttyS3 at I/O 0xc400 (irq = 217) is a 16550A
Couldn't register serial port 0000:01:06.0: -28


Code:
mir:/dev # ls -l ttyS*
crw-rw---- 1 root uucp 4, 64 Nov 25  2006 ttyS0
crw-rw---- 1 root uucp 4, 65 Nov 25  2006 ttyS1
crw-rw---- 1 root uucp 4, 66 Nov 25  2006 ttyS2
crw-rw---- 1 root uucp 4, 67 Nov 25  2006 ttyS3
crw------- 1 root uucp 4, 68 Nov 25  2006 ttyS4
crw------- 1 root uucp 4, 69 Nov 25  2006 ttyS5
crw------- 1 root uucp 4, 70 Nov 25  2006 ttyS6
crw------- 1 root uucp 4, 71 Nov 25  2006 ttyS7
mir:/dev # setserial /dev/ttyS4 -a
/dev/ttyS4: No such device or address

ttyS4-S7 haben andere Rechte als 0-3 ...vielleicht liegts ja daran
 
Probier bitte die Bootoption die ich genannt habe (und/oder mach testweise nochmal
Code:
zgrep 'SERIAL_8250.*UART' /proc/config.gz
)
 
OP
F

fritzbee21

Hacker
Code:
zgrep 'SERIAL_8250.*UART' /proc/config.gz
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4

This can be overridden with the module parameter "nr_uarts", or boot-time parameter 8250.nr_uarts


so ich habe jetzt mal in der
.config
unter
/usr/src/linux

folgendes abgeändert:

Code:
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250.NR_UARTS=7
CONFIG_SERIAL_8250.RUNTIME_UARTS=7
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_RSA is not set

vorher stand da:

Code:
CONFIG_SERIAL_8250_NR_UARTS=7
CONFIG_SERIAL_8250_RUNTIME_UARTS=7

hat leider nichts geändert ...

hier hatte jemand auch ein ähnliches Problem:
http://www.ureader.de/msg/12563400.aspx
 
OP
F

fritzbee21

Hacker
so ich meine in der .config sollte man die Änderung der nr_uarts nicht eintragen sondern eher im bootloader die Info mit übergeben.

deswegen habe ich die Änderung oben rückgängig gemacht und im bootloader folgendes mit eingetragen:

kernel /boot/vmlinuz-2.6.18.2-34-default root=/dev/hda2 vga=0x31a resume=/dev/hda1 splash=silent 8250.nr_uarts=7 showopts

damit übergebe ich 8250.nr_uarts=7 direkt beim booten.
Gebracht hat es aber nichts, denn ich habe immer noch nur 4 serielle Schnittstellen .... also irgendwie verzweifle ich langsam ....
 
Oben