= Welcome to IIO tasks page = This page is dedicated to students applying for GSoC/Outreachy programs. It also aims to help newcomers getting started with the Industrial IO subsystem, offering pointers to documentation and small tasks. For GSoC/Outreachy students: Please use a single email thread for communication. During the application always reply to this thread if you have a question or sending the solution for a task. The email should have the following format: subject: GSoC IIO project: Your Name body: = Experimenting with IIO subsystem = For this we will use two kernel modules found in {{{drivers/iio/dummy}}}: * {{{iio_dummy.ko}}} - example IIO driver to demonstrate existing functionality * core implementation can be found in {{{iio_simple_dummy.c}}} * buffer functionality is implemented in {{{iio_simple_dummy_buffer.c}}} * events functionality is implemented in {{{iio_simple_dummy_events.c}}} * {{{iio_dummy_evgen.ko}}} - generates ''fake'' events interrupts to be used by the {{{iio_dummy}}} example driver * implementation for this module is in {{{iio_dummy_evgen.c}}} == Dummy modules compilation == You need to select the following config options: * {{{CONFIG_IIO_CONFIGFS}}} - for creating the dummy device under configfs * {{{CONFIG_IIO_SIMPLE_DUMMY}}} - for building {{{iio_dummy}}} kernel module * {{{CONFIG_IIO_SIMPLE_DUMMY_EVENTS}}}, {{{CONFIG_IIO_SIMPLE_DUMMY_BUFFER}}} should be selected for events and buffer functionality. * {{{CONFIG_IIO_DUMMY_EVGEN}}} - for building {{{iio_dummy_evgen}}} kernel module * Mount the configfs filesystem: read Documentation/iio/iio_configfs.txt Use the following commands for modules compilation: * {{{$ make drivers/iio/dummy/iio_dummy_evgen.ko}}} * {{{$ make drivers/iio/dummy/iio_dummy.ko}}} Use the following commands for module loading: * {{{$ insmod iio_dummy_evgen.ko}}} * {{{$ insmod iio_dummy.ko}}} Use the following command to create your dummy device under the configfs filesystem: * {{{$ mkdir /config/iio/devices/dummy/my_dummy_device}}} Task 01: * Show that config options for IIO dummy modules were correctly selected * send the content of the following command grep IIO .config Task 02: * Show that the modules were successfully loaded. * lsmod | grep dummy * ls -l /config/iio/devices/dummy/ * ls -l /sys/bus/iio/devices/iio:device0/ * ls -l /sys/bus/iio/devices/iio_evgen/ Task 03: * Add channels for a 3-axis compass to iio_simple_dummy module. * Show that channels were successfully added * ls -l /sys/bus/iio/devices/iio:device0/ * ls -l /sys/bus/iio/devices/iio:device0/scan_elements * create a patch with your changes * '''Hints''': * channel type for a compass is IIO_MAGN * users should be able to read raw readings from each axis * users should be able to read a shared scale * users should be able to access data via a buffer * data is unsigned, resolution is 16 bits, storage is 16 bits * compass doesn't support events == IIO event monitor == IIO event monitor is an user space example application which reads events from IIO layer and pretty prints the results. Implementation can be found in {{{iio_event_monitor.c}}} under {{{tools/iio/}}}. <
> Task 04: Compile iio_event_monitor: * compile {{{iio_event_monitor.c}}} to obtain an executable called {{{iio_event_monitor}}}. * send us the command(s) used to successfully compile iio_event_monitor.c Task 05: Read events using iio_event_monitor * run iio_event_monitor without arguments to figure out how it should be used * read events from iio_dummy module * '''Hints''' * Events are generated by iio_dummy_evgen via sysfs (look inside /sys/bus/iio/devices/iio_evgen/) * send us the commands used to read/generate the events == Generic buffer == Task 06: Create triggers using configfs interface. * read Documentation/iio/iio_configfs.txt in order to create an hrtimer software trigger named t1. * where in the sysfs hierarchy does the trigger resides? * sends us the commands used to create the trigger Task 07: Read samples from buffer generated by the iio_dummy module. * compile iio_generic_buffer.c from tools/iio. This program will be used to read data from buffer. * have a look at ./iio_generic_buffer -h options. You will use the trigger ''t1'' created with the previous tasks and ''iio_dummy_part_no'' for IIO device. * send us the full command history = Coding Tasks = Note for all IIO Coding Tasks: * Please use the task page to claim the driver you are going to patch. * Please 'CC outreachy-kernel@googlegroups.com on all questions related to this so everyone can benefit. == Coding Task 1: == For question please send questions in the format mentioned above to daniel.baluta at nxp dot com or the #linux-iio IRC channel (server irc.oftc.net).