Hardware/ARMEBS/3/LinuxDriver
m (→Where to start) |
Marc.pignat (Talk | contribs) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{public}} |
{{TOC right}} | {{TOC right}} | ||
= Linux Driver for ARMEBS3 development guide = | = Linux Driver for ARMEBS3 development guide = | ||
Line 62: | Line 62: | ||
dmesg -c | dmesg -c | ||
Goodbye, cruel world | Goodbye, cruel world | ||
+ | |||
+ | You can download the source code here: [[Media:ARMEBS3-driver-hello.c.zip|hello.c]]. | ||
+ | Here is the makefile to compile the driver: [[Media:ARMEBS3-driver-makefile.zip|Makefile]]. | ||
== Including the driver into the kernel == | == Including the driver into the kernel == | ||
Now we've got a new driver as a module, we're satisfied with it's functionnality, and we want to include it into the kernel. | Now we've got a new driver as a module, we're satisfied with it's functionnality, and we want to include it into the kernel. | ||
For doing this we must include it into the kernel sources. | For doing this we must include it into the kernel sources. | ||
+ | |||
+ | [[Category:Hardware]] [[Category:ARMEBS]] |
Latest revision as of 14:42, 26 June 2015
|
Linux Driver for ARMEBS3 development guide
What is a driver ? (or why do I need a new driver?)
In Linux (like most OSes) a simple application can't access hardware. If you want accessing the hardware, you must use the kernel to acess it. Userland applications generally access the hardware through a (pseudo-)file located in the /dev Drivers are not always hardware related, many drivers simply add new functionalities to the kernel.
Where to start
A good starting point for writing drivers is the Linux device drivers book download (available in printed form from O'Reilly).
Here are some informations specific to ARMEBS3 drivers.
Step-by-step hello world driver
- Create a new directory (change actual directory to it)
mkdir /tmp/hello-module cd /tmp/hello-module /tmp/hello-module
- Create the file Makefile, containing this:
obj-m := hello.o
- Create the file hello.c, containing this:
#include <linux/init.h> #include <linux/module.h>
static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE("GPL");
- Compile it
make -C /opt/armebs3/linux/linux-2.6.15.4-armebs3/ M={{{`pwd`}}} modules make: Entering directory `/opt/armebs3/linux/linux-2.6.15.4-armebs3' CC [M] /tmp/hello-module/hello.o Building modules, stage 2. MODPOST CC /tmp/hello-module/hello.mod.o LD [M] /tmp/hello-module/hello.ko make: Leaving directory `/opt/armebs3/linux/linux-2.6.15.4-armebs3'
- install it (supposes NFS development environment)
su -c "make -C /opt/armebs3/linux/linux-2.6.15.4-armebs3/ M={{{`pwd`}}} INSTALL_MOD_PATH=/opt/armebs3/nfs modules_install" Password: make: Entering directory `/opt/armebs3/linux/linux-2.6.15.4-armebs3' INSTALL /tmp/hello-module/hello.ko make: Leaving directory `/opt/armebs3/linux/linux-2.6.15.4-armebs3'
- Test it
dmesg -c > /dev/null depmod -a modprobe hello Hello, world rmmod hello dmesg -c Goodbye, cruel world
You can download the source code here: hello.c. Here is the makefile to compile the driver: Makefile.
Including the driver into the kernel
Now we've got a new driver as a module, we're satisfied with it's functionnality, and we want to include it into the kernel. For doing this we must include it into the kernel sources.