基于高通MSM 8x60的I2C驱动终极讲解(6)

本文详细解析了Linux内核中平台设备如何与对应的驱动进行匹配和绑定的过程,包括device_add、bus_probe_device等关键函数的流程及其实现原理。
接着上一节分析,上一节讲到,把device_add(&pdev->dev);//把该设备注册到设备驱动模型中,接着该函数继续分析,看下设备驱动是怎么回事,设备是如何与驱动匹配绑定的。
int device_add(struct device *dev)
{
 if (!dev->p) {//如果dev的私有数据为空,则继续相应的初始化
  error = device_private_init(dev);
 }
 error = bus_add_device(dev);//把设备增加到设备依附的总线bus的devices链表上
 bus_probe_device(dev);//设备探测总线上的驱动
 }
void bus_probe_device(struct device *dev)
{
 if (bus && bus->p->drivers_autoprobe) {//如果bus不为空,并且是自动探测,则device_attach.
  ret = device_attach(dev);
 }
}
int device_attach(struct device *dev)
{
 int ret = 0;
 device_lock(dev);
 if (dev->driver) {//如果该device的driver不为空的话,就把该dev和该driver绑定,也就是把dev加到driver的devices链表
 } else {
   ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach);//否则,用改dev去探测bus上的每一个驱动
 }
}
下面是探测的过程,针对dev和从总线上取到的每一个驱动做匹配,匹配的过程如下:
static int __device_attach(struct device_driver *drv, void *data)
{
 struct device *dev = data;
 if (!driver_match_device(drv, dev))//调用总线的match函数,去匹配该dev和driver
  return 0;
 return driver_probe_device(drv, dev);//探测成功,试图绑定device和driver
}
下面就看下,总线的match函数
static int platform_match(struct device *dev, struct device_driver *drv)
{
 struct platform_device *pdev = to_platform_device(dev);
 struct platform_driver *pdrv = to_platform_driver(drv);
 /* match against the id table first */
 if (pdrv->id_table)//如果pdrv->id_table不为空,则用pdev的名字和该id_table列表中的名字匹配
  return platform_match_id(pdrv->id_table, pdev) != NULL;
 /* fall-back to driver name match */
 return (strcmp(pdev->name, drv->name) == 0);//如果pdrv->id_table为空,则用pdev的名字和该drv的名字比较,看是否匹配
}
下面接着分析driver_probe_device(drv, dev);函数。
该函数调用int driver_probe_device(struct device_driver *drv, struct device *dev)
{
 ret = really_probe(dev, drv);
}
really_probe()函数如下
static int really_probe(struct device *dev, struct device_driver *drv)
{
 dev->driver = drv;//把drv赋值给dev的driver
 if (dev->bus->probe) {//如果总线的probe函数存在,则先调用总线的probe函数
  ret = dev->bus->probe(dev);
 } else if (drv->probe) {//否则调用驱动的probe函数
  ret = drv->probe(dev);
 }
 driver_bound(dev);//如果都探测通过,就把dev加入到该driver的device链表中
 ret = 1;
}
到此平台设备已经加入到总线上,并且找到了自己的驱动。
基于分布式模型预测控制的多个固定翼无人机一致性控制(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,采用Matlab代码实现相关算法,属于顶级EI期刊的复现研究成果。文中重点研究了分布式模型预测控制(DMPC)在多无人机系统中的一致性控制问题,通过构建固定翼无人机的动力学模型,结合分布式协同控制策略,实现多无人机在复杂环境下的轨迹一致性和稳定协同飞行。研究涵盖了控制算法设计、系统建模、优化求解及仿真验证全过程,并提供了完整的Matlab代码支持,便于读者复现实验结果。; 适合人群:具备自动控制、无人机系统或优化算法基础,从事科研或工程应用的研究生、科研人员及自动化、航空航天领域的研发工程师;熟悉Matlab编程和基本控制理论者更佳; 使用场景及目标:①用于多无人机协同控制系统的算法研究与仿真验证;②支撑科研论文复现、毕业设计或项目开发;③掌握分布式模型预测控制在实际系统中的应用方法,提升对多智能体协同控制的理解与实践能力; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注DMPC算法的构建流程、约束处理方式及一致性协议的设计逻辑,同时可拓展学习文中提及的路径规划、编队控制等相关技术,以深化对无人机集群控制的整体认知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值