platform总线
创始人
2024-02-29 20:47:04
0

1、什么是platform总线?

platform是Linux内核抽象出来的软件代码,用于设备与驱动的连接,设备与驱动通过总线进行匹配;匹配成功后会执行驱动中的probe函数,在probe函数中可以获取到设备的信息;

设备与驱动的信息分别通过链表进行管理。

2、如何运用platform

编写驱动和设备端的代码----搭建platform框架

设备与硬件有三种匹配方式:名字匹配,id_table匹配,设备树匹配

名字匹配:

驱动代码

#include 
#include 
#include 
struct resource *res;
int irqno;//定义一个probe函数int pdrv_probe(struct platform_device *pdev){//获取MEM类型的资源res=platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("获取MEM资源失败\n");return ENODATA;}//获取中断类型的资源irqno=platform_get_irq(pdev,0);if(irqno<0){printk("获取中断资源失败\n");return ENODATA;}printk("addr:%#llx ,irqno:%d\n",res->start,irqno);return 0;}int pdrv_remove(struct platform_device *pdev){printk("%s:%d\n",__func__,__LINE__);return 0;}//热插拔宏,可以在插入硬件时,自动安装驱动MODULE_DEVICE_TABLE(platform,idtable);//对象初始化struct platform_driver pdrv={.probe=pdrv_probe,.remove=pdrv_remove,  .driver={.name="aaaaa",  //按名字匹配,只能匹配一个设备     }, };module_platform_driver(pdrv);  //一键注册驱动
MODULE_LICENSE("GPL");

设备代码

#include 
#include 
#include //对设备信息进行填充struct resource res[]={[0]={.start=0x12345678,.end=0x12345678+49,.flags= IORESOURCE_MEM,     },[1]={.start=71,.end=71,.flags= IORESOURCE_IRQ,      },};//定义一个relese函数
void pdev_release(struct device *dev)
{printk("%s:%d\n",__func__,__LINE__);
}//给对象赋值struct platform_device pdev={.name="aaaaa",.id=PLATFORM_DEVID_AUTO,.dev={.release=pdev_release,      },.resource=res,.num_resources=ARRAY_SIZE(res),        };static int __init mycdev_init(void)
{//注册devicereturn platform_device_register(&pdev);
}
static void __exit mycdev_exit(void)
{//注销deviceplatform_device_unregister(&pdev);}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");

id_table匹配

#include 
#include 
#include 
#include 
struct resource *res;
int irqno;//定义一个probe函数int pdrv_probe(struct platform_device *pdev){//获取MEM类型的资源res=platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("获取MEM资源失败\n");return ENODATA;}//获取中断类型的资源irqno=platform_get_irq(pdev,0);if(irqno<0){printk("获取中断资源失败\n");return ENODATA;}printk("addr:%#llx ,irqno:%d\n",res->start,irqno);return 0;}int pdrv_remove(struct platform_device *pdev){printk("%s:%d\n",__func__,__LINE__);return 0;}//id_table创建struct platform_device_id idtable[]={{"hi1",0},{"hi2",1},{"hi3",2},{},//防止越界};//热插拔宏,可以在插入硬件时,自动安装驱动MODULE_DEVICE_TABLE(platform,idtable);//对象初始化struct platform_driver pdrv={.probe=pdrv_probe,.remove=pdrv_remove,  .driver={.name="aaaaa",  //按名字匹配,只能匹配一个设备     }, .id_table=idtable, //设置名字表匹配,可以匹配多个硬件设备};module_platform_driver(pdrv);
MODULE_LICENSE("GPL");

设备树匹配:

1、编写自己的设备树节点---编译设备树,开发板上电加载
2、驱动对象中,匹配方式-----设备树匹配
3、构建comptible表
struct of_device_id oftable[]={
{.compatible="hqyj,platform",},
};设备初始化结构体中,添加设备树匹配
.of_match_table=oftable,

 驱动编译后拷贝到~/nfs/rootfs

#include 
#include 
#include 
#include 
#include 
#include 
struct resource *res;
int irqno;
struct gpio_desc *gpiono; //存放gpio编号//定义一个probe函数int pdrv_probe(struct platform_device *pdev){//获取MEM类型的资源res=platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("获取MEM资源失败\n");return ENODATA;}//获取中断类型的资源irqno=platform_get_irq(pdev,0);if(irqno<0){printk("获取中断资源失败\n");return ENODATA;}printk("addr:%#x ,irqno:%d\n",res->start,irqno);//解析设备树节点信息gpiono=gpiod_get_from_of_node(pdev->dev.of_node,"myled1",0,GPIOD_OUT_HIGH,NULL);if(IS_ERR(gpiono)){printk("获取gpio编号失败\n");return PTR_ERR(gpiono);}printk("点亮led1\n");gpiod_set_value(gpiono,1);return 0;}int pdrv_remove(struct platform_device *pdev){gpiod_set_value(gpiono,0);gpiod_put(gpiono);return 0;}struct of_device_id oftable[]={{.compatible="hqyj,platform",},{},
};//热插拔宏,可以在插入硬件时,自动安装驱动MODULE_DEVICE_TABLE(of,oftable);//对象初始化struct platform_driver pdrv={.probe=pdrv_probe,.remove=pdrv_remove,  .driver={.name="aaaaa",  //按名字匹配,只能匹配一个设备.of_match_table=oftable,//设备树匹配     }, };module_platform_driver(pdrv);
MODULE_LICENSE("GPL");

 现象:

