- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux2 6设备相关的主要是 总线 设备 驱动
linux2period;6设备相关的主要是colon;总线period;设备period;驱动
设备是具体的硬件,驱动是使设备工作的方法,总线就是连接设备和驱动桥梁。驱动通过总线来控制设备。总线包括usb、i2c等。而platform是一个抽象的总线。本文也将对platform进行初步的介绍。
platform包括两个重要的结构体:plateform_device和platform_driver
platform_device:代表一个设备,其中包含这个设备的一些属性,一般是在平台相关的bsp文件中实现的.
其结构体如下:
struct platform_device {
const char * name; ?//设备名称
int id; ????????????//设备ID
struct device dev; ?//包含设备相关信息
u32 num_resources; ?//设备所使用的资源数目
struct resource * resource; ???//设备所使用的资源
const struct platform_device_id *id_entry;
struct pdev_archdata archdata;
//注册、注销设备的函数
extern int platform_device_register(struct platform_device *);
extern void platform_device_unregister(struct platform_device *);
platform_driver:代表设备的驱动,包含了对这个设备操作的一些方法
其对应的结构体如下:
struct platform_driver {
int (*probe)(struct platform_device *); ?//驱动探测
int (*remove)(struct platform_device *); //驱动移除
void (*shutdown)(struct platform_device *);
int (*suspend)(struct platform_device *, pm_message_t state);//驱动睡眠
int (*resume)(struct platform_device *); ?//驱动唤醒
struct device_driver driver; ????????????//包含设备名称
const struct platform_device_id *id_table;
//驱动注册、注销函数
extern int platform_driver_register(struct platform_driver *);
extern void platform_driver_unregister(struct platform_driver *);
设备(platform_devie)和驱动(platform_driver)是由总线通过“name”字符串来匹配的。也就是说
platform_device?中的“name”字段要和platform_driver?中的name字段一致。当一个驱动平台的device和driver都写好后,注册到内核中,并且他们的name一致。则在启动系统的时,就会匹配这个设备。当匹配成功后就会执行probe这个函数,来探测驱动(主要做初始化的工作,填充一些必要的结构体,生成一些资源,向内核注册一些设备等等,并制定这个驱动要完成的动作).
下面讲解下probe函数流程:
在有些驱动的probe函数中,会使用下列函数,
platform_get_resource:获取设备所使用的来获取IO内存资源;
platform_get_irq:获取设备所使用的IRQ中断资源;
request_mem_region:向内核申请IO内存资源
request_irg:向内核申请中断号
其中相关资源都是在platform_devic结构体中的resource成员中定义。resoure结构体使用下面形式定义
static struct resource s3c_usb_resource[] = {
[0] = {
.start = S3C_PA_USBHOST,
.e
文档评论(0)