[一]、Linux驱动
[1].驱动概念
1、软件驱动
驱动软件,使硬件处于某种工作模式,提供控制硬件方法
2、驱动的地位:
1、驱动使连接内核与设备的桥梁
[二]、设备分类
1、字符设备 ---->>> 字符设备驱动 ---->>> 字符设备文件
2、网络设备 ---->>> 网络设备驱动
3、块设备 ---->>> 块设备驱动 ---->>> 块设备文件
[三]、字符设备驱动
1、驱动编写
2、驱动编译
3、驱动使用
[四]、模块编写
1、入口(加载):
moudles_init(入口函数名);
int _init xxx_func(void)
2、出口(卸载):
moudles_exit(卸载函数名);
void _exit xxx_func1(void)
3、GPL协议声明
MOUDLE_LICENSE("GPL");
编译内核模块:
编译器 gcc 交叉编译工具
编写编译内核模块的makefile
内部编译:将内核模块源文件放在内核源码内进行编译 makefile
外部编译:将内核模块源文件放在内核源码外进行编译
动态编译:编译生成动态模块xxx.ko
静态编译:将内核模块编译进uImage中
makefile:
查看内核模块信息的命令:
modinfo命令:
查看当前内核中已经插入的动态模块:
lsmod
查看内核的日志信息:
dmesg
选项:
-c 清除内核日志信息
将内核模块加载到内核中,和内核形成一个整体,运行:
insmod xxx.ko --->>>加载函数会被调用
将内核中的内核模块,从内核中卸载出来:
rmmod xxx --->>>卸载函数会被调用
$dmesg
内核模块加载的时候执行加载函数,只会被执行一次
内核模块卸载的时候执行卸载函数,只会被执行一次