platform设备驱动(Linux驱动4)

说明:

  platform是Linux中总线的一种,与i2c,pci,isa一样.但是它并非实际存在,而是虚拟出来的,用于将soc中的外围器件挂接在这个总线中.
  linux中的驱动包括总线,设备,设备驱动三个实体,总线将设备和驱动绑定.platform总线的驱动是platform_driver,设备是platform_device.
  总线的match函数就是将驱动与设备的名字加以比较,相等认为匹配上了.

变量:

device_private{
..
void * driver_data;
}
device {
device_private *p;//设备的私有数据
void* platform_data;//平台设备数据
。。。
}
platform_device {
char *name;
u32 id;
struct device dev;
u32 num_resourecs;
struct resource *resource;
}
如果资源文件中的描述不够,可以在dev中的platform_data中自定义数据

    device_driver{
        char * name;//描述驱动名称
        struct module *owner;
        ...
    } 
    platform_driver{
        probe
        remove
        shutdown
        suspend
        ...
        struct device_driver driver;
    }
    bus_type{
        name
        dev_attrs
        match
        uevent
        pm
    }
    resource{
        start
        end
        name
        flags
        resourec *parent,*sibling,*child;
    }
    flags:IORESOURCE_IO,IORESORECE_MEM,IORESOURCE_DMA...

函数:

platform_driver_register(platform_driver*)
platform_driver_unregister(platform_driver*)
platform_get_resource(platform_device *dev,flags,num)
platform_set_drvdata(platform_device*pdev,void *);
platform_get_drvdata(platform_device *pdev);

用法

xx_probe(struct platform_device *dev)
{
register_chrdev_region
alloc_chrdev_region
cdev_init
cdev_add

}
xx_remove(struct platform_device *dev)
{
cdev_del();
unregister_chrdev_region();

}
platform_driver xx_driver={
.probe=xx_probe;
.remove=xx_remove
.driver={
.name=”xxdevice”
.owner=THIS_MODULE;
}
}
platform_device xx_device={
.name=”xxdevice”;
.id=-1;

}
xx_init()
{
platform_driver_register(&xx_driver);
}
xx_exit()
{
platform_driver_unregister(&xx_driver);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值