华清远见(上海中心)22071
创始人
2024-02-29 08:20:07

platform总线,三种匹配方式

一、设备名字匹配

设备文件代码>>>

#include 
#include 
#include //对设备信息进行填充
struct resource res[]={[0]={.start=0x12345678,.end=0x12345678+40,.flags=IORESOURCE_MEM,},[1]={.start=71,.end=71,.flags=IORESOURCE_IRQ,},
};
//定义一个release函数
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 demo_init(void)
{return platform_device_register(&pdev);
}
static void __exit demo_exit(void)
{platform_device_unregister(&pdev);   
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");

驱动文件代码>>>

#include 
#include 
#include int pdir_probe(struct platform_device *pdev)
{printk("%s:%d\n",__func__,__LINE__);return 0;
}
int pdir_remove(struct platform_device *pdev)
{printk("%s:%d\n",__func__,__LINE__);return 0;
}
struct platform_driver pdir={.probe=pdir_probe,.remove=pdir_remove,.driver={.name="aaaaa",//通过设备名字匹配},
};
static int __init demo_init(void)
{platform_driver_register(&pdir);return 0;
}
static void __exit demo_exit(void)
{platform_driver_unregister(&pdir);
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");

实验现象>>>

匹配成功

 

二、通过id_table的方式匹配

设备文件代码>>>

        在给对象赋值时,将name改为名字列表中的名字即可

#include 
#include 
#include //对设备信息进行填充
struct resource res[]={[0]={.start=0x12345678,.end=0x12345678+40,.flags=IORESOURCE_MEM,},[1]={.start=71,.end=71,.flags=IORESOURCE_IRQ,},
};
//定义一个release函数
void pdev_release(struct device *dev)
{printk("%s:%d\n",__func__,__LINE__);
}
//给对象赋值
struct platform_device pdev={.name="hello1",     //选择名字列表中的名字.id=PLATFORM_DEVID_AUTO,.dev={.release=pdev_release,},.resource=res,.num_resources=ARRAY_SIZE(res),
};
static int __init demo_init(void)
{return platform_device_register(&pdev);
}
static void __exit demo_exit(void)
{platform_device_unregister(&pdev);   
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");

驱动文件代码>>>

        构建名字表

#include 
#include 
#include 
#include 
#include 
struct resource *res;
int irqno;int pdir_probe(struct platform_device *pdev)
{//获取MEM类型的资源res = platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("get MEM resource error\n");return -ENODATA;}irqno = platform_get_irq(pdev,0);if(irqno<0){printk("get irq resource error\n");return -ENODATA;}printk("addr:%#llx,irqno:%d\n",res->start,irqno);return 0;
}
int pdir_remove(struct platform_device *pdev)
{printk("%s:%d\n",__func__,__LINE__);return 0;
}
//构建名字表
struct platform_device_id idtable[]={{"hello1",0},{"hello2",1},{"hello3",2},{},
};
//热插拔宏
MODULE_DEVICE_TABLE(platform,idtable);
//对象初始化
struct platform_driver pdir={.probe=pdir_probe,.remove=pdir_remove,.driver={.name="aaaaa",},.id_table=idtable,
};
//使用一键注册宏
module_platform_driver(pdir);
MODULE_LICENSE("GPL");

实验现象>>>

         匹配成功,打印设备信息结构体的首地址

三、通过设备树匹配

添加设备树节点>>>

 驱动程序>>>

#include 
#include 
#include 
#include 
#include 
struct resource *res;
int irqno;int pdir_probe(struct platform_device *pdev)
{//获取MEM类型的资源res = platform_get_resource(pdev,IORESOURCE_MEM,0);if(res==NULL){printk("get MEM resource error\n");return -ENODATA;}irqno = platform_get_irq(pdev,0);if(irqno<0){printk("get irq resource error\n");return -ENODATA;}printk("addr:%#x,irqno:%d\n",res->start,irqno);return 0;
}
int pdir_remove(struct platform_device *pdev)
{printk("%s:%d\n",__func__,__LINE__);return 0;
}//构建compatible表
struct of_device_id oftable[]={{.compatible="hqyj,platform",},{}
};
//热插拔宏
MODULE_DEVICE_TABLE(of,oftable);
//对象初始化
struct platform_driver pdir={.probe=pdir_probe,.remove=pdir_remove,.driver={.name="aaaaa",.of_match_table=oftable,},
};
module_platform_driver(pdir);
MODULE_LICENSE("GPL");

实验现象>>>

 

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...