22071班(11月29日)
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日)相关推荐
- 11月29日云栖精选夜读:阿里传奇工程师多隆的程序世界
摘要: 写代码写到入定,是一种什么样的体验?11月29日(本周三),<阿里技术人纪录片系列>将带大家走进大神多隆的代码世界.在此之前,我们先来重温一篇关于多隆的旧文,来自<淘宝技术这 ...
- 赛尔号星球大战服务器维修,赛尔号星球大战11月29日更新公告
赛尔号星球大战11月29日新增了什么玩法?服务器的维护时间是多少?来看看9k9k小编rayxx带来的赛尔号星球大战11月29日更新公告. 11月29号下午15点至17点更新公告: 1.精灵 新增了两种 ...
- 质量与效能 | 11月29日TF84
质量和效能的平衡一直是软件研发过程中永恒的话题,从短期看质量和效能似乎是矛盾的,但是从长期看质量和效能却能做到有机地统一,面对质量和效能的平衡,我们需要的不仅是战略层面的思考,还需要微观层面的工程实践 ...
- 逆水寒服务器维护公告,《逆水寒》2018年11月29日更新公告
各位自在同门: 为了保证服务器的运行稳定和服务质量,<逆水寒>将于2018年11月29日早8:00停机进行维护工作,预计维护到上午10:00.如在维护期间无法完成维护内容,开机时间将顺延. ...
- 1849 年 11 月 29 日:真空管的发明者 John Fleming 诞生
约翰·弗莱明爵士(John Ambrose Fleming)出生于 1864 年 11 月 29 日,他是英国电气工程师和物理学家,以发明真空管(二极管).物理电磁学中使用的右手法则而闻名.弗莱明生于 ...
- Tuscany SCA V1.0中的扩展机制和启动过程中的扩展点[11月29日更新]
2007年9月24日Tuscany SCA 发布了V1.0版本的实现 .本文讲述的内容使用的就是基于这个版本的,代码下载地址 http://incubator.apache.org/tuscany/s ...
- 手把手教你申请EVUS美国十年签证!11月29日以后要收费了!
输入旅行文件信息: 输入登记者信息 登记美国联系人信息 (如果在美国没有联系人,可以写unknown) 资格问题 仔细核实所登记的信息内容.核实无误后点击"确认并继续"到下一步. ...
- 方舟服务器维护公告11月19日,《方舟指令》11月29日维护公告
致诸位御灵士: 奥利吉奈尔区誓灵协会将于11月29日(周四)9:00~13:00对以下服务器进行4小时的升级维护. 维护期间将无法进入游戏,还请各位御灵士做好下线准备, 感谢各位御灵士的理解和支持. ...
- 逆水寒服务器维护,逆水寒11月29日更新到几点进游戏 逆水寒更新维护公告
逆水寒在11月29日进行了一次新版本的更新,新团本风雪铁牢关要上线了,很多奖励接踵而来,一些小伙伴还不知道更新了什么,下面就来为大家分享一下逆水寒的更新维护公告. 各位自在同门: 为了保证服务器的运行 ...
- 第20届哥谭独立电影奖提名揭晓 11月29日颁奖
第20届哥谭独立电影奖提名揭晓 11月29日颁奖 2010-10-24 21:22:15 作者:yxlady 来源:伊秀女性网 转播到微博 北京时间10月24日消息,据国外媒体报道,第20届哥谭 ...
最新文章
- VC++ 打开文件夹,保存文件等对话框的调用
- centos service 无法用
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第三章 课后答案
- jMeter parallel controller 无法使用 CSV Data config 提供的变量?
- docker下交叉编译环境配置
- SPOJ Problem 6219:Edit distance
- .net remoting 技术
- Oracle sql给一列赋值,简单的Oracle变量SQL赋值
- 位运算 —— 一个数二进制形式尾端为 0 的个数
- 中老年人旅行有多狂野
- 数据窗口 label_Python实现数据可视化,让你的数据清晰起来!
- jQuery图片垂直滚动焦点图
- 随笔记----关于python 和C++ 里面的与或问题
- 花生壳 Linux arm
- 屏幕录像专家的使用说明
- 关于神经网络中隐藏层和神经元的深入理解
- 一次系统宕机认识系统日志
- java异步队对联_对联广告(带关闭的)
- Excel删除重复值
- 计组--CISC和RISC特点和区别
热门文章
- JS中判断对象是对象还是数组
- 反射内存 延时_PCI5565反射内存网技术的应用研究
- Selenium+Python测试键盘操作---全选、复制、剪切、粘贴
- 汉仪尚巍手书有版权吗_汉仪尚巍手书ttf下载
- 11.16上海交大PMP试题每日一题
- J-Link连上电路板,keil检测不出MCU
- 头部和四肢血量间相互流动速率系数的确定(含python代码)
- 三平面映射TriPlanar
- ContextCapture(Smart3D)总结(1)——构建空三模型(S3C,OSGB,DOM)
- 盲源分离算法学习笔记