rh436 - 使用udev重命名usb设备(rhel5.5)


[root@localhost rules.d]# lsb_release -a
LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID:    RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Release:    5.5
Codename:    Tikanga
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.7G  2.2G  7.1G  24% /
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 501M     0  501M   0% /dev/shm
/dev/sdb1            31G  4.6G   26G  16% /media/SSK
[root@localhost ~]# udevinfo -q path -p /dev/sdb
no record for '/dev/sdb' in database
[root@localhost ~]# udevinfo -q path -n /dev/sdb
/block/sdb
[root@localhost ~]# udevinfo -a -p /block/sdb
...
  looking at parent device '/devices/pci0000:00/0000:00:11.0/0000:02:02.0/usb1/1-1':
    ID=="1-1"
    BUS=="usb"
    DRIVER=="usb"
    SYSFS{configuration}==""
    SYSFS{serial}=="AA00000000000605"
    SYSFS{product}=="USB DISK"
    SYSFS{manufacturer}=="SMI Corporation"
    SYSFS{maxchild}=="0"
    SYSFS{version}==" 2.00"
    SYSFS{devnum}=="2"
    SYSFS{speed}=="480"
    SYSFS{bMaxPacketSize0}=="64"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bDeviceProtocol}=="00"
    SYSFS{bDeviceSubClass}=="00"
    SYSFS{bDeviceClass}=="00"
    SYSFS{bcdDevice}=="1100"
    SYSFS{idProduct}=="1000"
    SYSFS{idVendor}=="090c"
    SYSFS{bMaxPower}=="500mA"
    SYSFS{bmAttributes}=="80"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bNumInterfaces}==" 1"
...

vim /etc/udev/rules.d/99-myusb.rules
US=="usb" SYSFS{serial}=="AA00000000000605" SYSFS{manufacturer}=="SMI Corporation" NAME="myusb%n" SYMLINK+="myulink%n"


[root@localhost rules.d]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.7G  2.2G  7.1G  24% /
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 501M     0  501M   0% /dev/shm
/dev/myusb1            31G  4.6G   26G  16% /media/SSK
[root@localhost rules.d]# ll /dev/my*
lrwxrwxrwx 1 root root       5 May 27 00:30 /dev/myulink -> myusb
lrwxrwxrwx 1 root root       7 May 27 00:30 /dev/myulink00 -> myusb00
lrwxrwxrwx 1 root root       7 May 27 00:30 /dev/myulink02 -> myusb02
lrwxrwxrwx 1 root root       6 May 27 00:30 /dev/myulink1 -> myusb1
lrwxrwxrwx 1 root root       7 May 27 00:30 /dev/myulink81 -> myusb81
brw-r----- 1 root disk   8, 16 May 27 00:30 /dev/myusb
crw------- 1 root root 442,  8 May 27 00:30 /dev/myusb00
crw------- 1 root root 442,  8 May 27 00:30 /dev/myusb02
brw-r----- 1 root disk   8, 17 May 27 00:30 /dev/myusb1
crw------- 1 root root 442,  8 May 27 00:30 /dev/myusb81


可以看到sdb已经被改成myusb,并创建出了myulink的链接,不过那三个字符型设备是怎么出来的暂时没搞清楚。


简单排错:
可以通过udevmonitor这个命令来看udev产生的一些事件和消息。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用udev检测USB热插拔的代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <libudev.h> int main() { struct udev *udev = udev_new(); // 创建udev实例 if (!udev) { perror("udev_new"); exit(1); } struct udev_monitor *mon = udev_monitor_new_from_netlink(udev, "udev"); // 创建监视器,监听udev事件 udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", NULL); // 监视usb设备 udev_monitor_enable_receiving(mon); // 开始接收udev事件 while (1) { fd_set fds; FD_ZERO(&fds); FD_SET(udev_monitor_get_fd(mon), &fds); // 将udev监视器的文件描述符加入到文件描述符集合中 // 等待事件的发生 if (select(udev_monitor_get_fd(mon) + 1, &fds, NULL, NULL, NULL) > 0) { if (FD_ISSET(udev_monitor_get_fd(mon), &fds)) { struct udev_device *dev = udev_monitor_receive_device(mon); // 获取udev事件对应的设备信息 if (dev) { const char *action = udev_device_get_action(dev); // 获取事件类型 const char *devnode = udev_device_get_devnode(dev); // 获取设备节点 const char *vendor = udev_device_get_property_value(dev, "ID_VENDOR_FROM_DATABASE"); // 获取设备的制造商信息 const char *product = udev_device_get_property_value(dev, "ID_MODEL_FROM_DATABASE"); // 获取设备的型号信息 printf("Action: %s\n", action); printf("Device Node Path: %s\n", devnode); printf("Vendor: %s\n", vendor); printf("Product: %s\n\n", product); udev_device_unref(dev); // 释放设备信息占用的资源 } } } } udev_monitor_unref(mon); // 释放udev监视器占用的资源 udev_unref(udev); // 释放udev实例占用的资源 return 0; } ``` 这个代码会不断地监听udev事件,当有USB设备插入或拔出时,就会打印出相应的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值