Difference between revisions of "Linux drivers development"
From ArmadeusWiki
m (→Adding your own drivers) |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 8: | Line 8: | ||
Our custom drivers build is integrated to the Linux build system (kbuild). | Our custom drivers build is integrated to the Linux build system (kbuild). | ||
− | You can select, in the linux "menuconfig | + | You can select, in the linux "menuconfig / xconfig" tool, which Armadeus drivers you want to add on your target. |
− | drivers you want to add on your target. | + | <pre class="host"> |
− | + | $ make linux-menuconfig | |
+ | </pre> | ||
+ | |||
+ | <pre class="config"> | ||
+ | Device Drivers ---> | ||
+ | Armadeus specific drivers ---> | ||
+ | </pre> | ||
Here is the way to add custom drivers: | Here is the way to add custom drivers: | ||
− | * | + | * change current dir to your armadeus view |
− | * put reference to this directory in the | + | * in ''target/linux/modules/'', add a directory for your driver (ex ''toto/'') |
− | * in toto/ put your driver source code and create 2 files, Kconfig and Makefile. (Use | + | * put reference to this directory in the ''target/linux/modules/Makefile'' and ''target/linux/modules/Kconfig'' files |
+ | * in ''toto/'' put your driver source code and create 2 files, ''Kconfig'' and ''Makefile''. (Use ''target/linux/modules/gpio/Makefile'' & ''Kconfig'' as examples.) | ||
− | To compile the modules, either launch: | + | To compile all the custom modules, either launch: |
− | + | <pre class="host"> | |
+ | $ make -C target/linux/modules/ | ||
+ | </pre> | ||
or | or | ||
− | + | <pre class="host"> | |
+ | $ make linux | ||
+ | </pre> | ||
− | + | Only ''make linux'' will install the modules in the target rootfs image | |
== i.MX register access from driver == | == i.MX register access from driver == | ||
− | To access i.MX registers from your driver, please use the | + | To access i.MX registers from your driver, please use the ''readw/readl/writew/writel'' helper functions. |
− | + | Take a look at at ''arch/arm/mach-mx2/apf27.c'' or ''arch/arm/mach-imx/apf9328.c'' to have examples. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
==Debug== | ==Debug== | ||
− | Activate debug messages (from pr_debug() function) on console: | + | * Activate debug messages (from pr_debug() function) on console: |
+ | <pre class="apf"> | ||
# echo 8 > /proc/sys/kernel/printk | # echo 8 > /proc/sys/kernel/printk | ||
+ | </pre> | ||
== Useful Links == | == Useful Links == | ||
* http://old.kernelnewbies.org/documents/kdoc/kernel-api/linuxkernelapi.html | * http://old.kernelnewbies.org/documents/kdoc/kernel-api/linuxkernelapi.html | ||
* http://lwn.net/Articles/driver-porting/ | * http://lwn.net/Articles/driver-porting/ | ||
− | |||
− |
Latest revision as of 17:55, 4 September 2013
This page summarizes all you need to know before starting to develop Linux drivers for your Armadeus board
Contents
[hide]Recommended reading before starting
We advise you to read (not necessarly understand ;-) ):
- Linux Device Drivers (3rd edition) book: http://lwn.net/Kernel/LDD3/
Adding your own drivers
Our custom drivers build is integrated to the Linux build system (kbuild). You can select, in the linux "menuconfig / xconfig" tool, which Armadeus drivers you want to add on your target.
$ make linux-menuconfig
Device Drivers ---> Armadeus specific drivers --->
Here is the way to add custom drivers:
- change current dir to your armadeus view
- in target/linux/modules/, add a directory for your driver (ex toto/)
- put reference to this directory in the target/linux/modules/Makefile and target/linux/modules/Kconfig files
- in toto/ put your driver source code and create 2 files, Kconfig and Makefile. (Use target/linux/modules/gpio/Makefile & Kconfig as examples.)
To compile all the custom modules, either launch:
$ make -C target/linux/modules/
or
$ make linux
Only make linux will install the modules in the target rootfs image
i.MX register access from driver
To access i.MX registers from your driver, please use the readw/readl/writew/writel helper functions. Take a look at at arch/arm/mach-mx2/apf27.c or arch/arm/mach-imx/apf9328.c to have examples.
Debug
- Activate debug messages (from pr_debug() function) on console:
# echo 8 > /proc/sys/kernel/printk