About Linux Modules

Create a SD card image :
– get the last Raspbian image ont the website : https://www.raspberrypi.org/downloads/raspbian/
– get the last applePi-Baker : http://www.tweaking4all.com/hardware/raspberry-pi/macosx-apple-pi-baker/
– unzip the image, connect the SD card and launch applePi-Baker

Connect the rpi using usb serial connexion :
– install the PL2303 driver
– install minicom
– connect the usb serial adapter to the rpi and ti the mac, check in dev (/dev/tty.usbserial)
– launch « minicom -s » in a terminal and enter the device address

minicom -s

– login : pi, password : raspberry
– activate root account :

sudo passwd root

– exit and log with root

Expand Filesystem:
– launch raspi-config

raspi-config

– choose « 1 Expand Filesystem »
– reboot

Get the module development environment :

apt-get install rpi-update
rpi-update

– get the kernel version :

uname -r

– download corresponding package at https://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/
– install with dpkg :

dpkg -i linux-headers...

Try module compilation :
– create hello.c file containing :


/*
* hello.c - The simplest kernel module.
*/
#include "linux/module.h" // included for all kernel modules
#include "linux/kernel.h" // included for KERN_INFO
#include "linux/init." // included for __init and __exit macros

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Martin");
MODULE_DESCRIPTION("A Simple Hello World module");

static int __init hello_init(void)
{
    printk(KERN_INFO "Hello world!\n");
    return 0; // Non-zero return means that the module couldn't be loaded.
}

static void __exit hello_cleanup(void)
{
    printk(KERN_INFO "Cleaning up module.\n");
}

module_init(hello_init);
module_exit(hello_cleanup);

– create Makefile file containing :

obj-m += hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

all:
    make -C $(KDIR) M=$(PWD) modules

clean:
    make -C $(KDIR) M=$(PWD) clean

– try to load and unload the module :

insmod hello.ko
rmmod hello.ko

– check the results through the kernel messages :
>dmesg | tail -20

– it should be written something like :

[ 2831.586831] Hello world.
[ 2846.286438] Goodbye world.

– And it’s good !

Install the new driver so it will be loaded at start up :
– copy the .ko file to the appropropriate directory : /lib/modules/`uname -r`/kernel/drivers/gpio
– run depmod
>depmod
– and reboot
>shutdown -r now

For the raspberry, the serial connexion is limited and graphical interface is not supplied. So create a ssh server is a good way to use geany for example. As I use a wifi connexion, the ssh server will hang up soon as you are connected so. To get rid of this, add the following lines at the end of /etc/ssh/sshd_config :

KeepAlive yes
ClientAliveInterval 60

Ok ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *