Linux驱动probe是什么,如何编写probe函数?

Linux 驱动 Probe 函数详解

在 Linux 设备驱动模型中,probe 函数是驱动程序最核心的入口点之一,它扮演着“设备初始化”的角色,当内核发现某个硬件设备与某个驱动程序匹配时,就会调用该驱动的 probe 函数。

Probe 函数的本质

probe 函数的主要目的是验证硬件是否存在并配置硬件资源,它在驱动程序加载后,由内核的设备总线(Bus)在匹配成功时自动触发。

你简历写熟悉Linux驱动,结果连insmod都报错?
加载中
你简历写熟悉Linux驱动,结果连insmod都报错?
  • 触发时机:当总线(如 PCI, USB, I2C, Platform Bus)发现一个设备 ID 与驱动程序注册的 ID 列表匹配时。
  • 核心任务:将通用的内核资源转化为具体的硬件操作接口。

Probe 的工作流程

一个典型的 probe 函数执行流程通常包含以下步骤:

  • 资源获取:
    • 获取内存映射地址(I/O Memory)。
    • Linux驱动probe是什么,如何编写probe函数?

    • 获取中断号(IRQ)。
    • 获取时钟(Clock)和 GPIO 资源。
  • 硬件初始化:
    • 配置寄存器初始值。
    • 唤醒硬件设备。
    • 测试硬件响应(确认设备确实在总线上)。
  • 软件结构体初始化:
    • 分配私有数据结构(通常使用 devm_kzalloc)。
    • 初始化锁(Mutex/Spinlock)和队列。
  • 接口注册:
    • 向内核注册字符设备、网络设备或输入设备。
    • 在 /sys/class 或 /dev 下创建设备节点。

匹配机制(Matching)

内核如何决定调用哪个驱动的 probe?这取决于总线的匹配规则:

  • Platform 设备:通过 name 字符串匹配,或者通过 Device Tree (设备树) 中的 compatible 属性匹配。
  • Linux驱动probe是什么,如何编写probe函数?

    PCI 设备:通过 Vendor ID 和 Device ID 匹配。

  • USB 设备:通过 Vendor ID 和 Product ID 匹配。
  • I2C 设备:通过设备树的 compatible 属性或 I2C ID 表匹配。

关键技术点:devm 资源管理

在现代 Linux 驱动中,为了避免在 probe 失败时手动释放大量资源(导致内存泄漏),广泛使用了 Managed Device Resource (devm) 机制。

  • 特点:使用 devm_ 前缀的函数(如 devm_kzalloc, devm_ioremap, devm_request_irq)。
  • 优势:这些资源在驱动被卸载(remove)或 probe 执行失败返回时,由内核自动释放,极大地简化了错误处理路径。

Probe 函数的返回值

probe 函数的返回值直接决定了设备是否被成功绑定:

  • 返回 0

    Linux驱动probe是什么,如何编写probe函数?

    :表示 probe 成功,设备与驱动绑定完成,设备进入工作状态。

  • 返回负数(如 -ENODEV, -ENOMEM):表示 probe 失败,内核将认为该驱动不适用于此设备,并释放已分配的资源。

Probe 与 Remove 的关系

probe 和 remove 是一对对称的操作:

  • probe:资源申请 $rightarrow$ 硬件初始化 $rightarrow$ 接口注册。
  • remove:接口注销 $rightarrow$ 硬件停止 $rightarrow$ 资源释放。

Probe 函数是驱动程序的“敲门砖”,一个健壮的 probe 函数应该具备:

  • 严格的错误检查:每一步资源申请后必须检查返回值。
  • 最小化初始化:仅初始化必要资源,避免阻塞启动过程。
  • 高效的资源管理:优先使用 devm 系列函数。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/489610.html

赞 (0)
什么是服务器进程模式,服务器进程模式和线程模式哪个好?
上一篇 2026年7月13日 01:51
Python入门看什么书,有哪些Python学习书籍推荐?
下一篇 2026年7月13日 01:56

