IOT-GATE-iMX7 and SBC-IOT-iMX7: Linux: Debian

From Compulab Mediawiki
Jump to: navigation, search


The example run-time Linux filesystem image for the CompuLab IOT-GATE-iMX7 Internet of Things Gateway and SBC-IOT-iMX7 Internet of Things Single Board Computer is based on Debian GNU/Linux stretch. The CompuLab Linux package for IOT-GATE-iMX7 and SBC-IOT-iMX7 includes ready to run image, Linux kernel configuration and source code patches, and an archive of the root filesystem, used to create the image.

The default Debian stretch Linux image includes more than 400 software packages. Among them:

  • Core system
  • Debian package management system
  • X11 Windowing System
  • Xfce desktop manager
  • SSH server and client
  • PulseAudio configuration and usage utilities
  • Bluez5 Bluetooth tools and daemons

The Automatic Linux installation on IOT-GATE-iMX7 and SBC-IOT-iMX7 page provides a brief introduction on how to install the run-time Linux image. This article describes package structure and peripheral device options specific to IOT-GATE-iMX7 and SBC-IOT-iMX7.

Using Debian Linux on SBC-IOT-iMX7

Connection and Logging In

This Debian rootfs comes with a default sudo user compulab:

Debian GNU/Linux 10 cl-debian ttymxc0

cl-debian login: compulab
Password: compulab

This Debian rootfs comes without default root password. The root password has to be set at the very first login:

Debian GNU/Linux 10 cl-debian ttymxc0

cl-debian login: root
You are required to change your password immediately (administrator enforced)
New password: 
Retype new password: 

To login into the Linux system, you may use a serial console, or connect through the network (ssh), or use a keyboard and display.


To configure networking, edit /etc/network/interfaces, /etc/resolv.conf, /etc/hostname and /etc/hosts. For more information about Debian Linux network configuration read:

The majority of network setup can be done via the interfaces configuration file at /etc/network/interfaces.

Admolition note.png auto line is required for interfaces that have to be brought up at boot time.
  • Using DHCP to automatically configure the interface
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
  • Configuring the interface manually
auto eth0
    iface eth0 inet static

SSH Server

The Debian rootfs comes with openssh-server package pre-installed, but without SSH keys, which should be regenerated before first use:

root@cl-debian:~# dpkg-reconfigure openssh-server


The Linux file system image is designed to suit different kernel versions and configurations. Therefore, during the operating system startup, consoles at several serial ports and LCD display are enabled. Some of these devices may not be supported, either because of kernel versions incompatibilities, or because the kernel was not configured to support these devices. systemd is able to configure most of them. Detail information can be found here:

X Windows system

The CompuLab distribution contains full featured X Windows system with the Xfce window manager.
By default, Xfce is initiated automatically during startup. Xfce can be initiated manually by typing startx.
USB mouse and keyboard should be connected for interaction with X Windows.

Use the following credentials to login to the Xfce window manager:

User: compulab
Password: compulab

Software Management

The Debian Linux image for CL-SOM-iMX7 and derived products includes all the information required to use Debian package management utilities. You can use apt-get and dpkg out of the box.

Analog Audio

IOT-GATE-iMX7 and SBC-IOT-iMX7 provides an analog audio interface, which is registered as a standard ALSA sound card. Use aplay -l to list all sound cards and digital audio devices registered on the system:

root@cl-rootfs:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: clsomimx7 [cl-som-imx7], device 0: 308a0000.sai-wm8731-hifi wm8731-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Analog Audio Playback

In order to play back a sound file make use of the aplay application.

  • aplay -L can be used for listing of all pcm devices.

Here is a sample output of aplay -L command:

root@cl-rootfs:~# aplay -L
    Discard all samples (playback) or generate zero samples (capture)
    Default Audio Device
    Default Audio Device
    Direct sample mixing device
    Direct sample snooping device
    Direct hardware device without any conversions
    Hardware device with all software conversions

The next command can be used for audio play back:

root@cl-rootfs:~# aplay -D sysdefault <wav-file>

Audio Input Settings

