4
votes

When I run command "dmesg | grep tty", then it displays just 4 ttyS devices from 0 to 3. I used #MAKADEV and makenode commands and they created ttyS... files in /dev folder. So now, I cannot use them because their properties such as MMIO addresses are not set. I have heard of the "setserial" command, but I can not see that it sets serial device MMIO address. So is there a way I can do that?

It is critical because my computer has 8 serial ports and I want to use them all. In my Linux, I can only use 4 of them..

1
"my computer has 8 serial ports" -- Please provide the details on this computer (manufacturer, CPU etc.). How is the hardware configuration specified to the kernel (x86 plug-n-play, board file, Device Tree)? If "your computer" uses an SoC with "8 serial ports", then it's very likely that the board implementation used pins (for other peripherals) that preclude the use of those other serial ports (i.e. the pins are multiplexed among several peripherals).sawdust

1 Answers

8
votes

If your system uses the driver 8250 to handle serial ports, please check CONFIG_SERIAL_8250_NR_UARTS parameter in the configuration file of your kernel. This defines the maximum number of the serial ports the kernel will handle.

From Kconfig for that driver:

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.

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 

Chances are, the value of CONFIG_SERIAL_8250_NR_UARTS is still 4 on your system. If so, you can set a greater value in the kernel configuration and rebuild the kernel to make all ports available.

Note that 8250.nr_uarts kernel runtime parameter can only set the number of ports between 0 and CONFIG_SERIAL_8250_NR_UARTS, so it is not enough to set it at boot time.