一.嵌入式linux字符设备驱动框架
添加作者信息:MODULE_ATHOR("AlanWongCC");
添加模块使用信息:MODULE_DESCRIPION("xxxxxx");
命令:
moduleprobe xxx :加载内部模块。
优点是能够处理模块间的相互依赖,如:XXX.ko 和OOO.ko相互依赖,则此命令会自动处理。
内部模块能用insmod和moduleprobe来加载;外部模块只能用insmode来加载。
自定义模块加载和卸载函数
自定义:static int _hello_init(void); //模块加载函数
static ini _hello_exit(void); //模块卸载函数
模块加载、卸载函数接口:
module_init (_hello_init);
module_exit(_hello_exit);
__init(),静态编译时有意义,所修饰的函数代码放到内核init.text段中。
__exit()静态编译时有意义,静态编译时不编译不执行(修饰的函数不编译)
模块参数:传递参数给模块中的变量。
1.在模块加载时刻传递参数 2.用户空间可以访问(读写)模块参数。
查看系统所以模块详细信息:
#ls /sys/module/
目录/sys/module/ <xxx> /param/存放所以模块参数值,内核空间中普通用户只能读,只有超级用户才能写。
模块参数中导出符号“:void xxx(void)
{
xx...
}
EXPORT_SYUBOL("xxx");
EXPORT_SYSUBOL-GPL("xxx");
将内核模块变成驱动模块:
设备的分类:1.字符设备-键盘鼠标帧缓存fb -> 以字符(字符)为单位访问通常只支持顺序访问;不带缓冲。
2.块设备,-> 访问以固定大小为单位,通常支持随机访问;带缓冲通过缓冲来提高访问效率。
3.网络设备,没有设备文搜出,socket