CL-SOM-iMX7 provides an audio capturing feature from either Mic or Line In input sources. alsamixer or amixer can be used in order to switch between these inputs.

  • alsamixer
Capture Volume => 100
Line Capture Switch => off
Mic Capture Switch => on
Input Mux => Mic
  • amixer
amixer cset numid=1 65536
amixer -c 0 cset numid=3 31,31
amixer -c 0 cset numid=4 0
amixer -c 0 cset numid=6 1
amixer -c 0 cset numid=14 1
Line In
  • alsamixer
Capture Volume => 100
Line Capture Switch => on
Mic Capture Switch => off
Input Mux => Line In
  • amixer
amixer cset numid=1 65536
amixer -c 0 cset numid=3 31
amixer -c 0 cset numid=4 1
amixer -c 0 cset numid=6 0
amixer -c 0 cset numid=14 0

Sample Audio Recording

As soon as the correct input values have been set, audio signal can be captured. Here is a sample command that shows the arecord usage for capturing audio signal from the selected input line.

root@cl-rootfs:~# arecord -D sysdefault -d 10 -f dat -t wav /tmp/out.wav


CL-SOM-iMX7 features 802.11b/g/n wireless connectivity solution, implemented with a TI WiLink8 Combo module.

WiFi Initialization

  • WiFi requires no user interaction for being configured. The driver gets loaded automatically.

Make sure that the WiFi driver is loaded:

root@cl-rootfs:~# lsmod | grep wl18xx
wl18xx                 70950  0

The WiFi driver can be loaded manually:

root@cl-rootfs:~# modprobe wl18xx
	wlcore: ERROR could not get configuration binary ti-connectivity/wl18xx-conf.bin: -2
	wlcore: WARNING falling back to default config
	wlcore: wl18xx HW: 183x or 180x, PG 2.2 (ROM 0x11)
	wlcore: loaded
  • iwconfig command from wireless-tools package can be used to retrieve detailed information about the WiFi interfaces:
root@cl-rootfs:~# iwconfig wlan0
wlan0     IEEE 802.11abgn  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
  • Activate the interface:
root@cl-rootfs:~# ifconfig wlan0 up
  • Sample WiFi scanning:
root@cl-rootfs:~# iwlist wlan0 scan

The output will show the list of Access Points and Ad-Hoc cells in range. For more information about connecting to wireless networks and tuning WiFi interfaces refer to “wpa_supplicant” and “wireless-tools” man pages.


  • Configuration sample

Please open a wpa_supplicant configuration file bellow and put a network name and a password into the "ssid" and "psk" fields respectively.

root@cl-rootfs:~# cat /etc/wpa_supplicant.conf

  • Sample run
root@cl-rootfs:~# ifconfig wlan0 up
root@cl-rootfs:~# wpa_supplicant -B -Dwext -c /etc/wpa_supplicant.conf -i wlan0
root@cl-rootfs:~# dhclient wlan0


CL-SOM-iMX7 features Bluetooth 4.1 BLE interface, implemented with a TI WiLink8 Combo module.

Host Controller Interface (HCI) Initialization

  • HCI requires no user interaction for being configured. The driver gets loaded automatically unless this option has been disabled by putting a black list rule for this device.

Make sure that the Bluetooth driver is loaded:

root@cl-debian:~# lsmod | grep hci_uart
hci_uart               10445  1

The Bluetooth driver can be loaded manually:

root@cl-rootfs:~# modprobe hci_uart
  • HCI device configuration utility can be run to retrieve detailed information about the Bluetooth interfaces:
root@cl-rootfs:~# hciconfig hci0 -a
hci0:   Type: Primary  Bus: UART
        BD Address: 3C:A3:08:A8:03:B9  ACL MTU: 1021:6  SCO MTU: 180:4
        UP RUNNING 
        RX bytes:746 acl:0 sco:0 events:49 errors:0
        TX bytes:3441 acl:0 sco:0 commands:49 errors:0
        Features: 0xff 0xfe 0x2d 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
        Link policy: RSWITCH HOLD SNIFF 
        Link mode: SLAVE ACCEPT 
        Name: 'cl-debian'
        Class: 0x0c0000
        Service Classes: Rendering, Capturing
        Device Class: Miscellaneous, 
        HCI Version: 4.1 (0x7)  Revision: 0x0
        LMP Version: 4.1 (0x7)  Subversion: 0xac03
        Manufacturer: Texas Instruments Inc. (13)
  • If the HCI device is not running, use the below command to enable the HCI device:
