platform总线中驱动和设备之间进行匹配的三种方式:

1.根据设备树的匹配

pdriver.c:

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/uaccess.h>
#include <linux/platform_device.h>
#include <linux/mod_devicetable.h>
#include <linux/of.h>
#include <linux/of_gpio.h>struct resource* res;
int irqnum;
struct gpio_desc* gpionum;int pdrv_probe(struct platform_device* pdev)
{printk("%s:%d\n",__func__,__LINE__);res=platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("获取MEM资源失败\n");return -ENODATA;}irqnum=platform_get_irq(pdev,0);if (irqnum<0){printk("获取中断资源失败\n");return -ENODATA;}printk("addr:%#llx,irqnum:%d\n",res->start,irqnum);gpionum=gpiod_get_from_of_node(pdev->dev.of_node,"myled1",0,GPIOD_OUT_HIGH,NULL);if(IS_ERR(gpionum)){printk("获取GPIO编号失败\n");return PTR_ERR(gpionum);}gpiod_set_value(gpionum,1);return 0;
}int prdv_remove(struct platform_device* pdev)
{gpiod_set_value(gpionum,0);gpiod_put(gpionum);printk("%s:%d\n",__func__,__LINE__);return 0;
}// struct platform_device_id idtable[]={
//     {"device1",0},
//     {"device2",1},
//     {"device3",2},
//     {},//
// };struct of_device_id oftable[]=
{{.compatible="hqyj,myplatform"},{},//
};
MODULE_DEVICE_TABLE(of,oftable);
struct platform_driver pdrv={.probe=pdrv_probe,.remove=prdv_remove,.driver={.name="devicen",.of_match_table=oftable},//.id_table=idtable, };
module_platform_driver(pdrv);
MODULE_LICENSE("GPL");

现象:


2.根据id_table匹配

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/uaccess.h>
#include <linux/platform_device.h>
#include <linux/mod_devicetable.h>
#include <linux/of.h>
#include <linux/of_gpio.h>struct resource* res;
int irqnum;int pdrv_probe(struct platform_device* pdev)
{printk("%s:%d\n",__func__,__LINE__);res=platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("获取MEM资源失败\n");return -ENODATA;}irqnum=platform_get_irq(pdev,0);if (irqnum<0){printk("获取中断资源失败\n");return -ENODATA;}printk("addr:%#llx,irqnum:%d\n",res->start,irqnum);return 0;
}int prdv_remove(struct platform_device* pdev)
{printk("%s:%d\n",__func__,__LINE__);return 0;
}struct platform_device_id idtable[]={{"device1",0},{"device2",1},{"device3",2},{},//
};struct platform_driver pdrv={.probe=pdrv_probe,.remove=prdv_remove,.driver={.name="devicen",},.id_table=idtable, };
module_platform_driver(pdrv);MODULE_LICENSE("GPL");

pdevice.c:

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/uaccess.h>
#include <linux/platform_device.h>struct resource res[]={[0]={.start=0x12345678,.end=0x12345678+49,.flags=IORESOURCE_MEM,},[1]={.start=71,.end=71,.flags=IORESOURCE_IRQ},
};void pdev_release(struct device* dev)
{printk("%s:%d\n",__func__,__LINE__);
}struct platform_device pdev={.name="device3",.id=PLATFORM_DEVID_AUTO,.dev={.release=pdev_release},.resource=res,.num_resources=ARRAY_SIZE(res),
};
static int __init mychardr_init(void)
{return platform_device_register(&pdev);
}static void __exit mychardr_exit(void)
{platform_device_unregister(&pdev);
}
module_init(mychardr_init);
module_exit(mychardr_exit);
MODULE_LICENSE("GPL");

现象:


3.根据驱动和设备的name字段进行匹配

根据驱动和设备的name字段进行匹配与根据id_table类似

