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

2019-07-13 01:46发布

一.嵌入式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/ /param/存放所以模块参数值,内核空间中普通用户只能读,只有超级用户才能写。 模块参数中导出符号“:void xxx(void) { xx... } EXPORT_SYUBOL("xxx"); EXPORT_SYSUBOL-GPL("xxx");
将内核模块变成驱动模块: 设备的分类:1.字符设备-键盘鼠标帧缓存fb -> 以字符(字符)为单位访问通常只支持顺序访问;不带缓冲。 2.块设备,-> 访问以固定大小为单位,通常支持随机访问;带缓冲通过缓冲来提高访问效率。 3.网络设备,没有设备文搜出,socket