新闻  |   论坛  |   博客  |   在线研讨会
Linux设备驱动的分类
嵌入式Linux | 2023-01-05 12:33:31    阅读:1480   发布文章

Linux内核驱动按照访问方式,可以分为以下三类

1. 字符设备驱动

字符设备是指存取时没有缓存,能够像访问字节流(类似文件)的方式一样被访问的设备,最终在文件系统中以设备文件的形式存在。

常见的字符设备:鼠标、键盘(IO设备),LCD、Camera(帧缓冲设备)等。

2. 块设备驱动

块设备和字符设备的区别在于块设备有缓存支持的,块设备必须能够随机存取,内核内部的数据管理方式是按照块为最小单位管理的,数据块一般为512字节、1024字节等。当然,访问字符设备和块设备的操作接口也是不一样的。

常见的块设备:硬盘、光盘、SD卡、emmc、flash等存储设备。


块设备的使用是先mount挂载,然后进行访问:

mount -t vfat /dev/mmcblk0p1 /mnt/

将sd卡挂载到/mnt目录下,然后访问/mnt目录就是访问sd卡里面的内容。

应用程序如何访问字符设备和块设备:

字符设备和块设备在用户空间的/dev目录下,都有一个对应的设备文件(一切皆文件),应用程序通过系统函数调用open、read、write等来操作设备文件从而访问设备驱动来操作硬件设备。在终端输入ls /dev -l 可以看到设备文件:

字符设备文件-鼠标:

crw-r----- 1 root root 13, 33 mouse1

块设备文件硬盘:

brw-rw---- 1 root disk 8, 1 sda1

首字符c和b分别表示char和block即字符设备和块设备,(13,33)和(8,1)代表的是设备号。其中13和8表示这两个设备的主设备号,用于标识设备的类型;33和1表示这两个设备的次设备号,用于标识同类设备的不同设备个体,也就是说两个同类设备,它们的主设备号可以一样,但是次设备号不能一样,用来区分它们。

应用程序访问设备流程是,根据用户空间的设备文件,找到对应的设备号,根据设备号去内核找到对应的设备驱动,然后通过设备驱动操作硬件设备。

3. 网络设备驱动

网络设备在/dev/下没有对应的设备文件,必须通过socket套接字来访问。

最常见的网络设备:网卡


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
专注于嵌入式Linux知识的分享、交流
推荐文章
最近访客