嵌入式Linux学习篇:
Linux内核模块
Linux内核模块----Linux Kernel Module。
在Linux内核中,驱动程序是以模块的形式存在,每个驱动程序都是一个个独立的模块。模块之间可以是独立的,不相关的。
通俗而言:Linux的设备驱动程序是存放在Linux内核模块中的,我们设计驱动程序之前,先要设计一个Linux内核模块。
在一般情况Linux设备驱动程序通过环境编译后会生成一个后缀为ko的文件,该文件可以通过命令进行安装或卸载。
本次以LED灯的驱动程序为例进行安装或卸载:
安装(insmod):
[root@GEC6818 /test]#insmod led_drv.ko
[ 66.646000] GEC6818 led_drv init ......
查看是否安装成功:
[root@GEC6818 /test]#lsmod
led_drv 2932 0 - Live 0xbf22c000 (O)
卸载LED灯的驱动(rmmod):
[root@GEC6818 /test]#rmmod led_drv
[ 312.365000] GEC6818 led_dev exit .....
补充:
insmod---insert module 将一个模块插入内核
rmmod---remove module 将一个内核模块移除内核。
设计一个简单的Linux内核模块
在Linux内核源码中,有Linux设备驱动程序(推荐使用Source Insight软件查看)。
GEC6818板子的内核源码:6818GEC.tar
修改后得到的框架:
#include <linux/module.h>
#include <linux/kernel.h>
//模块的入口和出口
static int __init gec6818_led_init(void) //入口---驱动的安装函数
{
printk("GEC6818 led_drv init ......\n"); //串口控制台输出
return 0;
}
static void __exit gec6818_led_exit(void) //出口---驱动的卸载函数
{
printk("GEC6818 led_dev exit .....\n");
}
module_init(gec6818_led_init