第99期 | 新设备一插,内核怎么知道装哪个驱动?

操作系统 · · 九羲科技

一、热插拔的第一声,是内核喊的

1999 年底,Linux 2.3 开发末期,一个不起眼的新接口合入内核:发现新设备时,内核去执行 /proc/sys/kernel/hotplug 里登记的程序,默认 /sbin/hotplug,顺手塞给它一堆环境变量——ACTION=add,设备是谁、在哪¹。2001 年 1 月,2.4 内核发布,热插拔成了标配²。

反常识的在后面:内核只负责"喊",不负责"认"。喊的是"我这儿多了个东西",认"它该用哪个驱动",是用户态的活。这不是偷懒,是刻意为之——机制留内核,策略交出去。

2003 年 11 月,Greg Kroah-Hartman 和 Kay Sievers 放出 udev³。此前的 devfs 把设备命名策略写进内核,社区嫌了它好几年,2.6.13 彻底移除⁴。udev 把整套家当搬到用户态:内核只发 uevent(走 netlink),udevd 按规则文件办事——建 /dev 节点、定权限、叫 modprobe 装驱动⁵。

"认"的机关,叫 MODALIAS。每个设备在 sysfs 里都有一张身份证(/sys/bus/pci/devices/…/modalias,一串厂商号设备号的编码);驱动在源码里用 MODULE_DEVICE_TABLE 声明自己认哪些证;depmod 把全内核的认领表抽出来,写成 /lib/modules/…/modules.alias——一本电话簿⁶。设备一出现,uevent 里带着身份证号,modprobe 翻电话簿,对上号就 insmod。像酒店前台:不记客人的脸,只认身份证,对上电话簿就放行。

开机时已经插着的设备呢?开机跑一遍 udevadm trigger,把所有设备的 uevent 重放一遍——开机,就是一次全员参与的"冷插拔"。

维纳在《控制论》里说,一切控制都是"感知—比较—执行"的回路⁹(思想化用):uevent 是感知,规则匹配是比较,modprobe 装驱动是执行——热插拔,就是一条跑在内核与用户态之间的反馈回路。

二、能力的热插拔,正在 MCP 生态里重演

2026 年 10 月 30 日,Egnyte 发布 10 月更新:它的 MCP Server 让管理员按角色控制哪些工具、哪些用户能经 Claude、ChatGPT、Copilot 调用⁷;前一天,Island 发布企业浏览器内建 MCP server:人有的权限,智能体不一定有,"An employee can retain permissions that their agent does not receive"⁸。

如果 AI 的操作系统先出现,"设备"就不是 PCI 卡,而是一种能力:一个 MCP server 上线,就是一次热插拔。能力描述(名字+参数 schema+权限声明)就是 MODALIAS,工具注册表就是 modules.alias,智能体按需"modprobe"式加载,用完可"rmmod"式卸载——上下文窗口,就是当年稀缺的内核内存,装多了会爆。

历史正在押韵:2001 年先解决"认"(电话簿),"信"的问题(模块签名)又花了十几年;2026 年的 MCP 生态也在走同一条路——先有注册与普查,再补访问控制与人机权限分离。识别先行,授权随后,中间本隔着二十年,智能体时代想把它压缩到两年。

言外之物是:udev 时代,内核把"装什么"的策略让渡给了用户态;AI OS 时代,模型要把"装什么能力"的策略让渡给谁?Egnyte 和 Island 给了同一个答案:让渡给一层独立的治理面——判定留在原系统侧,闸装在执行环境里。能力热插拔的下一章,写的不是"怎么装",而是"谁有权决定装"。

三、今晚,亲眼看一次喊—认—装

找一台手边的 Linux 机器,三个动作。

看身份证:cat /sys/bus/pci/devices/*/modalias | head -3——每一串编码,都是一张设备的身份证。

翻电话簿:挑其中一串,跑 modprobe -R "pci:v0000xxxx…"(-R 只查不装,dry run)——看用户态的电话簿会翻出哪个模块名。

看直播:开两个终端,一个跑 sudo udevadm monitor --kernel --udev,然后插拔一次 U 盘——你会看到 KERNEL 那一行先到(内核喊),UDEV 那一行随后(用户态应),前后脚,像回声。

做 AI 工程时可以直接抄这套三段式:给智能体的每个外部工具配一份能力描述(MODALIAS 式)、配一张注册表(modules.alias 式)、加载前先 dry-run(modprobe -R 式)。喊、认、装三步拆开,治理才有地方下钩子。

热插拔三段式:内核喊一嗓子(uevent 带 MODALIAS),用户态对暗号(modprobe 查 modules.alias),再装驱动建节点。

觉 然 小 注

「应无所住而生其心。」设备来来去去,内核不住于任何一个设备,只在"有设备来"这一念上应现。udev 的智慧在于:系统不执着于"现在插着什么",只执着于"来了怎么接、走了怎么送"。凡发生必有利于我:插进来的是缘,认出来的是分,装不装得下,看电话簿里有没有它的位置。系统如此,人亦如此——不住于相,才能随时迎接新的相。

引 用 与 出 处

  1. [1] Jonathan Corbet. Recent Changes to /sbin/hotplug. LWN.net. https://lwn.net/Articles/123932/
  2. [2] Linux Hotplugging. linux-hotplug.sourceforge.net: "Starting with kernel 2.4 (in January 2001), hotplugging became a standard feature of GNU/Linux." https://linux-hotplug.sourceforge.net/?selected=scsi
  3. [3] Udev. Wikipedia: developers Greg Kroah-Hartman and Kay Sievers; initial release November 2003; successor of devfsd and hotplug; naming policy moved out of the kernel. https://en.wikipedia.org/wiki/Udev
  4. [4] The end of the devfs story. LWN.net: devfs removal merged for 2.6.13. https://lwn.net/Articles/139595/
  5. [5] 设备文件. Gentoo wiki: 内核在设备结构变化时发出 uevent,设备管理器按规则处理. https://wiki.gentoo.org/wiki/Device_file/zh-cn
  6. [6] USB Hotplug Parameters and A Simple Linux USB Hotplug Script. CNX Software, 2010: MODULE_DEVICE_TABLE 与 /sbin/hotplug helper 机制. https://www.cnx-software.com/2010/11/10/a-simple-usb-hotplug-script/?amp=1
  7. [7] Egnyte. October Release Rollup: AI Control Center, Bulk Extraction, Email Capture, and More. Egnyte 官方博客, 2026-10-30: MCP Server—tool access controls. https://www.egnyte.com/blog/post/october-release-rollup-ai-control-center-bulk-extraction-email-capture-and-more (一手)
  8. [8] ERP News. Island Introduces Browser Controls for AI Agents Accessing Enterprise Apps. 2026-10-30(转述 Island 2026-10-29 公告): "An employee can retain permissions that their agent does not receive". https://erpnews.com/island-introduces-browser-controls-for-ai-agents-accessing-enterprise-apps/ (二手转引)
  9. [9] Wiener, N. Cybernetics: Or Control and Communication in the Animal and the Machine. MIT Press, 1948.(思想化用:uevent 感知→规则匹配→装驱动执行,正是一条"感知—比较—执行"的反馈回路)

· · ·

← 返回资讯中心