root@cl-rootfs:~# hciconfig hci0 up
  • HCI Inquire remote devices.
root@cl-rootfs:~# hcitool scan
Scanning ...

Bluez5 & PulseAudio

Debian stretch/sid is using BlueZ 5 and PluseAudio 5, which are fairly new.
BlueZ 5 dropped support for alsa, so the solution for now is to use PulseAudio.
PulseAudio 5 only supports the A2DP profile and not HSP/HFP.

  • Software to install pulseaudio, pulseaudio-module-bluetooth
Admolition note.png debian-image.tar.bz2 has all these packages pre-installed. Continue to the Start PulseAudio section if you use this root filesystem.
Install and configure PulseAudio
root@cl-rootfs:~# apt-get install --no-install-recommends pulseaudio pulseaudio-module-bluetooth
  • Create a systemd service for running pulseaudio as the pulse user.
root@cl-rootfs:~# cat << eof > /etc/systemd/system/pulseaudio.service
Description=Pulse Audio

ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm


root@cl-rootfs:~# chown pulse:pulse /etc/systemd/system/pulseaudio.service
  • Create a dbus configuration file for running pulseaudio. Give the pulse user permission to use Bluetooth.
root@cl-rootfs:~# cat << eof > /etc/dbus-1/system.d/pulseaudio-bluetooth.conf

  <policy user="pulse">
    <allow send_destination="org.bluez"/>


root@cl-rootfs:~# chmod 0666 /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
  • Paste the following lines to the end of /etc/pulse/
root@cl-rootfs:~# cat << eof >> /etc/pulse/
### Automatically load driver modules for Bluetooth hardware
load-module module-bluetooth-policy

load-module module-bluetooth-discover
  • Create /var/run/pulse/.config/pulse directory. Change its ownership.
root@cl-rootfs:~# mkdir -p /var/run/pulse/.config/pulse
root@cl-rootfs:~# chown -R pulse:pulse /var/run/pulse
  • Make the root belong to the pulse-access,audio groups
root@cl-rootfs:~# usermod -a -G pulse-access,audio root
Start PulseAudio
  • Start PulseAudio service
root@cl-rootfs:~# systemctl daemon-reload
root@cl-rootfs:~# systemctl start pulseaudio.service
  • Make sure that the service is active, running and reports on no errors.
root@cl-rootfs:~# systemctl status pulseaudio.service
   Loaded: loaded (/etc/systemd/system/pulseaudio.service; disabled)
   Active: active (running) since Mon 2015-07-20 12:00:13 UTC; 1min 34s ago
 Main PID: 805 (pulseaudio)
   CGroup: /system.slice/pulseaudio.service
           └─805 /usr/bin/pulseaudio --system --disallow-exit --disable-shm
Bluez5 pairing

PulseAudio 5.x supports A2DP per default.
Make sure the following packages are installed: pulseaudio pulseaudio-module-bluetooth pulseaudio-utils, bluez, bluez-tools.

Admolition note.png Without pulseaudio-module-bluetooth you won't be able to connect after the next pairing and you won't get any usable error messages.
  • Start the Bluetooth system:
root@cl-rootfs:~# systemctl start bluetooth

Now we can use the bluetoothctl command line utility to pair and connect. Run

root@cl-rootfs:~# bluetoothctl

to be greeted by its internal command prompt.Then enter:

[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on

Now make sure that your headset is in pairing mode. It should be discovered shortly. For example,

[NEW] Device 00:07:A4:F2:B3:CB Motorola HT820

shows a device that calls itself "Motorola HT820" and has MAC address 00:07:A4:F2:B3:CB. We will now use that MAC address to initiate the pairing:

[bluetooth]# pair 00:07:A4:F2:B3:CB

After pairing, you also need to explicitly connect the device:

[bluetooth]# connect 00:07:A4:F2:B3:CB

If everything works correctly, you now have a separate output device in PulseAudio.
You can now disable scanning again and exit the program:

[bluetooth]# scan off
[bluetooth]# exit
Playback using PulseAudio
Admolition note.png Next examples assume that the device mac address is 00_07_A4_F2_B3_CB
  • Show the PulseAudio device
root@cl-rootfs:~# pactl list cards  | awk '/00_07_A4_F2_B3_CB/' RS=""
Card #1                                                                                                                                                                     
        Name: bluez_card.00_07_A4_F2_B3_CB                                                                                                                                  
        Driver: module-bluez5-device.c                                                                                                                                      
        Owner Module: 13                                                                                                                                                    
                device.description = "Motorola HT820"                                                                                                                       
                device.string = "00:07:A4:F2:B3:CB"                                                                                                                         
                device.api = "bluez"                                                                                                                                        
                device.class = "sound"                                                                                                                                      
                device.bus = "bluetooth"                                                                                                                                    
                device.form_factor = "headset"                                                                                                                              
                bluez.path = "/org/bluez/hci0/dev_00_07_A4_F2_B3_CB"                                                                                                        
                bluez.class = "0x240404"                                                                                                                                    
                bluez.alias = "Motorola HT820"                                                                                                                              
                device.icon_name = "audio-headset-bluetooth"                                                                                                                
                device.intended_roles = "phone"                                                                                                                             
                headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: no)
                a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
                off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
        Active Profile: a2dp_sink
                headset-output: Headset (priority: 0, latency offset: 0 usec)
                        Part of profile(s): headset_head_unit, a2dp_sink
                headset-input: Headset (priority: 0, latency offset: 0 usec, not available)
                        Part of profile(s): headset_head_unit
  • Make sure the active card profile is a2dp_sink. Otherwise switch to it:
# pactl set-card-profile 1 a2dp_sink
  • Show the PulseAudio sink
root@cl-rootfs:~# pactl list sinks | awk '/00_07_A4_F2_B3_CB/' RS=""
Sink #2
        State: SUSPENDED
        Name: bluez_sink.00_07_A4_F2_B3_CB.a2dp_sink
        Description: Motorola HT820
        Driver: module-bluez5-device.c
        Sample Specification: s16le 2ch 48000Hz
        Channel Map: front-left,front-right
        Owner Module: 13
        Mute: no
        Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor Source: bluez_sink.00_07_A4_F2_B3_CB.a2dp_sink.monitor
        Latency: 0 usec, configured 0 usec
                bluetooth.protocol = "a2dp_sink"
                device.description = "Motorola HT820"
                device.string = "00:07:A4:F2:B3:CB"
                device.api = "bluez"
                device.class = "sound"
                device.bus = "bluetooth"
                device.form_factor = "headset"
                bluez.path = "/org/bluez/hci0/dev_00_07_A4_F2_B3_CB"
                bluez.class = "0x240404"
                bluez.alias = "Motorola HT820"
                device.icon_name = "audio-headset-bluetooth"
                device.intended_roles = "phone"
                headset-output: Headset (priority: 0)
        Active Port: headset-output
  • Play sound using paplay. Example:
root@cl-rootfs:~# paplay -d bluez_sink.00_07_A4_F2_B3_CB.a2dp_sink /path/to/<audio-file.wav>

Controller–area network (CAN)

IOT-GATE-iMX7 and SBC-IOT-iMX7 assembled with Y configuration option feature a Flexible Controller Area Network (FLEXCAN) interface. The FLEXCAN implements full CAN protocol version 2.0B and supports both the standard and the extended frame format as well as a programmable data bit rate up to 1Mbit/s.
CAN interface is routed to RJ11 connector P9. Connector pin-out is described in section 5.11 of the IOT-GATE-IMX7 reference guide.

Device tree blob

Using CAN bus interface requires a dedicated device-tree blob.
The following U-Boot command should be used to select the appropriate device tree blob:

