CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 8285|回复: 0

平台总线

[复制链接]
发表于 2014-9-25 11:06:16 | 显示全部楼层 |阅读模式
1 设备驱动模型  – 平台总线
分析之前LED代码。发现这个驱动可移植性非常差。需要修改大量代码。
驱动程序由两部分组成:硬件相关的内容和纯软件(对硬件进行操作)的通用部分。

一  Linux内核分离思想。
就是将硬件相关的内容和纯软件(对硬件进行操作)的通用部分分离开。
让驱动开发者关注硬件相关的部分。而通用的操作流程基本不需要维护和修改

平台总线  platform_bus.虚拟的。而非硬件真实存在的总线。
平台总线维护着两个链表:dev,   drv


二 分离的具体实现
dev链表里存放硬件相关的信息
drv链表里面存放对硬件操作的流程。(纯软件部分)
平台总线里面有一个match函数。它进行dev和drv链表的两两匹配工作。通过dev的name和drv的name匹配。如果匹配成功会调用drv里面probe函数。probe函数的实现由驱动开发作者实现。而具体的硬件信息在匹配时候已经得到。
匹配过程:
当向总线注册dev信息(添加节点到dev链表)同时会从drv链表里取出每一个drv节点。跟自己dev的name进行匹配。如果匹配成功调用drv的probe函数。

当向总线注册drv信息(添加节点到drv链表)同时会从dev链表里取出每一个dev节点。跟自己drv的name进行匹配。如果匹配成功调用drv的probe函数。

1 dev和drv链表对应的结构是??
2 如何注册dev和drv?
3 probe如何获得硬件的资源?

Sudo apt-get insall ctags
Vim插件 ctags 和cscope
ctags:
ctrl + ] 跳到定义
ctrl + t 跳回来
grep  
find




1 dev和drv链表对应的结构是??
dev 对应结构:struct platform_device
里面至少有个name信息
里面有硬件相关的信息struct reource
drv对应结构: struct platform_driver
有probe函数,remove(卸载)函数
2 如何注册dev和drv?
platform_device_register向内核注册一个platform_device
platform_driver_register向内核注册一个platform_driver
3 probe如何获得硬件的资源?
例如:
static int sw_rfkill_probe(struct platform_device *pdev)
可得:probe函数的行参数pdev指针就是指向开始注册的platform_device结构。这个结构体本身在初始化时候包含了硬件相关的信息(struct resource可用这个来存放自己特定的硬件信息)。后续工作自己需求的实现。比如:注册一个字符设备。


Tll
cubieplayer
soforace
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-4-23 20:29 , Processed in 0.019433 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部