22071班(11月29日)相关推荐

  1. 11月29日云栖精选夜读:阿里传奇工程师多隆的程序世界

    摘要: 写代码写到入定,是一种什么样的体验?11月29日(本周三),<阿里技术人纪录片系列>将带大家走进大神多隆的代码世界.在此之前,我们先来重温一篇关于多隆的旧文,来自<淘宝技术这 ...

  2. 赛尔号星球大战服务器维修,赛尔号星球大战11月29日更新公告

    赛尔号星球大战11月29日新增了什么玩法?服务器的维护时间是多少?来看看9k9k小编rayxx带来的赛尔号星球大战11月29日更新公告. 11月29号下午15点至17点更新公告: 1.精灵 新增了两种 ...

  3. 质量与效能 | 11月29日TF84

    质量和效能的平衡一直是软件研发过程中永恒的话题,从短期看质量和效能似乎是矛盾的,但是从长期看质量和效能却能做到有机地统一,面对质量和效能的平衡,我们需要的不仅是战略层面的思考,还需要微观层面的工程实践 ...

  4. 逆水寒服务器维护公告,《逆水寒》2018年11月29日更新公告

    各位自在同门: 为了保证服务器的运行稳定和服务质量,<逆水寒>将于2018年11月29日早8:00停机进行维护工作,预计维护到上午10:00.如在维护期间无法完成维护内容,开机时间将顺延. ...

  5. 1849 年 11 月 29 日:真空管的发明者 John Fleming 诞生

    约翰·弗莱明爵士(John Ambrose Fleming)出生于 1864 年 11 月 29 日,他是英国电气工程师和物理学家,以发明真空管(二极管).物理电磁学中使用的右手法则而闻名.弗莱明生于 ...

  6. Tuscany SCA V1.0中的扩展机制和启动过程中的扩展点[11月29日更新]

    2007年9月24日Tuscany SCA 发布了V1.0版本的实现 .本文讲述的内容使用的就是基于这个版本的,代码下载地址 http://incubator.apache.org/tuscany/s ...

  7. 手把手教你申请EVUS美国十年签证!11月29日以后要收费了!

    输入旅行文件信息: 输入登记者信息 登记美国联系人信息 (如果在美国没有联系人,可以写unknown) 资格问题 仔细核实所登记的信息内容.核实无误后点击"确认并继续"到下一步. ...

  8. 方舟服务器维护公告11月19日,《方舟指令》11月29日维护公告

    致诸位御灵士: 奥利吉奈尔区誓灵协会将于11月29日(周四)9:00~13:00对以下服务器进行4小时的升级维护. 维护期间将无法进入游戏,还请各位御灵士做好下线准备, 感谢各位御灵士的理解和支持. ...

  9. 逆水寒服务器维护,逆水寒11月29日更新到几点进游戏 逆水寒更新维护公告

    逆水寒在11月29日进行了一次新版本的更新,新团本风雪铁牢关要上线了,很多奖励接踵而来,一些小伙伴还不知道更新了什么,下面就来为大家分享一下逆水寒的更新维护公告. 各位自在同门: 为了保证服务器的运行 ...

  10. 第20届哥谭独立电影奖提名揭晓 11月29日颁奖

    第20届哥谭独立电影奖提名揭晓 11月29日颁奖 2010-10-24 21:22:15 作者:yxlady 来源:伊秀女性网 转播到微博    北京时间10月24日消息,据国外媒体报道,第20届哥谭 ...

最新文章

  1. VC++ 打开文件夹,保存文件等对话框的调用
  2. centos service 无法用
  3. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第三章 课后答案
  4. jMeter parallel controller 无法使用 CSV Data config 提供的变量?
  5. docker下交叉编译环境配置
  6. SPOJ Problem 6219:Edit distance
  7. .net remoting 技术
  8. Oracle sql给一列赋值,简单的Oracle变量SQL赋值
  9. 位运算 —— 一个数二进制形式尾端为 0 的个数
  10. 中老年人旅行有多狂野
  11. 数据窗口 label_Python实现数据可视化,让你的数据清晰起来!
  12. jQuery图片垂直滚动焦点图
  13. 随笔记----关于python 和C++ 里面的与或问题
  14. 花生壳 Linux arm
  15. 屏幕录像专家的使用说明
  16. 关于神经网络中隐藏层和神经元的深入理解
  17. 一次系统宕机认识系统日志
  18. java异步队对联_对联广告(带关闭的)
  19. Excel删除重复值
  20. 计组--CISC和RISC特点和区别

热门文章

  1. JS中判断对象是对象还是数组
  2. 反射内存 延时_PCI5565反射内存网技术的应用研究
  3. Selenium+Python测试键盘操作---全选、复制、剪切、粘贴
  4. 汉仪尚巍手书有版权吗_汉仪尚巍手书ttf下载
  5. 11.16上海交大PMP试题每日一题
  6. J-Link连上电路板,keil检测不出MCU
  7. 头部和四肢血量间相互流动速率系数的确定(含python代码)
  8. 三平面映射TriPlanar
  9. ContextCapture(Smart3D)总结(1)——构建空三模型(S3C,OSGB,DOM)
  10. 盲源分离算法学习笔记