当前位置: 首页 > news >正文

企业网站建设费用的预算海豹直播nba

企业网站建设费用的预算,海豹直播nba,百度推广要自己做网站吗,做招商加盟网站本文结合设备信息集合的详细讲解来认识一下设备和驱动是如何绑定的。所谓设备信息集合,就是根据不同的外设寻找各自的外设信息,我们知道一个完整的开发板有 CPU 和各种控制器(如 I2C 控制器、SPI 控制器、DMA 控制器等)&#xff0…

本文结合设备信息集合的详细讲解来认识一下设备和驱动是如何绑定的。所谓设备信息集合,就是根据不同的外设寻找各自的外设信息,我们知道一个完整的开发板有 CPU 和各种控制器(如 I2C 控制器、SPI 控制器、DMA 控制器等),CPU和控制器可以统称为 SOC,除此之外还有各种外设 IP,如 LCD、HDMI、SD、CAMERA 等,如下图:

我们看到一个开发板上有很多的设备,这些设备是如何一层一层展开的呢?设备和驱动又是如何绑定的呢?我们带着这些疑问进入本节的主题。

各级设备的展开

内核启动的时候是一层一层展开地去寻找设备,设备树之所以叫设备树也是因为设备在内核中的结构就像树一样,从根部一层一层的向外展开,为了更形象的理解来看一张图:

大的圆圈中就是我们常说的 soc,里面包括 CPU 和各种控制器 A、B、I2C、SPI,soc 外面接了外设 E 和 F。IP 外设有具体的总线,如 I2C 总线、SPI 总线,对应的 I2C 设备和 SPI 设备就挂在各自的总线上,但是在 soc 内部只有系统总线,是没有具体总线的。

第一节中讲了总线、设备和驱动模型的原理,即任何驱动都是通过对应的总线和设备发生联系的,故虽然 soc 内部没有具体的总线,但是内核通过 platform 这条虚拟总线,把控制器一个一个找到,一样遵循了内核高内聚、低耦合的设计理念。下面我们按照 platform 设备、i2c 设备、spi 设备的顺序探究设备是如何一层一层展开的。

展开 platform 设备

上图中可以看到红色字体标注的 simple-bus,这些就是连接各类控制器的总线,在内核里即为 platform 总线,挂载的设备为 platform 设备。下面看下 platform 设备是如何展开的。

还记得上一节讲到在内核初始化的时候有一个叫做 init_machine() 的回调函数吗?如果你在板级文件里注册了这个函数,那么在系统启动的时候这个函数会被调用,如果没有定义,则会通过调用 of_platform_populate() 来展开挂在“simple-bus”下的设备,如图(分别位于 kernel/arch/arm/kernel/setup.c,kernel/drivers/of/platform.c):

这样就把 simple-bus 下面的节点一个一个的展开为 platform 设备。

资料直通车:最新Linux内核源码资料文档+视频资料

内核学习地址:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

展开 i2c 设备

有经验的小伙伴知道在写 i2c 控制器的时候肯定会调用 i2c_register_adapter() 函数,该函数的实现如下(kernel/drivers/i2c/i2c-core.c):

注册函数的最后有一个函数 of_i2c_register_devices(adap),实现如下:

of_i2c_register_devices()函数中会遍历控制器下的节点,然后通过of_i2c_register_device()函数把 i2c 控制器下的设备注册进去。

展开 spi 设备

spi 设备的注册和 i2c 设备一样,在 spi 控制器下遍历 spi 节点下的设备,然后通过相应的注册函数进行注册,只是和 i2c 注册的 api 接口不一样,下面看一下具体的代码(kernel/drivers/spi/spi.c):

当通过 spi_register_master 注册 spi 控制器的时候会通过 of_register_spi_devices 来遍历 spi 总线下的设备,从而注册。这样就完成了spi设备的注册。

各级设备的展开

学到这里相信应该了解设备的硬件信息是从设备树里获取的,如寄存器地址、中断号、时钟等等。接下来我们一起看下这些信息在设备树里是怎么记录的,为下一节动手定制开发板做好准备。

reg 寄存器

我们先看设备树里的 soc 描述信息,红色标注的代表着寄存器地址用几个数据量来表述,绿色标注的代表着寄存器空间大小用几个数据量来表述。图中的含义是中断控制器的基地址是 0xfec00000,空间大小是 0x1000。如果 address-cells 的值是 2 的话表示需要两个数量级来表示基地址,比如寄存器是 64 位的话就需要两个数量级来表示,每个代表着 32 位的数。

ranges 取值范围

ranges 代表了 local 地址向 parent 地址的转换,如果 ranges 为空的话代表着与 cpu 是 1:1 的映射关系,如果没有 range 的话表示不是内存区域。

http://www.yidumall.com/news/34440.html

相关文章:

  • 兰州市做网站的公司青岛网络优化代理
  • java做网页怎么合在网站里网站被禁用如何解决
  • 沈阳营销型网站设计教程电商网站seo优化
  • 做平台的网站电商运营公司简介
  • 网站建站如何入手专业百度seo排名优化
  • 怎样做医疗保健网站站长工具seo下载
  • 网站建设石家庄市全网营销的公司
  • 品牌网站建设有那两种模式今日财经最新消息
  • 主体负责人电话修改 网站备案关键词分词工具
  • 杭州网站建设设计公司哪家好品牌运营策划方案
  • 宝安区做外贸网站的公司正规考证培训机构
  • wordpress恢复旧编辑器北京网站优化步
  • 怎么做网站的排名sem搜索引擎营销
  • 沈阳做微网站的公司seo优化课程
  • 商务网站开发流程有三个阶段qianhu微建站
  • APP网站建设什么用处足球进球排行榜
  • 个人网站开发自己怎么开发app软件
  • 网站优化推广多少钱网络宣传
  • h5做的网站有哪些湖南网站制作哪家好
  • 临沂手机端建站模板代运营电商公司
  • 做旅游网站的软文范例大全200字
  • 杭州公司的网站建设公司中国网络营销公司
  • 鸿鹄网站建设网络营销推广seo
  • 饿了么网站怎么做的北京百度推广代理公司
  • 做电影网站考什么网络推广工作是做什么的
  • 信誉好的营销网站建设网络营销方式对比分析
  • 做毕业网站的周记抖音seo排名软件哪个好
  • 河北省住房城乡建设局网站首页企业营销策略
  • 开网店要建网站平台吗北京seo如何排名
  • 郴州信息港网站哈尔滨百度网络推广