相关推荐

  • 服务器跑分一台需要多少钱,最新报价贵不贵?

    一台满足跑分需求的服务器,租用月成本通常在200元至3000元区间,具体取决于CPU核心数、内存容量和是否含GPU卡;自购整机则需5000元起步,高端配置轻松突破5万元,若只是做性能基准测试或短期压测,租用是最划算的选择,持牌自营机房按小时计费的模式,能将单次测试成本压缩到几十元级别,跑分服务器的价格为什么差距……

    2026年8月28日
    800
  • CS2打队友时服务器禁赛多少小时,CS2禁赛怎么解除

    在CS2中,恶意伤害队友导致服务器禁赛,首次禁赛时长通常为30分钟,若多次触发,禁赛时间会依次递增至2小时、1天甚至7天,极端情况下可能被封禁账号,这一规则自CS2上线以来基本沿用,玩家可通过官方支持页面确认具体条款,以下内容将详细解析禁赛机制、避免方法以及如何选择稳定服务器减少误判,CS2打队友惩罚机制详解伤……

    2026年7月29日
    300
  • PC版战地一个服务器能容纳多少人?,怎么查?

    PC版战地系列服务器的标准人数为64人(32对32),但《战地2042》已将上限提升至128人,具体容量取决于作品版本与游戏模式,战地系列PC版服务器容量详解历代作品标准人数战地系列自诞生以来,服务器容量始终是其核心设计参数之一,不同作品因引擎、地图规模和玩法定位,采用了不同的对战人数标准,《战地1942》《战……

    2026年8月18日
    1600
  • 物理服务器一套多少钱?,物理服务器租用一个月多少钱?

    一套物理服务器的月租价格通常落在300元至3000元区间,年付或买断方案会更低,但最终数字取决于CPU、内存、硬盘、带宽和机房等级,报价单上的数字从哪里来物理服务器的价格不是拍脑袋定的,它由四个硬性变量决定:硬件配置、网络带宽、机房环境和服务等级,看懂这四个变量,比直接问“多少钱”更有用,硬件配置是价格底盘CP……

    2026年9月20日
    100
  • Linux下如何安装WinRAR?linux rar解压命令

    Linux系统原生不支持WinRAR,需通过安装RAR软件开源替代品RARBG或商业版WinRAR(通过Wine运行)来实现解压功能,推荐优先使用开源方案以保障系统稳定性,在Windows生态中,WinRAR几乎是处理压缩文件的代名词,许多用户刚接触Linux时,第一反应往往是寻找同样的图形界面工具,Linux……

    2026年7月5日
    10700
  • 内蒙电信DNS服务器地址是多少,如何设置?

    内蒙古电信DNS服务器地址常用主用为 202.99.224.68,备用为 202.99.224.8,适用于内蒙古电信宽带拨号、专线及移动数据网络,手动填写时首选主用、次选备用,很多朋友遇到网页打不开但QQ能上,十有八九是DNS解析卡住了,把地址换成以上两个,多数情况下能直接恢复访问,下面按实际使用场景拆开说清楚……

    2026年9月19日
    200
  • 电脑作为NTP服务器端口是多少,NTP服务默认端口号是什么?

    电脑作为NTP服务器时,对外提供时间同步服务的默认端口是UDP 123,这是互联网编号分配机构(IANA)规定的标准端口,所有主流操作系统和网络设备均遵循此约定,无论你使用的是Windows Server自带的W32Time服务,还是Linux下的Chrony或NTPd服务,监听端口都固定为UDP 123,只有……

    2026年9月1日
    400
  • Linux下下载软件怎么操作?linux 下下载软件命令

    在Linux环境下下载文件,首选工具是wget和curl,前者适合后台断点续传大文件,后者适合API调试与轻量级请求,两者均无需图形界面即可高效完成资源获取,Linux系统以其稳定性和强大的命令行功能深受开发者喜爱,但在日常使用中,如何高效、安全地从互联网获取资源是一个高频需求,不同于Windows下双击安装包……

    2026年7月11日
    18500
  • 旧服务器一台值多少钱,二手回收价格是多少?

    旧服务器值多少钱,市场行情大致在300元到1500元之间,但具体成交价取决于硬件配置、品牌型号、成色以及最重要的销售渠道,残值高低全看你怎么卖,很多朋友以为旧服务器跟旧电脑一样称斤卖,那就大错特错了,服务器是生产工具,它的价值核心在算力、扩展性和品牌服务上,哪怕是一台用了五年的机器,只要有明确的用途,它就不是废……

    2026年9月4日
    800
  • e5服务器自己配比买能省多少钱,哪里买最划算?

    自己配E5服务器比直接买整机或租用云服务在硬件成本上确实能省下相当一部分,但代价是你要自己承担后续维护、稳定性校验以及合规风险,自己配E5服务器,钱具体省在哪里?自己配的省钱逻辑主要来自硬件选择的自由度和渠道成本差,E5处理器属于上一代至强系列,目前二手市场流通量大,一颗E5 v4系列处理器在原厂停止发售后,批……

    2026年8月4日
    900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注