iio-trig-sysfs driver#
This driver adds a trigger that can be invoked by writing the sysfs file: trigger_now. This approach can be valuable during automated testing or in situations, where other trigger methods are not applicable. For example no RTC or spare GPIOs. Last but not least it allows user space applications to produce triggers.
Documentation#
Adding Linux driver support#
Configure kernel with make menuconfig
(alternatively use make xconfig
or
make qconfig
)
Linux Kernel Configuration
Device Drivers --->
[*] Staging drivers --->
<*> Industrial I/O support --->
--- Industrial I/O support
-*- Enable ring buffer support within IIO
-*- Industrial I/O lock free software ring
-*- Enable triggered sampling support
[--snip--]
*** Triggers - standalone ***
< > Periodic RTC triggers
< > GPIO trigger
<*> SYSFS trigger
< > Blackfin TIMER trigger
sysfs trigger creation and removal#
When sysfs trigger support is enabled in the kernel configuration there will be
a /sys/bus/iio/devices/iio_sysfs_trigger/ folder which can be used for sysfs
trigger management. The folder contains two files “add_trigger” and
“remove_trigger”. New sysfs triggers can be created by writing a ID to the
“add_trigger” file. E.g. echo 0 > add_trigger
. This will create a new sysfs
trigger, which you can access at “/sys/bus/iio/devices/iio:triggerX”, where X is
a the trigger number. Typically it will be 0 for the first trigger, 1 for the
second, etc. The name of the trigger will be “sysfstrigID” where ID is the value
writting to the “add_trigger” file.
To remove a sysfs trigger write the same ID used when registering it to the
“remove_trigger” file. E.g echo 0 > remove_trigger
.
Driver testing#
~$
cd /sys/bus/iio/devices
/sys/bus/iio/devices$
ls
iio:device0
iio:device1
iio:trigger0
/sys/bus/iio/devices$
cd iio\:trigger0
/sys/bus/iio/devices/iio:trigger0$
ls
name subsystem trigger_now uevent
/sys/bus/iio/devices/iio:trigger0$
cat name
sysfstrig0
/sys/bus/iio/devices/iio:trigger0$
echo 1 > trigger_now
/sys/bus/iio/devices/iio:trigger0$
echo 1 > trigger_now