IMX LED Driver TP: Difference between revisions
(New page: {{Under_Construction}} == Proposal == The goal of this tutorial is to build from scratch a simple led driver wire on GPIO of the iMX. This document will describes step by step how to imple...) |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
The goal of this tutorial is to build from scratch a simple led driver wire on GPIO of the iMX. This document will describes step by step how to implement a such driver | The goal of this tutorial is to build from scratch a simple led driver wire on GPIO of the iMX. This document will describes step by step how to implement a such driver | ||
== Howto Load/unload modules == | == Howto Load/unload modules : "hwmon" module == | ||
Loading a module is quite simple once it is compiled and is present in the rootfs of the apf board. | |||
All the compiled driver modules are in the "/lib/modules/<kernel version>/kernel" in the apf rootfs. To list all the loadable modules by the kernel in the board type : | |||
<pre class="apf"> | |||
# find /lib/modules/`uname -r`/kernel -name "*.ko" | |||
/lib/modules/2.6.27.13/kernel/sound/arm/snd-imx-alsa-tsc2102.ko | |||
/lib/modules/2.6.27.13/kernel/sound/arm/snd-mx2.ko | |||
/lib/modules/2.6.27.13/kernel/sound/core/snd-page-alloc.ko | |||
/lib/modules/2.6.27.13/kernel/sound/core/snd-timer.ko | |||
/lib/modules/2.6.27.13/kernel/sound/core/snd.ko | |||
/lib/modules/2.6.27.13/kernel/sound/core/snd-pcm.ko | |||
/lib/modules/2.6.27.13/kernel/sound/soundcore.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/spi/tsc2102.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/scsi/scsi_wait_scan.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/hwmon/hwmon.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/input/touchscreen/tsc2102_ts.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/video/backlight/lcd.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/video/backlight/backlight.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/armadeus/max1027/max1027.ko | |||
/lib/modules/2.6.27.13/kernel/drivers/armadeus/backlight/imx_bl.ko | |||
</pre> | |||
For example, I will load "/lib/modules/2.6.27.13/kernel/drivers/hwmon/hwmon.ko" module : | |||
<pre class="apf"> | |||
# modprobe hwmon | |||
# | |||
</pre> | |||
To list all mod loaded : | |||
<pre class="apf"> | |||
# lsmod | |||
Module Size Used by Not tainted | |||
hwmon 2356 0 | |||
</pre> | |||
To unload it just type : | |||
<pre class="apf"> | |||
# rmmod hwmon | |||
# | |||
</pre> | |||
TBC | |||
== Howto Build a simple char module and load/unload it : the "Hello World" module == | |||
The "Hello World" module code is quite simple have only load and unload fonction. | |||
=== Create required folder and files === | |||
Create a hello folder in <armadeus_directory>/target/linux/modules/. On the host computer type : | |||
<pre class="host"> | |||
cd <armadeus_directory>/target/linux/modules/ | |||
mkdir hello | |||
</pre> | |||
==== Hello.c source file ==== | |||
<source lang="c"> | |||
#include <linux/module.h> /* Default module librairies TBC */ | |||
#include <linux/kernel.h> | |||
/* Print "Hello, world\n" with KERN_ALERT level (stdio TBC) */ | |||
static int hello_init(void){ | |||
printk(KERN_ALERT "Hello, world\n"); | |||
return 0; | |||
} | |||
/* Print "Goodbye, cruel world\n" with KERN_ALERT level (stdio TBC) */ | |||
static void hello_exit(void){ | |||
printk(KERN_ALERT "Goodbye, cruel world\n"); | |||
} | |||
module_init(hello_init); /* Set hello_init function as the module init one (called when module load) */ | |||
module_exit(hello_exit); /* Set hello_exit function as the module exit one (called when module unload) */ | |||
MODULE_LICENSE("GPL"); /* Set the license module */ | |||
</source> | |||
==== Makefile file ==== | |||
<source lang="text"> | |||
# Part executed when called from kernel build system: | |||
ifneq ($(KERNELRELEASE),) | |||
obj-$(CONFIG_ARMADEUS_LED_XAV_DRIVER) += hello.o | |||
#hello-objs := hello.o | |||
# Part executed when called from standard make in this directory: | |||
# (preferably use Makefile in parent directory) | |||
else | |||
ARMADEUS_BASE_DIR=../../../.. | |||
include $(ARMADEUS_BASE_DIR)/Makefile.in | |||
KDIR := $(ARMADEUS_LINUX_DIR) | |||
PWD := $(shell pwd) | |||
# Armadeus custom drivers common targets: | |||
include ../Makefile.in | |||
endif | |||
</source> | |||
TBC | |||
== Howto Provide read/write commands to the user though /dev/hello : "Hello World Read Write" module == | |||
== Howto Build a register use module : "iMX LED" module == |
Latest revision as of 20:57, 30 March 2009
Page under construction...
Informations on this page are not guaranteed !!
Proposal
The goal of this tutorial is to build from scratch a simple led driver wire on GPIO of the iMX. This document will describes step by step how to implement a such driver
Howto Load/unload modules : "hwmon" module
Loading a module is quite simple once it is compiled and is present in the rootfs of the apf board. All the compiled driver modules are in the "/lib/modules/<kernel version>/kernel" in the apf rootfs. To list all the loadable modules by the kernel in the board type :
# find /lib/modules/`uname -r`/kernel -name "*.ko" /lib/modules/2.6.27.13/kernel/sound/arm/snd-imx-alsa-tsc2102.ko /lib/modules/2.6.27.13/kernel/sound/arm/snd-mx2.ko /lib/modules/2.6.27.13/kernel/sound/core/snd-page-alloc.ko /lib/modules/2.6.27.13/kernel/sound/core/snd-timer.ko /lib/modules/2.6.27.13/kernel/sound/core/snd.ko /lib/modules/2.6.27.13/kernel/sound/core/snd-pcm.ko /lib/modules/2.6.27.13/kernel/sound/soundcore.ko /lib/modules/2.6.27.13/kernel/drivers/spi/tsc2102.ko /lib/modules/2.6.27.13/kernel/drivers/scsi/scsi_wait_scan.ko /lib/modules/2.6.27.13/kernel/drivers/hwmon/hwmon.ko /lib/modules/2.6.27.13/kernel/drivers/input/touchscreen/tsc2102_ts.ko /lib/modules/2.6.27.13/kernel/drivers/video/backlight/lcd.ko /lib/modules/2.6.27.13/kernel/drivers/video/backlight/backlight.ko /lib/modules/2.6.27.13/kernel/drivers/armadeus/max1027/max1027.ko /lib/modules/2.6.27.13/kernel/drivers/armadeus/backlight/imx_bl.ko
For example, I will load "/lib/modules/2.6.27.13/kernel/drivers/hwmon/hwmon.ko" module :
# modprobe hwmon #
To list all mod loaded :
# lsmod Module Size Used by Not tainted hwmon 2356 0
To unload it just type :
# rmmod hwmon #
TBC
Howto Build a simple char module and load/unload it : the "Hello World" module
The "Hello World" module code is quite simple have only load and unload fonction.
Create required folder and files
Create a hello folder in <armadeus_directory>/target/linux/modules/. On the host computer type :
cd <armadeus_directory>/target/linux/modules/ mkdir hello
Hello.c source file
#include <linux/module.h> /* Default module librairies TBC */
#include <linux/kernel.h>
/* Print "Hello, world\n" with KERN_ALERT level (stdio TBC) */
static int hello_init(void){
printk(KERN_ALERT "Hello, world\n");
return 0;
}
/* Print "Goodbye, cruel world\n" with KERN_ALERT level (stdio TBC) */
static void hello_exit(void){
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init); /* Set hello_init function as the module init one (called when module load) */
module_exit(hello_exit); /* Set hello_exit function as the module exit one (called when module unload) */
MODULE_LICENSE("GPL"); /* Set the license module */
Makefile file
# Part executed when called from kernel build system:
ifneq ($(KERNELRELEASE),)
obj-$(CONFIG_ARMADEUS_LED_XAV_DRIVER) += hello.o
#hello-objs := hello.o
# Part executed when called from standard make in this directory:
# (preferably use Makefile in parent directory)
else
ARMADEUS_BASE_DIR=../../../..
include $(ARMADEUS_BASE_DIR)/Makefile.in
KDIR := $(ARMADEUS_LINUX_DIR)
PWD := $(shell pwd)
# Armadeus custom drivers common targets:
include ../Makefile.in
endif
TBC