【迅为iTop4412学习笔记】4. 总线、设备、驱动,注册流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39057987/article/details/84336540

声明

以下都是我刚开始看驱动视频的个人强行解读,如果有误请指出,共同进步。

本节目标

  1. 了解Linux总线、设备
  2. 驱动注册的流程

基本知识

一般的设备:接入设备 -> 注册设备 -> 注册驱动
热插拔设备:注册驱动 -> 接入设备 -> 注册设备

查看命令

#总线(i2c,spi,platform)
ls /sys/bus/
# 设备号
cat /proc/devices
# 杂项设备号
cat /proc/misc

总线里要注意的是platform是虚拟总线,这里就挂着我们的设备。
每个设备都要给他分配一个设备号,这样我们才能知道谁是谁,最大可以存255个,但是设备多了咋整?我万一有256个呢?那其中一个岂不是丢了?

所以这些设备都要被安排一下,举个例子,一个学校1000人,难不成一起上课?肯定不是,要分年级,分班级。这样下来,1000个人被安排的明明白白,高年级是高年级,低年级是低年级,同年级也是一班二班…根据这个经验,设备就分为了主设备和次设备。

杂项设备misc就是个主设备,他只是一个统称,并是一个真实的设备(类似下面说到的platform总线是虚拟的,I2C、SPI总线是真实的),假如有一些乱七八糟的设备,如果都分配到主设备不是占着茅坑不拉屎吗?所以直接干脆都归类到杂项设备,假如你要找这些设备,你直接去杂项设备misc里面去找吧,我这主设备都是主力选手,啥猫猫狗狗都在主设备占着,万一我主力来了没位置咋整?我想这就是分类的原因吧。(想想Linux真的很严格…我觉得OK)

具体流程

设备都是挂载在总线bus上,这个就不说了
我理解的是,说来说去驱动都是控制芯片的GPIO嘛,但是有些引脚我们已经给他固定了用于干什么,比如I2C、SPI、USB这些已经很具体的东西,你接进来的必然是I2C设备,SPI设备,USB设备等等,那么挂载在总线bus上姑且称之为实体总线吧。但是其他的GPIO是开放给我们自己去接外设的,但是芯片鬼知道你会接什么外设?所以他给这些分配了一个总线叫虚拟总线platform

所以 Linux -> 总线 -> 实体总线/虚拟总线,这就是我们的第一个分叉口。

实体没啥说的,该是啥是啥。我们主要就围绕platform虚拟总线。

对于虚拟总线,我们接入了外设,那么自然要编写一个驱动去控制引脚来驱动外设。所以虚拟总线里我们要有Device和Driver

问题又来了,既然platform挂在了这么多设备和驱动,这怎么匹配呢?那么就分配名字和学号吧,你都指名道姓的叫出了三年级二班,学号01的MrYang同学,还能叫错人吗?

注册设备,Linux的结构体是platform_device,里面有 id 和 name等等。
注册驱动,Linux的结构体是platform_driver,里面也有 id 和 name等等。
id,name对上了,不就说明这个设备是用这个驱动来驱动的吗?
那么如何让他们匹配?这就不是我们需要做的事情了,我们把这些信息写好,然后注册给linux,linux会调用platform_match来匹配。(啥都要你做了,还要linux干啥?)

现在设备注册了,驱动也注册了,基佬配对也配对成功了,那么就可以一起去做事了!
Linux就继续做下一步,调用probe进行初始化,比如注册设备节点(供上层调用),GPIO申请(引脚要空闲才能给你用啊)

以上就基本完成了整个注册流程



看到的几个具体讲解platform的链接,分享一下

【设备注册与驱动注册概念讲解】
https://blog.csdn.net/coolwriter/article/details/78011946
【驱动注册函数讲解】
https://blog.csdn.net/ufo714/article/details/8595021



猜你喜欢

转载自blog.csdn.net/qq_39057987/article/details/84336540