如何让设备安装时,驱动自动加载,就像插入u盘,系统会自动识别硬件安装驱动

MODULE_DEVICE_TABLE(platform,idtable);添加此行即可

 

相关内容

热门资讯

八年级班会主持词 八年级班会主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在如今这个中国,活动集会越来越...
职工追悼词 职工追悼词 各位亲友、各位来宾:  今天我们怀着十分沉痛的心情深切悼念退休职工×××。  ×××因病...
春天活动主持词 春天活动主持词  大家上午好!  踏着春天的脚步,踩着春风的节拍,春天已经来到我们中间,春天是生命的...
幼儿园家长会园长致辞 幼儿园家长会园长致辞幼儿园家长会园长致辞亲爱的家长、老师们:首先感谢大家在百忙中抽空参加今天举行的家...
教师节活动主持词 教师节活动主持词  一、什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动...
百日宴致辞 百日宴致辞范文  在日复一日的学习、工作或生活中,许多人都有过写致辞的经历,对致辞都不陌生吧,在各种...
2021年会总经理简短致辞 2021年会总经理简短致辞范文(通用6篇)  在学习、工作、生活中,许多人都有过写致辞的经历,对致辞...
中学秋季开学典礼主持词 中学秋季开学典礼主持词  中学秋季开学典礼主持词    第一项:升国旗仪式(升旗仪式结束后,请新教师...
婚礼男方家长经典致辞 婚礼男方家长经典致辞  大家好!今天是我儿子××和××小姐结婚的大喜日子,我感到非常高兴和荣幸。高兴...
元宵晚会主持词 关于元宵晚会主持词(通用11篇)  主持词是主持人在台上表演的灵魂之所在。在当今社会生活中,司仪等是...
国学经典诵读比赛主持词 国学经典诵读比赛主持词  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。随着社会...
离职感谢词 离职感谢词  在xx近两个月的生活,让我感触很多,首先感谢领导一直以来对我们的包容,感谢x经理的照顾...
年会总经理致辞 年会总经理致辞(精选7篇)  在学习、工作、生活中,大家都经常接触到致辞吧,致辞具有“礼仪性”或“仪...
八十大寿宴会主持词 八十大寿宴会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在当下这个社会中,主持人的需求越来越高...
校园迎新春晚会主持词 校园迎新春晚会主持词  主持词已成为各种演出活动和集会中不可或缺的一部分。在当今不断发展的世界,越来...
同桌的你小品台词参考 同桌的你小品台词参考  王小利和小沈阳上场  王小利:儿子,今天,我带你去见一位特别重要的人物。  ...
文艺汇演主持人串词 文艺汇演主持人串词  开场:  萌:尊敬的各位领导,各位来宾。  泓:亲爱的老师们,同学们。大家  ...
年度总结表彰大会主持词 年度总结表彰大会主持词9篇  总结是指社会团体、企业单位和个人在自身的某一时期、某一项目或某些工作告...
小学庆六一儿童节主持词 小学庆六一儿童节主持词(精选5篇)  契合现场环境的主持词能给集会带来双倍的效果。随着社会一步步向前...
经销商大会主持稿 经销商大会主持稿推荐  经销商大会主持稿(一)  尊敬的各位来宾,各位朋友  大家上午好  (8:5...