NUC972----GPIO驱动

本文介绍了Linux设备的分类,包括字符设备、块设备和网络设备,并详细讲解了GPIO驱动的编写,包括设备节点、设备号的概念,以及open函数、ioctl函数在驱动中的实现。内容适合嵌入式Linux开发者学习。
摘要由CSDN通过智能技术生成

详细资料请加QQ群索取

 

欢迎加入qq交流群:669495872

上一节中所实现的最小驱动模块,实现了一个驱动的加载与卸载,但是这个最小驱动除了打印字符串以外,没有任何卵用。本节将通过驱动实例——GPIO驱动,来具体讲解一个有实际作用的驱动到底是怎么写出来的。

1 .Linux设备和分类

在进行驱动编程之前,需要了解一下Linux设备的分类。Linux 系统中的设备可以分为字符设备、块设备和网络设备这 3 类。

  1. 1字符设备:

字符设备是能够像字节流一样被访问的设备,当对字符设备发出读写请求,相应的 I/O 操作立即发生。Linux 系统中很多设备都是字符设备,如字符终端、串口、键盘、鼠标等。在嵌入式 Linux 开发中,接触最多的就是字符设备以及驱动。

  1. 2块设备:

块设备是 Linux 系统中进行 I/O 操作时必须以块为单位进行访问的设备,块设备能够安装文件系统。块设备驱动会利用一块系统内存作为缓冲区,因此对块设备发出读写访问,并不一定立即产生硬件 I/O 操作。Linux 系统中常见的块设备有如硬盘、软驱等等。

  1. 3网络设备:

网络设备既可以是网卡这样的硬件设备,也可以是一个纯软件设备如回环设备。网络设备由 Linux 的网络子系统驱动,负责数据包的发送和接收,而不是面向流设备,因此在Linux系统文件系统中网络设备没有节点。对网络设备的访问是通过socket调用产生,而不是普通的文件操作。

我们要写的GPIO驱动就属于字符设备。

2. 设备节点和设备号

       2.1设备节点

设备(包括硬件设备)在 Linux 系统下,表现为设备节点,也称设备文件。设备文件是一种特殊的文件,它们存储在文件系统中(通常在/dev 目录下),但它们仅占用文件目录项而不涉及存储数据。事实上,它们仅仅记录了其所属的设备类别、主设备号和从设备号等设备相关信息。

来看两个典型的设备文件的详细信息:

# ls -l /dev/ttyS0 /dev/sda1

 

以/dev/ttyS0 的信息为例,对其中几项进行说明。

/dev/ttyS0 是设备节点名称,c 表示该设备是字符设备,主设备号为 4从设备号为 64,该设备节点对应于系统的串口 0。由于网络设备没有设备节点,所以设备文件基本上就分为字符设备文件和块设备文件两类,在设备节点属性中,分别以 c 和 b 来表示,即 c表示字符设备节点文件,b 表示块设备节点文件。

当程序打开一个设备文件时,内核就可以获取对应设备的设备类型、主设备号和次设备号等信息,内核也就知道了程序需要操作使用哪个设备驱动程序。在程序随后对这个文件的操作都会调用相应的驱动程序的函数,同时把从设备号传递给驱动程序。

      2.2设备编号

设备编号由主设备号和从设备号构成。在 Linux 内核中,使用 dev_t 类型来保存设备编号。在Linux 内核中,dev_t 是一个 32 位数,高 12 位是主设备号,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值