Linux Mint: Serial port name bug on fitlet2 with Atom CPU

From fit-PC wiki
Jump to: navigation, search
  • This document is applicable to fitlet2 configured with Intel(R) Atom(TM) E3XXX CPU running Linux.
  • It provides an explanation to workaround a bug related to the serial port's name change in certain Kernels.

Serial port name

  • There is a bug in serial port name in Linux on Intel(R) Atom(TM) E3XXX platforms.

https://bugs.launchpad.net/ubuntu/+source/linux-oem/+bug/1769610

  • Depending on Linux distribution and kernel version serial port name can be: /dev/ttyS6 or /dev/ttyHS1 or something similar or just unavailable
  • For example, on Linux Mint 19 with kernel 4.15+ serial port initially detected as /dev/ttyS6, but then device node is absent in the /dev/ directory

Temporary solution

  • Ensure latest BIOS is installed: Fitlet2:_BIOS_Files
  • Install development Ubuntu kernel provided by Canonical Kernel Team
$ sudo add-apt-repository ppa:canonical-kernel-team/ppa
$ sudo apt update
$ sudo apt install linux-oem
$ sudo reboot
  • Missing device node /dev/ttyS6 will appear now as /dev/ttyHS1
# Test with serial loopback cable:
$ sudo -i
$ echo "12345678" > /dev/ttyHS1
$ cat /proc/tty/driver/serial | grep -v unknown
serinfo:1.0 driver revision:
4: uart:16550A mmio:0x7FFFF10000 irq:4 tx:0 rx:0
5: uart:16550A mmio:0x7FFFF0E000 irq:5 tx:0 rx:0 RTS|CTS|DTR
6: uart:16550A mmio:0x281011000 irq:6 tx:10 rx:10 RTS|DTR
7: uart:16550A mmio:0x7FFFF0C000 irq:7 tx:0 rx:0 CTS

Compile custom kernel

  • The above temporary solution works for Ubuntu based distributions like Linux Mint, for other distributions, see below.
  • Another way is to get serial port working is to recompile your kernel manually and unset CONFIG_SERIAL_DEV_BUS in menuconfig
  • The configuration path: Device Drivers > Character devices > Serial device bus
 > Device Drivers > Character devices ─────────────────────────────────────────────────────────────────
  ┌─────────────────────────────────────── Character devices ───────────────────────────────────────┐
  │  Arrow keys navigate the menu.  <Enter> selects submenus ---> (or empty submenus ----).         │  
  │  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, <M> modularizes         │  
  │  features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ]  │  
  │  excluded  <M> module  < > module capable                                                       │  
  │ ┌───────────^(-)──────────────────────────────────────────────────────────────────────────────┐ │  
  │ │           <M>   GSM MUX line discipline support (EXPERIMENTAL)                              │ │  
  │ │           < >   Trace data sink for MIPI P1149.7 cJTAG standard                             │ │  
  │ │           [*]   Automatically load TTY Line Disciplines                                     │ │  
  │ │           [*] /dev/mem virtual device support                                               │ │  
  │ │           [ ] /dev/kmem virtual device support                                              │ │
  │ │               Serial drivers  --->                                                          │ │  
  │ │           < > Serial device bus  ----                                                       │ │  
  │ │           <M> TTY driver to output user messages via printk                                 │ │  
  │ │           <M> Parallel printer support                                                      │ │  
  │ │           [ ]   Support for console on line printer                                         │ │  
  │ └───────────┴(+)──────────────────────────────────────────────────────────────────────────────┘ │  
  ├─────────────────────────────────────────────────────────────────────────────────────────────────┤  
  │                    <Select>    < Exit >    < Help >    < Save >    < Load >                     │  
  └─────────────────────────────────────────────────────────────────────────────────────────────────┘  
  • We've build example .deb kernel packages for Debian 10, missing device node will appear as /dev/ttyS2:
# Download and install the kernel packages:
$ wget https://fit-iot.com/files/download/fitlet2/sw/images/Linux/Kernel-packages/linux-headers-4.19.67-compulab.2019.09.11_4.19.67-compulab.2019.09.11-1_amd64.deb
$ wget https://fit-iot.com/files/download/fitlet2/sw/images/Linux/Kernel-packages/linux-image-4.19.67-compulab.2019.09.11_4.19.67-compulab.2019.09.11-1_amd64.deb
$ sudo dpkg -i linux-headers-* linux-image-*
$ sudo reboot

# Test CONFIG_SERIAL_DEV_BUS variable:
$ cat /boot/config-4.19.67-compulab.2019.09.11 | grep CONFIG_SERIAL_DEV_BUS
# CONFIG_SERIAL_DEV_BUS is not set

# Test with serial loopback cable:
$ sudo -i
$ echo "12345678" > /dev/ttyS2
$ cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x7FFFF10000 irq:4 tx:0 rx:0
1: uart:16550A mmio:0x7FFFF0E000 irq:5 tx:0 rx:0 CTS
2: uart:16550A mmio:0x180000000 irq:6 tx:10 rx:10
3: uart:16550A mmio:0x7FFFF0C000 irq:7 tx:0 rx:0 CTS