没有选择双面打印,还出来双面打印提示,每次复印还都出来一张白纸,怎么回事? 求迅速解答2天内要,谢谢
589
2022-05-29
1. linux下驱动框架介绍
1.1 驱动框架分类
Linux下驱动框架分为3大类型:
字符设备 ---------
块设备 存储设备 SD 硬盘
网络设备 网卡 无线 有线
字符设备和块设备都会生成设备节点在/dev目录下。
网络设备不会生成设备节点. 可以使用ifconfig查看
字符设备标准框架详细区分:
RTC设备驱动
LCD屏设备驱动—帧缓冲设备框架
声卡设备驱动—音频设备
标准输入设备驱动—输入子系统框架
…等等
内核提供的字符设备注册的方式: 原生的—最底层注册方式
早期设备注册方式—linux 2.6
标准设备注册方式
杂项设备注册方式
比如: 温度传感器、湿度传感器、光照度、门锁、LED灯、蜂鸣器 驱动都是使用字符设备框架编写
1.2 驱动框架代码模板
示例代码:
#include
1.3 Makefile示例代码
KER_DRI=/home/wbyq/work/linux-3.5/linux-3.5 all: make -C $(KER_DRI) M=`pwd` modules clean: make -C $(KER_DRI) M=`pwd` modules clean obj-m += drv_hello.o
编译完成之后,生成的驱动文件名称还是xxxx.ko文件。以ko为后缀。
1.4 安装驱动过程
[root@wbyq ]#insmod drv_hello.ko [ 435.765000] Hello 驱动注册-安装成功. [root@wbyq ]#rmmod drv_hello.ko rmmod: can't change directory to '/lib/modules': No such file or directory [root@wbyq ]#mkdir /lib/modules [root@wbyq ]#rmmod drv_hello.ko rmmod: can't change directory to '3.5.0-FriendlyARM': No such file or directory [root@wbyq ]# [root@wbyq ]# [root@wbyq ]#mkdir /lib/modules/3.5.0-FriendlyARM [root@wbyq ]#rmmod drv_hello.ko [ 1024.225000] Hello 驱动注销成功. [root@wbyq ]#insmod drv_hello.ko [ 1080.500000] Hello 驱动注册-安装成功. [root@wbyq ]#lsmod drv_hello 614 0 - Live 0xbf004000 (O) [root@wbyq ]#modinfo drv_hello.ko modinfo: can't open '/lib/modules/3.5.0-FriendlyARM/modules.dep': No such file or directory [root@wbyq ]#touch /lib/modules/3.5.0-FriendlyARM/modules.dep [root@wbyq ]#modinfo drv_hello.ko filename: drv_hello.ko license: GPL depends: vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8 [root@wbyq ]#
驱动的安装方式:
动态安装. lsmod 查看动态方式安装的驱动.
静态安装. 静态是固化到内核里的。
2. 杂项设备框架
2.1 框架结构介绍
杂项字符设备的主设备号固定: 10 主设备号: 0 ~ 255
次设备号范围: 0 ~ 255
Linux内核寻找驱动节点是依靠设备号寻找的。
设备号: 主设备号(区分类型)、次设备号(区分同类型的具体设备)
主设备号: 10 ,240
下面是查看串口设备节点、MMC设备节点的详细信息:
下面是杂项设备的模型图:
Linux下把无法分类的一些设备都归类为杂项设备,杂项设备本身就是字符设备,只是简单封装了一层,注册调用更加简单。杂项设备(misc device)是在嵌入式系统中用得比较多的一种设备驱动。
在Linux内核的include\linux目录下有Miscdevice.h文件,misc设备定义及其内核提供的相关函数在这里。
内核用struct miscdevice的结构体来描述杂项设备:
struct miscdevice { int minor; //次设备号,杂项设备的主设备?10 const char *name; //设备的名称 const struct file_operations *fops; //文件操作 /* 下面的成员是供内核使用 ,驱动编写不需要理会 */ struct list_head list; //misc_list的链表头 struct device *parent; //父设备 struct device *this_device; //当前设备,是device_create的返回值 };
杂项设备结构里有一个文件集合指针,当字符设备驱动安装成功之后,在应用层是open函数打开这个设备文件,会访问到驱动层里文件集合对应的函数。
文件操作集合的模型图:
2.2 蜂鸣器驱动示例代码
这是蜂鸣器的驱动层示例代码,使用杂项设备框架编写:
应用层的代码:
#include
2.3 运行效果
Linux
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。