Linux设备树详解知识.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 、 A R M L i n u x 社 区 为 什 么 要 引 入 设 备 树 Linux 之父 Linus Torvalds 闲来无事,在翻看 ARM Linux 代码的时候,有一天终于忍不住了。他在 2011 年 3 月 17 日的 ARM Linux 邮件列表中说道: “This whole ARM thing is a f*cking pain in the ass 。 ” 这句话迫使 ARM Linux 社区引入了设备树。 Linus Torvalds 为什么会发飙呢而 ARM Linux 社区的牛人为什么又乖乖地听话了你得首先理解 Linux 设备驱动框架中一个非常好的设计:设备信息和驱动分离。 为了说明设备信息和驱动分离的概念,这里用一个简单的模拟代码来解释: 【例-1 】实现一个代码,把要使用的信息简单写死在代码中: int add() /* 模拟驱动代码 */ { return 3+5; /* 模拟设备信息 */ } 优点:简单 缺点:一旦加数和被加数发生变化就得改代码 改进设计如下: 【例-2 】实现一个代码,把要使用的信息和操作代码分离开来: struct dev{ int id; int x; int y; }; /* 模拟设备信息结构 */ strcut drv{ int id; int (*add)(struct dev *info); }; /* 模拟驱动结构 */ int add(struct dev *info) /* 模拟驱动代码 */ { return info-x + info-y; /* 模拟设备信息 -通过参数传递进来 */ } struct drv drv = { .id = 1, .add = add, }; /* 模拟设备信息 */ struct dev dev = { .id = 1, .x = 3, .y = 5, }; /* 模拟总线初始化匹配设备信息和驱动代码 */ int bus() { if == { return (dev); } ... } 优点:不管加数和被加数怎么变化,不需要修改代码,仅需要修改信息 缺点:结构比较复杂 那这个设备信息和驱动分离的设计跟驱动有什么关系呢熟悉硬件编程的同学都知道,硬件一般的构 成可以使用下图简单表述: 操作外设的驱动代码逻辑,只要硬件是一样的,就不会变化。但是外设挂到不同的主机上,可能会 存在 I/O 地址的变化, 如果有中断也是一样的, 中断号也可能不同。 这些 I/O 地址和中断号就是设备信息, 使用这些信息来操作控制硬件的代码就是驱动。 如果采用【例 -1 】的设计方式,那么同一个硬件外设接到不同的主机,或是换了地址线 / 中断线,设 备信息就变化了,得去修改驱动。但是采用【例 -2 】的方式进行设计,问题就迎刃而解:不管同样的外设 硬件接到哪里或是那个平台,

文档评论(0)

虾虾教育 + 关注
官方认证
文档贡献者

有问题请私信!谢谢啦 资料均为网络收集与整理,收费仅为整理费用,如有侵权,请私信,立马删除

版权声明书
用户编号:8012026075000021
认证主体重庆皮皮猪科技有限公司
IP属地重庆
统一社会信用代码/组织机构代码
91500113MA61PRPQ02

1亿VIP精品文档

相关文档