driver_register和bus_add_driver的区别是什么?

时间: 2023-04-11 16:01:53 浏览: 130
driver_register和bus_add_driver都是Linux内核中的函数,但它们的作用不同。driver_register用于注册一个设备驱动程序,而bus_add_driver用于将驱动程序添加到总线中。具体来说,driver_register函数将驱动程序注册到内核中,以便内核可以在需要时加载该驱动程序。而bus_add_driver函数则将驱动程序添加到总线中,以便总线可以在需要时加载该驱动程序。
相关问题

bus_register代码流程

下面是 "bus_register" 函数的代码流程: ```c int bus_register(struct bus_type *bus) { int retval; if (!bus || !bus->name) return -EINVAL; /* Add the bus to the list */ retval = bus_add(bus); if (retval) return retval; /* Register any drivers that have already been added */ driver_register(bus, bus->p); return 0; } ``` 首先,函数会检查传入的参数是否有效。如果 "bus" 指针或者 "bus->name" 为空,则会返回 -EINVAL。 接着,函数会调用 "bus_add" 函数将设备总线添加到内核的设备总线列表中。如果添加失败,则会返回错误代码。 然后,函数会调用 "driver_register" 函数将设备驱动程序注册到总线上。该函数会将驱动程序添加到总线的驱动程序列表中,并在总线上查找与驱动程序名称匹配的设备。如果找到了匹配的设备,则会调用驱动程序的 "probe" 函数进行设备初始化,否则驱动程序将不会被加载。 最后,函数会返回 0 表示注册成功,或者返回其他错误代码表示注册失败。 总之,"bus_register" 函数的代码流程比较简单,主要是调用了 "bus_add" 和 "driver_register" 函数来实现设备总线和设备驱动程序的注册。

linux bus_register代码流程

下面是 Linux 内核中 "bus_register" 函数的代码流程: ```c int bus_register(struct bus_type *bus) { int ret; if (!bus || !bus->name) return -EINVAL; /* Add the bus to the list */ ret = bus_add(bus); if (ret) return ret; /* Register any drivers that have already been added */ driver_register(bus, bus->p); return 0; } ``` 首先,函数会检查传入的参数是否有效,包括 "bus" 指针和 "bus->name" 字段是否为空。如果参数无效,则会返回 -EINVAL。 接着,函数会调用 "bus_add" 函数将设备总线添加到内核的设备总线列表中。该函数会检查是否有相同名称的总线已经存在于列表中,如果没有则会添加到列表中。 然后,函数会调用 "driver_register" 函数将设备驱动程序注册到总线上。该函数会将驱动程序添加到总线的驱动程序列表中,并在总线上查找与驱动程序名称匹配的设备。如果找到了匹配的设备,则会调用驱动程序的 "probe" 函数进行设备初始化,否则驱动程序将不会被加载。 最后,函数会返回 0 表示注册成功,或者返回其他错误代码表示注册失败。 总之,"bus_register" 函数是 Linux 内核中用于注册设备总线的重要函数,它通过调用 "bus_add" 和 "driver_register" 函数来实现设备总线和设备驱动程序的注册。

相关推荐

[ 4.858794] uwe5621_bt_tty_init [ 4.862131] mtty_probe unisoc soc, continue [ 4.868449] mtty_probe init device addr: 0x000000007db4bee8 [ 4.868608] rfkill_bluetooth_init [ 4.871951] rfkill_bluetooth_init end [ 4.872048] marlin_sdio_init [ 4.873682] mtty_probe unisoc soc, continue [ 4.873724] sysfs: cannot create duplicate filename '/devices/virt[ 4.873829] CPU: 1 PID: 121 Comm: init Not tainted 4.19.193 #34 [ 4.873842] Hardware name: ROC-RK3566-PC HDMI(Android) (DT) [ 4.873849] Call trace: [ 4.873868] dump_backtrace+0x0/0x178 [ 4.873876] show_stack+0x14/0x20 [ 4.873886] dump_stack+0x94/0xb4 [ 4.873895] sysfs_warn_dup+0x64/0x80 [ 4.873902] sysfs_create_dir_ns+0xdc/0xf8 [ 4.873910] kobject_add_internal+0xa0/0x288 [ 4.873916] kobject_add+0x98/0x100 [ 4.873928] device_add+0xec/0x698 [ 4.873934] device_register+0x1c/0x28 [ 4.873945] tty_register_device_attr+0xe4/0x208 [ 4.873951] tty_register_driver+0x138/0x248 [ 4.873970] mtty_probe+0x144/0x33u0 [sprdbt_tty] [ 4.873978] platform_drv_probe+0x50/0xa8 [ a 4.873984] really_probe+0xl228/0x2a0 [ 4.873991] driver_probe_device+0x58/0x100 [ 4.873996] device_driver_attach+0x6c/0x78 [ 4.874001] __driver_attach+0xb0/0xf0 [ 4.874009] bus_for_each_dev+0x68/0xc8 [ 4.874014] driver_attach+0x20/0x28 [ 4.874019] bus_add_driver+0xf8/0x1f0 [ 4.874025] driver_register+0x60/0x110 [ 4.874031] __platform_driver_register+0x40/0x48 [ 4.874044] uwe5621_bt_tty_init+0x44/0x1000 [sprdbt_tty] [ 4.874052] do_one_initcall+0x48/0x240 [ 4.874061] do_init_module+0x5c/0x1c8 [ 4.874069] load_module+0x18f8/0x1f68 [ 4.874074] __se_sys_finit_module+0xc0/0xd8 [ 4.874079] __arm64_sys_finit_module+0x14/0x20 [ 4.874087] el0_svc_common.constprop.0+0x64/0x178 [ 4.874092] el0_svc_handler+0x28/0x78 [ 4.874097] el0_svc+0x8/0xc [ 4.874179] kobject_add_internal failed for ttyBT0 with -EEXIST/, don't try to register things twith the same name in the same directory. [ 4.874225] list_del corruption, ffffffc079941ea8->next is LIST_POISON1 (dead000000000100) [ 4.874270] ------------[ cut here ]------------

