Difference between revisions of "Linux drivers development"

From ArmadeusWiki
Jump to: navigation, search
(Useful Links)
m (Adding your own drivers)
 
(8 intermediate revisions by 3 users not shown)
Line 5: Line 5:
 
* Linux Device Drivers (3rd edition) book: http://lwn.net/Kernel/LDD3/
 
* Linux Device Drivers (3rd edition) book: http://lwn.net/Kernel/LDD3/
  
== Driver compilation ==
+
== Adding your own drivers ==
  
 
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"/"xconfig" tool, which Armadeus
+
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. (only gpio, ppdev & ps2keyboard are
+
<pre class="host">
integrated yet).
+
$ 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:
* in armadeus/target/linux/modules/, add a directory for you driver (ex toto/)
+
* change current dir to your armadeus view
* put reference to this directory in the armadeus/target/linux/modules/Makefile and armadeus/target/linux/modules/Kconfig files
+
* 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 armadeus/target/linux/modules/gpio/Makefile & Kconfig as examples.)
+
* 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:
* "make" in armadeus/target/linux/modules/ directory
+
<pre class="host">
 +
$ make -C target/linux/modules/
 +
</pre>
 
or
 
or
* "make linux" in armadeus/
+
<pre class="host">
 +
$ make linux
 +
</pre>
  
only "make linux" will install the modules in target rootfs image
+
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 macros defined in:
+
To access i.MX registers from your driver, please use the ''readw/readl/writew/writel'' helper functions.
#include <arch/arm/imx-regs.h>
+
Take a look at at ''arch/arm/mach-mx2/apf27.c'' or ''arch/arm/mach-imx/apf9328.c'' to have examples.
 
+
For example (access to PWM control register):
+
//enable the PWM
+
PWMC |= PWMC_EN;
+
  
 
==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 16:55, 4 September 2013

This page summarizes all you need to know before starting to develop Linux drivers for your Armadeus board

Recommended reading before starting

We advise you to read (not necessarly understand ;-) ):

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

Useful Links