Skip to content

Hardware Information and Status

The hardware infomation and status is handled by the YANG model IETF hardware, with deviations and augmentations in infix-hardware.

GPS/GNSS Receivers

Infix supports GPS/GNSS receivers for hardware status monitoring and NTP time synchronization. USB GPS receivers using the USB ACM interface are supported (e.g., u-blox). When connected, devices are automatically discovered and named gps0, gps1, etc.

Current status

admin@example:/> show hardware
HARDWARE COMPONENTS                                           
──────────────────────────────────────────────────────────────
GPS/GNSS Receivers                                           
Name                : gps0
Device              : /dev/gps0
Driver              : u-blox
Status              : Active
Fix                 : 3D
Satellites          : 10/15 (used/visible)
Position            : 59.334567N 18.063456E 42.3m
PPS                 : Available

Available information per receiver:

Field Description
Name Component name (gps0, gps1, ...)
Device Device path (/dev/gps0)
Driver Protocol driver (e.g., u-blox, NMEA, SiRF)
Status Active or Inactive
Fix NONE, 2D, or 3D
Satellites Used/visible count
Position Latitude, longitude, altitude (when fix acquired)
PPS Pulse Per Second signal availability

Configure GPS receiver

GPS receivers are hardware components with class gps. The class is auto-inferred from the component name, similar to WiFi radios (radioN):

admin@example:/> configure
admin@example:/config/> set hardware component gps0
admin@example:/config/> leave

To use a GPS receiver as an NTP reference clock source, see NTP — GPS Reference Clock.

USB Ports

For Infix to be able to control USB port(s), a device tree modification is needed (see alder.dtsi for full example).

 chosen {
   infix {
     usb-ports = <&cp0_usb3_1>;
     usb-port-names = "USB";
   };
 };

Two USB ports are also exposed in QEMU for test purpose.

All USB ports in the system will be disabled during boot due to the file board/common/rootfs/etc/modprobe.d/usbcore.conf. If you do not want Infix to control USB port(s), remove the file or manually enable the USB bus, here is an example:

# Enable the bus
echo 1 > /sys/bus/usb/devices/usb1/authorized

And then enable sub-devices (e.g. USB memory)

# Enable a device plugged into usb1
echo 1 >  /sys/bus/usb/devices/usb1/1-1/authorized

Current status

admin@example:/> show hardware
HARDWARE COMPONENTS                                           
──────────────────────────────────────────────────────────────
Board Information                                            
Model               : FriendlyElec NanoPi R2S
Manufacturer        : FriendlyElec
Serial Number       : 9d1fbfdab6d171ce
Base MAC Address    : 4a:dc:d8:20:0d:85
──────────────────────────────────────────────────────────────
USB Ports                                                    
NAME                                         STATE     OPER   
USB                                          unlocked  enabled
──────────────────────────────────────────────────────────────
Sensors                                                      
NAME                          VALUE                 STATUS    
soc                           44.1 °C               ok        
soc                           44.5 °C               ok        

An USB port can be in two states unlocked and locked. When a port is locked, all connected devices will get power, but never authorized by Linux to use.

Configure USB port

Note

You can only configure USB ports known to the system. See the CLI command show hardware in admin-exec context. (Use do prefix in configure context.)

admin@example:/> configure
admin@example:/config/> set hardware component USB state admin-state unlocked
admin@example:/config/> leave
admin@example:/>

Using a USB Stick

With the USB port unlocked, a memory stick can be used to expand the storage of the device. Plug it in, either directly, or via a USB hub. All partitions of VFAT or exFAT type are automatically mounted to the /media/<LABLEL> directory, e.g., /media/memorystick, or if a partition does not have a label, using the kernel device name, e.g., /media/sda.

Depending on the partition type the the media is either mounted in flush or sync mode to ensure files are properly flushed to the backing store of the memory stick. This to protect against users yanking out a device before file(s) have been written to it.

The only way currently to safely "eject" a USB memory stick is to use umount command from a UNIX shell, which explicitly synchronizes any cached data to disk before returning the prompt:

admin@example:~$ sudo umount /media/log