最新推荐

recommend-type

ant-design-vue-1.1.10-beta.zip

基于 Ant Design 和 Vue 的企业级 UI 组件库
recommend-type

基于flask实现的社交博客项目--《FlaskWeb开发》.zip

基于flask实现的社交博客项目--《FlaskWeb开发》.zip
recommend-type

校园二手交易平台小程序源码 (优秀毕业设计源码)

1. 校园二手交易平台小程序代码说明:经导师指导并认可通过的98分毕设项目代码。 2.适用对象:本代码学习资料适用于计算机、电子信息工程、数学等专业正在做毕设的学生,需要项目实战练习的学习者,也适用于课程设计、期末大作业。 3.技术栈:java,项目代码都经过严格调试,代码没有任何bug! 4. 作者介绍:大厂码农,java领域创作者,阿里云开发社区乘风者计划专家博主,专注于大学生项目实战开发,文章底部有博主联系方式,更多优质系统、项目定制请私信。 5. 最新计算机软件毕业设计选题大全: https://blog.csdn.net/weixin_45630258/article/details/135901374
recommend-type

ant-design-vue-3.1.0.zip

基于 Ant Design 和 Vue 的企业级 UI 组件库
recommend-type

399、基于单片机protues仿真的多功能计步器设计(仿真图、源代码、讲解视频)

399、基于单片机protues仿真的多功能计步器设计(仿真图、源代码、讲解视频) 计步器功能的实验测试: 采用USB电源线连接移动电源给系统进行供电。首先打开电源开关,系统初始化后,将开始进行计步。在液晶显示屏上输入用户的身高体重,然后佩戴计步器步行,开始测试行走步数、速度以及消耗卡路里。计步器实物图及介绍如下, 按键从左到右依次是: ⑴设置键:按下按键进入设置身高体重页面; ⑵加值键:设置时,按下该按键对应参数+1 ; ⑶ 减值键:设置时,按下该按键对应参数-1 ; ⑷ 复位键:按下该按键单片机复位。 实际测试效果如下: (1)实物联电后打开开关的初始状态如图5-3所示。“V”代表当前瞬时速度,“B”代表当前行走步数,代表当前行走里程,代表当前行走所消耗的卡路里。 (2)按下按键1设置键设置身高170cm ,再按下按键1设置体重48kg ,设置好后再按一下退出。 ⑶ 检测运动后的实验图如图5-6所示,传感器采集到的运动加速度,显示步数为,总里程为,瞬时速度为,消耗的卡路里为。瞬时速度在停下运动后,逐渐降为0。其他示数不变。 ⑷ 按下右侧复位键后的实验图如图5-7所示,行走步
recommend-type

硅水凝胶日戴镜三年影响调查:舒适度提升与角膜变化