CL-SOM-iMX7 # setenv fdtfile imx7d-sbc-iot-imx7-can.dtb
CL-SOM-iMX7 # saveenv
Software installation
  • Use the following command to install can-utils:
root@cl-rootfs:~# apt-get install --no-install-recommends can-utils
Loading CAN modules

If the FLEXCAN driver and/or Raw CAN protocol compiled as module(s), they must be loaded prior to enabling CAN interface.

  • The FLEXCAN driver gets loaded automatically. Make sure it is loaded:
root@cl-rootfs:~# lsmod | grep can
flexcan                102  0
The FLEXCAN driver can be loaded manually:
root@cl-rootfs:~# modprobe flexcan
30a00000.can supply xceiver not found, using dummy regulator
flexcan 30a00000.can: device registered (reg_base=f5a00000, irq=277)
30a10000.can supply xceiver not found, using dummy regulator
flexcan 30a10000.can: device registered (reg_base=f5a10000, irq=278)
  • Load Raw CAN protocol module:
root@cl-rootfs:~# modprobe can-raw
can: raw protocol (rev 20120528)
CAN interface configuration

It is recommended configure the CAN interface, with the iproute2 utilities.

  • To make sure the right ip utility is used, run:
root@cl-rootfs:~# ip -V
ip utility, iproute2-ss151103
  • Configure the CAN interface bit-rate to 125 Kbits/sec (values of up to 1Mbit/sec are supported):
root@cl-rootfs:~# ip link set can0 type can bitrate 125000
  • Enable the CAN interface:
root@cl-rootfs:~# ip link set can0 up
flexcan 30a00000.can can0: writing ctrl=0x0b312005
Send/Receive packets

Use cansend and candump utilities to send and receive packets via CAN interface.

  • Send standard CAN frame (on the first device):
root@cl-rootfs:~# cansend can0 111#1122334455667788
  • Send extended CAN frame (on the first device):
root@cl-rootfs:~# cansend can0 11111111#1122334455667788
  • Dump all received data frames as well as error frames (on the second device):
root@cl-rootfs:~# candump any,0:0,#FFFFFFFF
  can0  111  [8] 11 22 33 44 55 66 77 88
  can0  11111111  [8] 11 22 33 44 55 66 77 88

4G/3G Cellular Modem

Both IOT-GATE-iMX7 Internet of Things Gateway and SBC-IOT-iMX7 Internet of Things Single Board Computer are equipped with on-board micro-SIM card socket and support cellular communication using 4G/3G cellular modem with USB interface in mini-PCIe form-factor. Following 3G cellular modules have been tested:

In order to use 4G/3G cellular modem the several software packages have to be installed.

Admolition note.png debian-image.tar.bz2 has all these packages pre-installed. Continue to the Loading kernel modules section if you use this root filesystem.

Installing Debian packages

root@cm-debian:~# apt-get install libpcap0.8 libuniconf4.6 libwvstreams4.6-base libwvstreams4.6-extras ppp wvdial

Loading kernel modules

Device driver modules require no user interaction and get loaded automatically. If for some reason device driver modules are not loaded automatically, please load them manually:

  • USB Driver for GSM modems and Qualcomm MSM Interface (QMI) WWAN driver are required for SIMcom modules:
root@cl-som-imx7-sid:~# modprobe option
root@cl-som-imx7-sid:~# modprobe qmi_wwan
  • USB Abstract Control Model driver is required for Telit HE910-D:
root@cl-som-imx7-sid:~# modprobe cdc-acm

Point-to-Point protocol (PPP) drivers must be loaded manually prior to dialing:

root@cl-som-imx7-sid:~# modprobe ppp_generic
root@cl-som-imx7-sid:~# modprobe ppp_async
root@cl-som-imx7-sid:~# modprobe ppp_synctty
root@cl-som-imx7-sid:~# modprobe bsd_comp
root@cl-som-imx7-sid:~# modprobe ppp_deflate


WvDial is a Point-to-Point Protocol dialer that automatically detects modem, and can log into almost any Internet Service Provider without a complicated configuration. First, edit the wldial configuration file. Please use the a correct ISP APN instead of YOUR_ISP_APN stub:

root@cl-som-imx7-sid:~# cat /etc/wvdial.conf
[Dialer cellular]

# Your modem device. Usually /dev/ttyUSB0 or /dev/ttyACM0
#Modem = /dev/ttyACM0
Modem = /dev/ttyUSB3

# Port speeds that're worth testing:
# 921600
# 460800
# 115200
#  57600
Baud = 115200

# If your SIM card has a PIN, comment this line, uncomment the next one, and
# change the PIN shown to your PIN.
Init = ATZ
# Init = ATZ+CPIN="0000"

# If you know your ISP's APN, specify it instead of YOUR_ISP_APN below.
# If you don't, you may be able to find out on the 'net, or from tech
# support.
# There's also an APN table at .
# If you can't find it, you might be able to dial out without setting an APN
# (especially from a mobile phone). Just comment this line and uncomment
# the next one.
#Init2 = AT+CGDCONT=1,"IP"

# Most services/devices dial with *99# . A few seem to require *99***1#
Phone = *99#

# These often suffice, but your ISP might require different details. They're
# often dummy details used for all users on the ISP, frequently the ISP's
# name, but some ISP's do require you to use a real username and password.
Username = dummy
Password = dummy

The following command can be used for dialing:

root@cm-debian:~# wvdial cellular &


IOT-GATE-iMX7 and SBC-IOT-iMX7 assembled without the Y configuration option feature a half-duplex RS485 port with a data bit rate of up to 12Mbit/s.
The RS485 interface is routed to RJ11 connector P9. Connector pin-out is described in section 5.11 of the IOT-GATE-IMX7 reference guide.

Device tree blob

Using the RS485 interface requires a dedicated device-tree blob.
The following U-Boot command should be used to select the appropriate device tree blob:

CL-SOM-iMX7 # setenv fdtfile imx7d-sbc-iot-imx7-rs485-hdx.dtb
CL-SOM-iMX7 # saveenv


Serial terminal emulator application can be used to test the RS485 port.

  • Use the following commands to install the Minicom application (terminal emulator):
root@cl-debian:~# apt-get update
root@cl-debian:~# apt-get -y install minicom
  • Use the following command to start Minicom with the user space device of the RS485 (/dev/ttymxc6).
root@cl-debian:~# minicom -D /dev/ttymxc6
  • Follow the following steps to disable hardware flow control
    • Open the menu "Configure Minicom" with CTRL-a followed by the letter 'o'.
    • Select "Serial port setup"
    • Press the letter 'f'.
    • Press the Esc key twice.
  • The characters that are typed in the terminal are transmitted to the RS485 port.
  • The characters that are received from the RS485 port are displayed in the terminal.
  • Press CTRL-a followed by the letter 'x' to exit from Minicom


The support for MMC/SD card on Compulab devices based on the NXP iMX7 SoC is built into the Linux kernel. To mount a memory card, monitor /proc/partitions to see what partitions were detected on the MMC/SD card. For example, suppose an MMC/SD partition you'd like to mount is mmcblk0p1 then:

if [ ! -d /mnt/mmcblk0p1 ]; then mkdir /mnt/mmcblk0p1; fi
mount /dev/mmcblk0p1 /mnt/mmcblk0p1

GPIO access

Linux provides simple and convenient GPIO access via sysfs interface. A GPIO should be exported using /sys/class/gpio/export. After the GPIO is exported it is possible to change its direction and value using /sys/class/gpio/gpioX/direction and /sys/class/gpio/gpioX/value attributes.


The following example demonstrates how to configure GPIO 140 as output and set value to high:

root@cl-rootfs:~# echo 140 > /sys/class/gpio/export
root@cl-rootfs:~# echo out > /sys/class/gpio/gpio140/direction
root@cl-rootfs:~# echo 1 > /sys/class/gpio/gpio140/value
Admolition note.png The above example assumes that the pinmux configuration of the corresponding pin is set to GPIO mode and the GPIO 140 is not requested in the Linux kernel.

See also