Size: 3346
Comment: generic task page for IIO driver project
|
Size: 2808
Comment: /* added new tasks for IIO */
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
''Mentors:'' [http://kernelnewbies.org/OctavianPurdila Octavian Purdila], [http://kernelnewbies.org/DanielBaluta Daniel Baluta] | These tasks are for you to get familiar with the IIO subsystem. Please email your solutions to daniel.baluta at intel dot com and octavian.purdila at intel dot com. Your email should have the subject '''Task XX: Short task description''' |
Line 32: | Line 35: |
* Show that the modules were successfully loaded . Send an email to mentors listed at the top of the page, with the output of the following commands | * Show that the modules were successfully loaded. |
Line 38: | Line 41: |
Task 02: * 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 |
|
Line 41: | Line 59: |
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 {{{iio/drivers/staging/iio/Documentation}}}. [[BR]] | 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/}}}. [[BR]] |
Line 43: | Line 61: |
Task 02: | Task 03: |
Line 45: | Line 63: |
* compile {{{iio_event_monitor.c}}} to obtain an executable called {{{iio_event_monitor}}}. Send an email with the command used for compilation to mentors listed at the top of the page. == IIO sysfs attributes == IIO sysfs attributes should all be documented in {{{Documentation/ABI/testing/sysfs-bus-iio}}}. Have a look at this file, with a focus on the following entries: * /sys/bus/iio/devices/iio:deviceX * /sys/bus/iio/devices/triggerX * /sys/bus/iio/devices/iio:deviceX/buffer * /sys/bus/iio/devices/iio:deviceX/events Task 03: Add missing ABI Documentation * this task asks you to find missing ABI documentation in {{{Documentation/ABI/testing/sysfs-bus-iio}}} (for example look at this [http://www.spinics.net/lists/linux-iio/msg15203.html patch]) * the key structure to be analyzed is [http://lxr.free-electrons.com/source/include/linux/iio/iio.h#L217 struct iio_chan_spec] * use {{{drivers/staging/iio/iio_simple_dummy.c}}} for testing adding new channels to {{{iio_dummy_channels[]}}} array. Then look for the attributes names in {{{/sys/bus/iio/devices/iio:device0}}} and check to see if they are documented in {{{Documentation/ABI/testing/sysfs-bus-iio}}} * make sure that the undocumented ABI has at least one user driver in {{{drivers/iio/}}} or {{{drivers/staging/iio/}}} |
* compile {{{iio_event_monitor.c}}} to obtain an executable called {{{iio_event_monitor}}}. * send us the command(s) used to successfully compoile iio_event_monitor.c |
These tasks are for you to get familiar with the IIO subsystem.
Please email your solutions to daniel.baluta at intel dot com and octavian.purdila at intel dot com. Your email should have the subject Task XX: Short task description
Experimenting with IIO subsystem
For this we will use two kernel modules found in drivers/staging/iio:
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
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
Dummy modules compilation
You need to select the following config options:
CONFIG_IIO_DUMMY_EVGEN - for building iio_dummy_evgen kernel module
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.
Use the following commands for modules compilation:
$ make drivers/staging/iio/iio_dummy_evgen.ko
$ make drivers/staging/iio/iio_dummy.ko
Use the following commands for module loading:
$ insmod iio_dummy_evgen.ko
$ insmod iio_dummy.ko
Task 01:
- Show that the modules were successfully loaded.
- lsmod
- ls -l /sys/bus/iio/devices/
- ls -l /sys/bus/iio/devices/iio:device0/
- ls -l /sys/bus/iio/devices/iio_evgen/
Task 02:
- 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/. BR
Task 03:
compile iio_event_monitor.c to obtain an executable called iio_event_monitor.
- send us the command(s) used to successfully compoile iio_event_monitor.c