platform总线
1.platform总线基本特征
.name = "platform",
.match = platform_match,
.uevent = platform_uevent,
......
匹配操作是platform_match,定义如下:
static int platform_match(struct device *dev, struct device_driver *drv)
{
struct platform_device *pdev=to_platform_device(dev);
struct platform_driver *pdrv=to_platform_driver(drv);
if(pdrv->id_table)
return platform_match_id(pdrv->id_table,pdev)!=NULL;
return (strcmp(pdev->name,drv->name)==0);
}
其中调用的platform_match_id函数定义如下:
static const struct platform_device_id *platform_match_id(
struct platform_device_id *id, struct platform_device *pdev)
{
while(id->name[0]){
}
}
显然在匹配时,先将设备的名称与驱动的id_table成员数组中列举的名称逐一比较,若相同则匹配成功,否则再将设备的名字与驱动的名字比较,若相同则匹配成功。
也就是说,platform总线上的设备发送用户态事件时,会增加一个MODALIAS环境变量。
2.platform设备
设备的名称最终会被设为name.id,其中id是设备的编号。如果id的赋值为-1,表示设备的个数只可能是1个,这时设备的名字为name.
resource_size_t start;//资源区域的起始值
resource_size_t end;//资源区域的结束值
const char *name;//申请资源的设备名称
unsigned long flags;//资源的标志
struct resource *parent,*sibling,*child;//树指针
每个struct resource类型的数据描述资源的一段区域,同一类型的所有资源以树的形式组织在一起。资源的标志包含了资源类型的说明,常用类型如下:
平台相关的其他数据则放在platform设备的dev成员的platform_data指针所指向的内存中,。
下面是platform设备的注册和注销函数的原型:
注册platform设备时,首先向platform总线注册相应的设备,然后将设备的端口号和IO内存资源添加到系统的资源树种,注销platform设备则是相反的操作。
3.platform驱动
在platform驱动的成员driver的各种操作函数中,实际
platform总线伪总 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)