linux怎么固定设备名,使用固定的设备名 (通过书写Udev规则)

编程入门 行业动态 更新时间:2024-10-06 10:36:38

linux怎么固定<a href=https://www.elefans.com/category/jswz/34/1769313.html style=设备名,使用固定的设备名 (通过书写Udev规则)"/>

linux怎么固定设备名,使用固定的设备名 (通过书写Udev规则)

背景:

昨天在gnome的一个panel上加了几个disk Mounter的按钮,每个都有一个设置的界面,需要设mount的位置,

当Mouse点击时,disk mounter会调用mount程序,具体mount什么设置由/etc/fstab来决定,

/dev/hde1    /media/ms0    vfat    user,sync,noauto,uni_xlate   0 0/dev/hdg1    /media/cf0    vfat    user,sync,noauto,uni_xlate   0 0

当MS插入系统时,系统发现他是一个BLOCK设备,于是就在/hde开始找第一个空闲的盘符,同样CF插入的情况也类似,

这里有一个问题,当CF先插入时,系统会把/dev/hde1分配给它。此时对应的关系就发生了混乱。

为了解决这个问题可以使用2.6kernel的UDEV规则。

udev规则简介

关于这个规则,有一篇很经典的英文说明

udev是一种Linux2.6内核采用的/dev 目录的管理系统,它通过从sysfs获得的信息,可以提供对特定设备的固定的设备名。

sysfs是 2.6内核的一种新型文件系统,它提供了当前设备的基本信息。

udev的一个重要目的就是提供固定的设备名,像我们刚才碰到的情况,如果ms插入系统,系统能使用固定的设备名

(例如/dev/ms) CF卡插入系统,使用/dev/cf,就可以很方便的解决我们需要到的困难。

/etc/udev/rules.d/ 下面的文件根据字母的顺序来解析,一般udev当找到满足它条件的说明项后就会终于解析过程,

因为为了使用我们的配置优先于系统的默认值,选择文件名时一定要注意,例如,我们选择 /etc/udev/rule.d/10-local.rules

BUS="usb", SYSFS{serial}="HXOLL0012202323480", NAME="lp_epson", SYMLINK="printers/epson_stylus"

上面是一个USB打印机的印子。当一台USB打印机序列号是HXOLL0012202323480,就会创建一个device名 /dev/lpepson,

同时创建一个symbol link /dev/printers/epson_styles

注意:在任何规则修改后,为了让它生效:需要执行udevstart

规则书写格式

最方便的查找方法是 man udev 或在线文档

常用的有

* BUS - 匹配总路类型,比如PCI USB等   * KERNEL - 匹配Kernel设备名,比如hda hdb.   * DRIVER - 匹配Kernel的驱动程序名   * SUBSYSTEM - 匹配子系统名。   * ID - 匹配总路系统的ID (e.g. PCI bus ID)。   * PLACE - 匹配物理位置  (对USB很有用)。   * SYSFS{filename} - 匹配从sysfs得到的信息,比如label, vendor, USB serial number,                        SCSI UUID or file system label.    * PROGRAM - 调用外部程序。    * RESULT - 匹配最后一次调用外部程序所得到的返回字符串   * NAME  - 需要创建的设备或   * SYMLINK  -需要创建的符号链接名    * OWNER, GROUP, MODE   设置设备的所有者,组,及模式

匹配符号:

%n  内核设备号 例如 sda3  的3  %k  内核设备名   %M  设备的major号   %m  设备的minor号   %b  bus id  %c  %s{filename} sysfs属性的内容   %% 引用%时使用  * 可以匹配任意个字符  ?  可以匹配一个字符  [ ] 从中选一个字符sample:

# if /sbin/scsi_id returns "OEM 0815" device will be called disk1BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="OEM 0815", NAME="disk1"# USB printer to be called lp_colorBUS="usb", SYSFS{serial}="W09090207101241330", NAME="lp_color"# SCSI disk with a specific vendor and model number will be called bootBUS="scsi", SYSFS{vendor}="IBM", SYSFS{model}="ST336", NAME="boot%n"# sound card with PCI bus id 00:0b.0 to be called dspBUS="pci", ID="00:0b.0", NAME="dsp"# USB mouse at third port of the second hub to be called mouse1BUS="usb", PLACE="2.3", NAME="mouse1"# ttyUSB1 should always be called pda with two additional symlinksKERNEL="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"# multiple USB webcams with symlinks to be called webcam0, webcam1, ……BUS="usb", SYSFS{model}="XV3", NAME="video%n", SYMLINK="webcam%n"

查看sysfs的信息

这里使用udevinfo的指令, man udevinfo 在线文档 基本用法

-a  SYSFS{filename} attributes along the device chain. -p sysfs_path  Specify the sysfs path of the device to query. -q query_type  Query the database for specified value of a created device node or network interface.    valid type: name, symlink, mode ,owner , group , path or all.  -n name Specify the name of the node, the symlink or the network interface for the device to queue sample:

udevinfo -a -p /sys/path/to/hardware/info udevinfo -a -p /sys/block/sda udevinfo -q path -n /dev/sda 联起来用: # udevinfo -a -p $(udevinfo -q path -n /dev/sda)

测试方法

# udevtest /sys/class/sound/dsp/version 056looking at '/class/sound/dsp/'opened class_dev->name='dsp'configured rule in '/etc/udev/rules.d/50-udev.rules[132]' applied, added symlink '%k'configured rule in '/etc/udev/rules.d/50-udev.rules[132]' applied, 'dsp' becomes 'sound/%k'creating device node '/dev/sound/dsp', major = '14', minor = '3', mode = '0660', uid = '0', gid = '18'

实际的例子

010_local.rules

#Clie th55#syncBUS="usb", SYSFS{product}="Palm Handheld", KERNEL="ttyUSB*", SYMLINK="pilot%n"#exportBus="usb", SYSFS{product}="Sony PEG Mass Storage", KERNEL="sd*",SYMLINK="cliems"#usb HDDBUS="usb", SYSFS{product}="USB TO IDE", KERNEL="sd*", SYMLINK="usbhdd%n"#cf1 used for 5in1 card readerBUS="ide", ID="2.0", KERNEL="hd*", SYMLINK="ms"]

【责编:Amy】

--------------------next---------------------

更多推荐

linux怎么固定设备名,使用固定的设备名 (通过书写Udev规则)

本文发布于:2024-03-14 09:53:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736213.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:设备   规则   linux   Udev

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!