嵌入式Linux驱动笔记-基本知识二

时间:2022-12-29 23:38:14

一.嵌入式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