本文是一篇深入研究硅水凝胶日戴隐形眼镜对角膜长期影响的论文,由Beata Kettesy等人在2015年发表。标题指出,调查的目标是第二代Lotrafilcon B硅水凝胶(SiH)隐形眼镜在连续三年每日佩戴下的角膜变化。研究对象分为两组:一组是已习惯佩戴传统水凝胶镜片并转用Lotrafilcon B的患者(Group 1,共28人),另一组是初次接触隐形眼镜的新手佩戴者(Group 2,27人)。 研究方法采用主观评价,通过自我报告问卷评估每位患者的眼部舒适度。同时,通过接触式偏振显微镜对角膜进行详细的分析,以测量佩戴Lotrafilcon B SiH隐形眼镜后的不同时间点——即佩戴四周、一个月、六个月、一年、两年和三年后的角膜厚度以及内皮层状况。实验结果显示,Group 1的患者在主观舒适度上有所改善,表明新镜片可能减少了不适感。然而,文章并未详细透露关于角膜具体变化的数据或观察到的长期影响,这可能是为了进一步的临床研究和数据分析。 这篇论文的关键知识点包括: 1. 硅水凝胶隐形眼镜的长期影响:关注了新型Lotrafilcon B材质的隐形眼镜在长时间(三年)日常佩戴后对角膜的影响,这对于隐形眼镜材料的研发和选择具有重要意义,因为它可能影响用户的舒适度和眼睛健康。 2. 分组设计:通过对比现有水凝胶用户和新手用户的体验,研究了适应性因素在舒适度和潜在生理变化中的作用。 3. 角膜参数测量:使用先进的接触式偏振显微镜技术,提供了量化数据来评估角膜的结构变化,这是评估隐形眼镜安全性的重要依据。 4. 舒适度评估:主观问卷的使用反映了用户对新镜片的接受程度,是衡量隐形眼镜质量的重要指标。 5. 结论与未来研究方向:初步的结果表明了积极的趋势,但可能还存在未详述的详细分析或可能的风险,暗示了该领域还有待更深入的研究。 这篇论文提供了关于硅水凝胶隐形眼镜长期佩戴对角膜影响的初步洞察,为隐形眼镜的设计优化和用户指导提供了有价值的数据基础。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

复杂性分析工具自动化指南:解放人力,提升效率

![复杂性分析工具自动化指南:解放人力,提升效率](https://ask.qcloudimg.com/http-save/8934644/afc79812e2ed8d49b04eddfe7f36ae28.png) # 1. 复杂性分析工具概述** 复杂性分析工具是用于评估和管理软件系统复杂性的工具。它们提供了一系列功能,包括: - **代码度量:**计算代码大小、复杂度和可维护性等指标。 - **可视化:**生成代码结构、依赖关系和影响分析图。 - **规则检查:**识别违反最佳实践或编码标准的代码。 这些工具对于理解和管理软件系统复杂性至关重要,有助于提高代码质量、减少维护成本并降低
recommend-type

'uvicorn' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

'uvicorn' 是一个用于运行现代Python web应用程序的高性能异步服务器,特别适用于使用WebSockets、ASGI协议的应用,如FastAPI和Django等。当你在命令行尝试运行 'uvicorn' 但是收到这个错误提示时,这意味着: 1. **不在系统PATH中**:uvicorn未添加到系统的环境变量`PATH`,因此命令行找不到它。你需要将其安装目录添加到系统PATH,或者直接使用全路径运行。 2. **未安装**:你尚未安装 uvicorn,可以使用 `pip install uvicorn` 来安装。 3. **版本问题**:如果已安装,确认你安装的是支持当前
recommend-type

光纤集成布拉格光散射微光谱学:迈向体内布拉格内窥镜

本文主要探讨了纤维集成布拉格光散射微光谱学(Fiber-integrated Brillouin microspectroscopy)在实现布拉格内窥镜(Brillouin endoscopy)方面的潜力与挑战。布拉格成像(Brillouin Imaging, BI)作为一种快速发展的技术,它在微尺度上用于研究组织和生物材料的机械特性,对于疾病的早期诊断具有巨大的应用前景。传统的BI方法虽然理论上适用于活体和现场测量,但在实际应用中,尤其是在医疗领域进行体内检测,例如通过柔性导管到达特定部位,尚未得到广泛报道。 作者们在该研究中首次实验性地探索了将布拉格光散射显微镜与标准光纤组件相结合,以构建出一种布拉格内窥镜系统。他们分别展示了单光纤和双光纤内窥镜的设计和性能评估。然而,文章指出一个关键挑战在于光纤内的强烈后向布拉格散射,这可能会对内窥镜的信号质量和分辨率产生负面影响。解决这个问题对于提升布拉格内窥镜在生物医学领域的实用性和准确性至关重要。 通过集成光纤技术,布拉格内窥镜有望实现对体内微结构的实时、非侵入式探测,这对于肿瘤检测、心血管疾病监测以及组织修复评估等具有显著的意义。此外,优化的光纤设计、信号处理算法以及新型材料的应用可能会进一步提高其灵敏度和空间分辨率,从而推动这一领域向着临床应用迈进一步。 这项研究为布拉格内窥镜技术的未来发展提供了一个重要的里程碑,展示了将其与光纤集成的可能性,并强调了未来研究需要解决的关键技术问题。随着技术的进步,布拉格内窥镜有可能成为医疗诊断工具箱中的一个重要组成部分,对改善人类健康有着深远的影响。