使用 udev 根据正在加载的驱动程序创建字符设备

使用 udev 根据正在加载的驱动程序创建字符设备

我正在为使用 PERC 6i 集成卡的多个戴尔服务器设置 RAID 监控。我们目前正在使用 Nagios,check_megasasctl 插件似乎符合要求。但是,该插件依赖于以下项的存在:

/dev/megaraid_sas_ioctl_node

此设备节点默认不存在,您必须使用以下命令手动创建它:

mknod /dev/megaraid_sas_ioctl_node c 253 0

现在,为了使此设备节点在重新启动后仍然存在,我想我可以编写一个 udev 规则,但像往常一样,我遗漏了一些东西。我想法我可以创建一个文件,例如 /etc/udev/rules.d/10-local/rules,其中包含:

DRIVER=="megasas" NAME="megaraid_sas_ioctl_node" MODE="0600"

但这不起作用 - 重启后没有设备节点。 Dmesg 输出表明 megasas 驱动程序已加载并正常运行:

megasas: 00.00.04.01-RH1 Thu July 10 09:41:51 PST 2008
megasas: 0x1000:0x0060:0x1028:0x1f0c: bus 1:slot 0:func 0
megasas: FW now in Ready state

此外,我没有看到任何指示 udev 创建哪种类型的设备节点的方法:字符还是块。我怀疑我没有完全理解 udev 的工作原理。

我意识到我可以作弊并在 /etc/rc.local 中运行 MegaCLI,将输出重定向到 /dev/null;它会在执行过程中创建 megaraid_sas_ioctl_node 设备节点。我只是认为使用 udev 规则会 a) 更干净,并且 b) 是一种有用的学习练习。也许我应该将上面的 mknod 命令转储到 /etc/rc.local 中...

那么,如何让 udev 根据 megasas 驱动程序的存在来创建 /dev/megaraid_sas_ioctl_node 设备节点?

干杯

史蒂夫

答案1

你需要运行外部脚本真正创建设备节点。

相关内容