Lab3 - Linux Device Driver (version 1)
Implement Linux Device Driver Version 1 of hello1.c: no parameter
Objective: Build and Install a Sample device driver and then compile "hello" program to verify it.
Requirements:
- Linux (CentOS) - You can download this linux flavor from link http://www.centos.org/
- Used linux kernel version 2.6.20
- Vmware Player / Vmware Server / Vmware Workstation
Procedure
Step 1
- First go to the directory
$ cd /usr/src/kernels/linux-2.6.20.1/drivers/char
- Then create a new directory examples in it using following command.
$ mkdir examples
- Go into the created directory examples using following command.
$ cd examples
- Now you need to create two files in this examples directory. One of them is Makefile and second one is hello1.c. Steps are as below.
$ vi Makefile
- and write following line into that file.
obj-$(CONFIG_EXAMPLES) += hello1.o
- Then save it using :wq command.
Snapshot 1
$ vi hello1.c
- And write following sample driver programs in hello1.c.
/* Example Minimal Character Device Driver */
#include <linux/module.h>
static int __init hello_init(void)
{
printk("Hello Example Init\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("Hello Example Exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Chris Hallinan");
MODULE_DESCRIPTION("Hello World Example");
MODULE_LICENSE("GPL");
Step 2
- Go into the following directory to change the Kconfig file.
$ cd /usr/src/kernels/linux-2.6.20.1/drivers/char
- Then first back up Kconfig file to Kconfig.old file.
$ cp Kconfig Kconfig.old
- The following Snapshot shows the content of Kconfig.old file.
Snapshot 2
- Then open file Kconfig using following command
$ vi Kconfig
- And add the following lines in Kconfig to add new configuration. Also add + sign in beginning of those lines as shown below.
....
....
menu "Character devices"
+ config EXAMPLES
+ tristate "Enable Examples"
+ default M
+ ---help---
+ Enable compilation option for driver examples
config VT
....
....
- Following Snapshot 3 shows the content of new Kconfig file.
Snapshot 3
Step 3
- Modify the usr/src/linux/drivers/char/Makefile using following commands
$ cd /usr/src/linux-2.6.20.1/drivers/char
$ vi Makefile
Search Makefile for the name IPMI using -> /IPMI
Then add the following line as shown in Snapshot. Don’t put blank line after or before added line.
obj-$(CONFIG_EXAMPLES) += examples/
Snapshot 4
Step 4
- Then go to the directory linux-2.6.20.1 using following command.
$ cd /usr/src/linux-2.6.20.1
- Then first back up the .config file in .config.old using following command.
$ cp .config .config.old
- Then edit the .config file as below.
$ make menuconfig
- Then go to the Device Driver -> Character Devices -> Enable Examples
- Use spacebar to change configuration to ‘M’ of ‘*’ for Enable Examples.
Snapshot 5
Step 5
- Enter the following command to compile modules.
$ make modules
Snapshot 6
Step 6
- The following command installs the module.
$ make modules_install
- It shows many warning at the end but ignore it.
- This command creates files hello1.mod.o and hello1.ko as shown in following Snapshot 6.
Snapshot 7
- The Following Snapshot 8 shows the newly created files in examples folder other than Makefile and hello1.c.
Snapshot 8
Step 7
- To load the module use modeprobe or insmod but hello1.c doesn’t have any dependencies. So use commad insmode which is inside directory /sbin/insmode. So first go into the directory examples and use the insmode as shown in Snapshot 9.
$ cd /usr/src/kernels/linux-2.6.20.1/drivers/char/examples
$ /sbin/insmod hello1.ko
Snapshot 9
- To see if module is sucessfully loaded or not, write the lsmod command and use pipeline with grep command to filter out hello word file & check the result as shown in following Snapshot 10.
Snapshot 10
Step 9
- To remove the module from kernel use rmmod as shown below and use lsmod command to check wheher module is removed or not.
Snapshot 11
- Use modinfo to see the module information as shown below.
$ /sbin/modinfo /usr/src/linux-2.6.20.1/drivers/char/examples/hello1.ko
Snapshot 12