Device driver — Compile, Load/Unload, Test

Compiling driver:

As discussed earlier a Linux loadable kernel module (LKM) is different from other binary executables. Hence, it cannot be compiled the way we compile normal C files. Compiling a Linux module is a separate process. We use the help of kernel Makefile for compilation. The makefile we will have contents as given below. When you are done with make command, it will generate ‘mychardev.ko’ module in the working directory.

MakeFile:
obj-m := mychardev.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Load/Unload driver:

The following set of commands will load the driver modules and mount them as a device (character device with major# — 251 and minor# — 0)

load script:
sudo insmod mychardev.ko
sudo mknod /dev/mychardev c 251 0
sudo chmod 777 /dev/mychardev

unload script:
sudo rmmod mychardev
sudo rm /dev/mychardev

Testing driver:

After compiling and loading the driver, Write a simple c program to open file ‘/dev/mychardev’ in read mode and read content print it. It should give driver implemented functionality.

Reference:

http://www.freesoftwaremagazine.com/articles/drivers_linux
http://oreilly.com/openbook/linuxdrive3/book/