linux驱动的基本认知

一、为什么要学习驱动

在之前我们学习树莓派的时候都离不开一个库,那就是wiringPi库,所以我们学习驱动就是为了可以不调库,比如树莓派的厂家提供了一个wiringPi库,里面继集成了诸多的库函数,我们学习驱动就是为了在没有这个库的时候仍能进行开发,例如,我们在另一块跑linux操作系统的板子上,如果没有wiringPi库的话,只要我们拿到原理图和芯片手册的话,我们自己也能通过写驱动的方法去驱动IO口等等。

二、内核层面的驱动的理解

我们知道进程,线程,网络,内存,设备驱动等的东西是不用上层应用开发者担心的,在前面的所有学习中实现的驱动是调用wiringPi库,从树莓派高阶课程开始以来到现在我们都只有一个目的,就是自己实现wiringPi库,因为wiringPi库由厂家提供,这个厂家是不一定会提供的,所以我们就要学会自己实现,以免另一种板子的时候也能实现开发

三、为什么说linux中一切皆文件

linux中一切皆文件,其中包括鼠标,键盘,屏幕,led,flash,内存,网卡等等的设备,普通的IO口,串口等等(在/dev底下可以看到)
在这里插入图片描述

四、驱动在内核中的存在方式以及开发的相关事项

4.1 在内核中会有一个驱动链表来管理所有设备的驱动(驱动插入到链表中是由设备号来检索)

驱动链表:管理所有设备的驱动,添加或查找,添加是在我们编写完驱动程序加载到内核中去的时候,查找是发生在我们调用驱动程序的时候,由开发者在用户空间调用open函数去调用

驱动加载的链表的顺序:驱动插入到链表的顺序由设备号来检索,也就是说主设备号和次设备号除了能够区分不同类型的设备以外,还能起到将驱动加载到链表的某个位置的作用
在这里插入图片描述
对文件的操作用到的api无非就是open,read,write,close

4.2 如何区分我们打开的是那个设备的驱动
假设:现在的硬件有pin4,pin5,pin6,这些引脚分别对应于4驱动,5驱动,6驱动,这些驱动需要由我们来开发。

open(“/dev/pin4”,权限)用来调用引脚4的驱动,那么如何找到相关的驱动,有两个东西供我们查找,一是文件名,二是设备号(包含主设备号和次设备号)。
Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。

在这里插入图片描述

4.3 什么是主设备号和次设备号

Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。

主设备号和次设备号详解

五、驱动代码编写的那点事

5.1 写驱动代码最主要的就是两件事
(1)添加驱动:(1.设备名 2.设备号 3.设备驱动函数------操作寄存器去调用IO口 )
(2)查找(调用)驱动

5.2 驱动调用实现过程
当用户层调用open,write等函数时 (例如:open(“/dev/pin4”, O_RDWR)),系统发生一次软中断,触发sys_call(系统调用处理入口 内核态)(中断号是0x80),接下来根据设备名找到设备号找到虚拟文件系统的sys_open,sys_open会找到引脚四驱动程序里的open函数,我们在引脚四里面肯定是进行寄存器操作。

以下是图文讲解
在这里插入图片描述

学习笔记,仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值