platform架构小结十问

1.问:如何编写platform总线,设备,驱动这一套架构的设备驱动?
答:分为两个.c文件,一个是drv.c,一个是dev.c;前者实现平台驱动,后者实现平台设备,平台总线不用我们自己实现。

2.问:编写平台驱动的核心内容有哪些?
答:分配,设置,注册一个platform_driver

3.问:如何注册平台驱动?
答:使用platform_driver_register(struct platform_driver *drv)函数,该函数的参数为struct platform_driver

4.问:如何定义struct platform_driver?
答:简单实例:led_driver

static struct platform_driver led_driver =
{
.probe = led_probe,
.remove = led_remove,
.driver =
{
.name = “myleds”,
.owner = THIS_MODULE,
},
};

5.问:probe函数什么时候被调用?
答:当系统中有同名的平台设备和平台驱动时,就会调用probe函数。

6.问:probe函数有什么作用?
答:该函数可以做什么由你来决定,你可以只打印一句话,也可以做很复杂的事情。例如:led_probe函数就做了获取资源,映射IO,注册字符设备。

7.问:编写平台设备的核心内容是什么?
答:分配,设置,注册一个platform_device

8.问:如何注册平台设备?
答:使用platform_device_register(struct platform_device *pdev)函数,该函数的参数是struct platform_device

9.问:如何定义struct platform_device?
答:简单实例:led_device

static struct platform_device led_device =
{
.id = -1,
.name = “myleds”, //必须与led_driver的name一致
.resource = led_resources,
.num_resources = ARRAY_SIZE(led_resources),
.dev =
{
.release = led_release,
},
};

10.问:如何定义resource?
答:简单实例:led_resource

static struct resource led_resources[] =
{
[0] =
{
.start = 0x56000010,
.end = 0x56000010 + 8 - 1,
.flags = IORESOURCE_MEM,
},
[1] =
{
.start = 5,
.end = 5,
.flags = IORESOURCE_IRQ,
},
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值