platform驱动程序设计路线:注册设备(platform_device)->编写设备驱动。
注册设备:
struct platform_device {
const char * name;
int id;
struct device dev;
u32 num_resources;
struct resource * resource;
const struct platform_device_id *id_entry;
/* arch specific additions */
struct pdev_archdata archdata;
};
其中比较重要的成员struct resource * resource 表征platform_device所战用的资源, 当然对于比较简单的设备(普通的I/0)不用注册该结构,例:
struct platform_device iccard_device = {
.name = "iccard_device",
.id = 0,
};
如果没有注册platform_device,别指望自身定义的probe会为你做什么工作,因为在驱动与设备匹配时会出错到不了probe这一步。
platform_device设备注册的实现函数为platform_device_register(struct platform_device *pdev);具体实现为:
int platform_device_register(struct platform_device *pdev)
{
device_initialize(&pdev->dev);//相关默认相初始化
return platform_device_add(pdev);//挂载设备到总线
}
设备驱动:
static struct platform_driver iccard_driver = {
.probe = iccard_probe,
.remove = iccard_remove,
.driver = {
.name = "iccard",
.owner = THIS_MODULE,
},
};
platform_driver_register(&iccard_driver);