参考文章:详细到吐血 —— 树莓派驱动开发入门:从读懂框架到自己写驱动_树莓派 编译驱动-优快云博客
目录
一、对驱动的认识
首先百度百科给的这个定义比较专业化,并不容易理解,还是不明白驱动到底是个啥玩意。
百度百科:驱动,计算机软件术语,是指驱动计算机里软件的程序。驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包
含有关硬件设备的信息。此信息能够使计算机与相应的设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动
程序,计算机中的硬件就无法工作
为什么要学习驱动?
从我的学习过程来说,比如学习51单片机时,我们要学习许多外设开发,这时我们就要写相关驱动代码,让外设能正常跑起来,如点亮LED灯等等,完成相应功能。在树莓派开发简单是因为有厂家提供的wiringPi库,实现超声波,实现继电器操作,做灯的点亮…都非常简单。但要自己写对应的驱动代码难度非常大,用树莓派学习的目的不仅是为是体验其强大便捷的wiringPi库,更要通过树莓派学会linux内核开发,驱动编写等,做一个属于自己的库。
设备号的作用
1.区分硬件设备
linux一切皆为文件,其设备管理同样是和文件系统紧密结合。在目录/dev
下都能看到鼠标,键盘,屏幕,串口等设备文件,硬件要有相对应的驱动,那么open怎样区分这些硬件呢?
依靠文件名与设备号。在/dev
下ls -l
可以看到
前面的10 、5、29那一列是主设备号,后一列是次设备号。
设备号又分为:主设备号用于区别不同种类
的设备;次设备号区别同种类型的多个设备
。
索引驱动在驱动链表中的位置
内核中存在一个驱动链表,管理所有设备的驱动。 驱动开发无非以下两件事:
- 编写完驱动程序,加载到内核
- 用户空间open后,调用驱动程序
驱动插入到链表的位置(顺序)由设备号检索。
二、基于内核驱动框架编写驱动代码流程
1、根据上层需求,修改内核驱动代码
所谓框架,就是定死的东西,基本的语句必须要有,少一个都不行。
虽然有这么多的代码,但核心运行的就两