• udev匹配两张网卡


    目录

    一、问题描述

    二、问题处理

    udevadm info -a -p /sys/class/net/FE0

    udevadm info -a -p /sys/class/net/FE1


    一、问题描述

            本人使用两张以太网卡,分别为emac、gmac,insmod加载两张网卡驱动后,一张为FE0,一张为eth0,与我的初衷需要生成的FE0、FE1不符合,出现问题的udev配置文件如下

    1. SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="FE0"
    2. SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="FE1"

    通过udevadm monitor命令监控发现,其实以上两条规则匹配的内容是一致的,导致无法生产FE0、FE1,所以需要增加一条匹配键来区分这两个网卡设备。

    二、问题处理

    首先我们需要找到这两个设备的差异项,通过udevadm info命令

    udevadm info -a -p /sys/class/net/FE0

    1. clou@SMIOS:/etc/udev/rules.d# udevadm info -a -p /sys/class/net/FE0
    2. Udevadm info starts with the device specified by the devpath and then
    3. walks up the chain of parent devices. It prints for every device
    4. found, all possible attributes in the udev rules key format.
    5. A rule to match, can be composed by the attributes of the device
    6. and the attributes from one single parent device.
    7. looking at device '/devices/soc/emac0/net/FE0':
    8. KERNEL=="FE0"
    9. SUBSYSTEM=="net"
    10. DRIVER==""
    11. ATTR{addr_assign_type}=="3"
    12. ATTR{addr_len}=="6"
    13. ATTR{address}=="7a:56:90:5b:2f:4f"
    14. ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
    15. ATTR{carrier}=="1"
    16. ATTR{dev_id}=="0x0"
    17. ATTR{dormant}=="0"
    18. ATTR{duplex}=="full"
    19. ATTR{flags}=="0x1003"
    20. ATTR{ifalias}==""
    21. ATTR{ifindex}=="19"
    22. ATTR{iflink}=="19"
    23. ATTR{link_mode}=="0"
    24. ATTR{mtu}=="1500"
    25. ATTR{netdev_group}=="0"
    26. ATTR{operstate}=="up"
    27. ATTR{power/async}=="disabled"
    28. ATTR{power/control}=="auto"
    29. ATTR{power/runtime_active_kids}=="0"
    30. ATTR{power/runtime_active_time}=="0"
    31. ATTR{power/runtime_enabled}=="disabled"
    32. ATTR{power/runtime_status}=="unsupported"
    33. ATTR{power/runtime_suspended_time}=="0"
    34. ATTR{power/runtime_usage}=="0"
    35. ATTR{queues/rx-0/rps_cpus}=="0"
    36. ATTR{queues/rx-0/rps_flow_cnt}=="0"
    37. ATTR{queues/tx-0/byte_queue_limits/hold_time}=="1000"
    38. ATTR{queues/tx-0/byte_queue_limits/inflight}=="0"
    39. ATTR{queues/tx-0/byte_queue_limits/limit}=="0"
    40. ATTR{queues/tx-0/byte_queue_limits/limit_max}=="1879048192"
    41. ATTR{queues/tx-0/byte_queue_limits/limit_min}=="0"
    42. ATTR{queues/tx-0/tx_timeout}=="0"
    43. ATTR{queues/tx-0/xps_cpus}=="0"
    44. ATTR{speed}=="100"
    45. ATTR{statistics/collisions}=="0"
    46. ATTR{statistics/multicast}=="0"
    47. ATTR{statistics/rx_bytes}=="217282"
    48. ATTR{statistics/rx_compressed}=="0"
    49. ATTR{statistics/rx_crc_errors}=="0"
    50. ATTR{statistics/rx_dropped}=="7"
    51. ATTR{statistics/rx_errors}=="0"
    52. ATTR{statistics/rx_fifo_errors}=="0"
    53. ATTR{statistics/rx_frame_errors}=="0"
    54. ATTR{statistics/rx_length_errors}=="0"
    55. ATTR{statistics/rx_missed_errors}=="0"
    56. ATTR{statistics/rx_over_errors}=="0"
    57. ATTR{statistics/rx_packets}=="1981"
    58. ATTR{statistics/tx_aborted_errors}=="0"
    59. ATTR{statistics/tx_bytes}=="46857"
    60. ATTR{statistics/tx_carrier_errors}=="0"
    61. ATTR{statistics/tx_compressed}=="0"
    62. ATTR{statistics/tx_dropped}=="0"
    63. ATTR{statistics/tx_errors}=="0"
    64. ATTR{statistics/tx_fifo_errors}=="0"
    65. ATTR{statistics/tx_heartbeat_errors}=="0"
    66. ATTR{statistics/tx_packets}=="328"
    67. ATTR{statistics/tx_window_errors}=="0"
    68. ATTR{tx_queue_len}=="1000"
    69. ATTR{type}=="1"
    70. looking at parent device '/devices/soc/emac0':
    71. KERNELS=="emac0"
    72. SUBSYSTEMS=="platform"
    73. DRIVERS=="sun4i-emac"
    74. ATTRS{power/async}=="disabled"
    75. ATTRS{power/control}=="auto"
    76. ATTRS{power/runtime_active_kids}=="0"
    77. ATTRS{power/runtime_active_time}=="0"
    78. ATTRS{power/runtime_enabled}=="disabled"
    79. ATTRS{power/runtime_status}=="unsupported"
    80. ATTRS{power/runtime_suspended_time}=="0"
    81. ATTRS{power/runtime_usage}=="0"
    82. looking at parent device '/devices/soc':
    83. KERNELS=="soc"
    84. SUBSYSTEMS=="platform"
    85. DRIVERS==""
    86. ATTRS{power/async}=="disabled"
    87. ATTRS{power/control}=="auto"
    88. ATTRS{power/runtime_active_kids}=="0"
    89. ATTRS{power/runtime_active_time}=="0"
    90. ATTRS{power/runtime_enabled}=="disabled"
    91. ATTRS{power/runtime_status}=="unsupported"
    92. ATTRS{power/runtime_suspended_time}=="0"
    93. ATTRS{power/runtime_usage}=="0"

    注意其中的匹配键:KERNELS=="emac0"

    udevadm info -a -p /sys/class/net/FE1

    1. Udevadm info starts with the device specified by the devpath and then
    2. walks up the chain of parent devices. It prints for every device
    3. found, all possible attributes in the udev rules key format.
    4. A rule to match, can be composed by the attributes of the device
    5. and the attributes from one single parent device.
    6. looking at device '/devices/soc/gmac0/net/FE1':
    7. KERNEL=="FE1"
    8. SUBSYSTEM=="net"
    9. DRIVER==""
    10. ATTR{addr_assign_type}=="0"
    11. ATTR{addr_len}=="6"
    12. ATTR{address}=="36:c9:e3:f1:b8:05"
    13. ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
    14. ATTR{dev_id}=="0x0"
    15. ATTR{flags}=="0x1002"
    16. ATTR{ifalias}==""
    17. ATTR{ifindex}=="32"
    18. ATTR{iflink}=="32"
    19. ATTR{link_mode}=="0"
    20. ATTR{mtu}=="1500"
    21. ATTR{netdev_group}=="0"
    22. ATTR{operstate}=="down"
    23. ATTR{power/async}=="disabled"
    24. ATTR{power/control}=="auto"
    25. ATTR{power/runtime_active_kids}=="0"
    26. ATTR{power/runtime_active_time}=="0"
    27. ATTR{power/runtime_enabled}=="disabled"
    28. ATTR{power/runtime_status}=="unsupported"
    29. ATTR{power/runtime_suspended_time}=="0"
    30. ATTR{power/runtime_usage}=="0"
    31. ATTR{queues/rx-0/rps_cpus}=="0"
    32. ATTR{queues/rx-0/rps_flow_cnt}=="0"
    33. ATTR{queues/tx-0/byte_queue_limits/hold_time}=="1000"
    34. ATTR{queues/tx-0/byte_queue_limits/inflight}=="0"
    35. ATTR{queues/tx-0/byte_queue_limits/limit}=="0"
    36. ATTR{queues/tx-0/byte_queue_limits/limit_max}=="1879048192"
    37. ATTR{queues/tx-0/byte_queue_limits/limit_min}=="0"
    38. ATTR{queues/tx-0/tx_timeout}=="0"
    39. ATTR{queues/tx-0/xps_cpus}=="0"
    40. ATTR{statistics/collisions}=="0"
    41. ATTR{statistics/multicast}=="0"
    42. ATTR{statistics/rx_bytes}=="0"
    43. ATTR{statistics/rx_compressed}=="0"
    44. ATTR{statistics/rx_crc_errors}=="0"
    45. ATTR{statistics/rx_dropped}=="0"
    46. ATTR{statistics/rx_errors}=="0"
    47. ATTR{statistics/rx_fifo_errors}=="0"
    48. ATTR{statistics/rx_frame_errors}=="0"
    49. ATTR{statistics/rx_length_errors}=="0"
    50. ATTR{statistics/rx_missed_errors}=="0"
    51. ATTR{statistics/rx_over_errors}=="0"
    52. ATTR{statistics/rx_packets}=="0"
    53. ATTR{statistics/tx_aborted_errors}=="0"
    54. ATTR{statistics/tx_bytes}=="0"
    55. ATTR{statistics/tx_carrier_errors}=="0"
    56. ATTR{statistics/tx_compressed}=="0"
    57. ATTR{statistics/tx_dropped}=="0"
    58. ATTR{statistics/tx_errors}=="0"
    59. ATTR{statistics/tx_fifo_errors}=="0"
    60. ATTR{statistics/tx_heartbeat_errors}=="0"
    61. ATTR{statistics/tx_packets}=="0"
    62. ATTR{statistics/tx_window_errors}=="0"
    63. ATTR{tx_queue_len}=="1000"
    64. ATTR{type}=="1"
    65. looking at parent device '/devices/soc/gmac0':
    66. KERNELS=="gmac0"
    67. SUBSYSTEMS=="platform"
    68. DRIVERS=="sunxi-gmac"
    69. ATTRS{power/async}=="enabled"
    70. ATTRS{power/control}=="auto"
    71. ATTRS{power/runtime_active_kids}=="0"
    72. ATTRS{power/runtime_active_time}=="0"
    73. ATTRS{power/runtime_enabled}=="disabled"
    74. ATTRS{power/runtime_status}=="unsupported"
    75. ATTRS{power/runtime_suspended_time}=="0"
    76. ATTRS{power/runtime_usage}=="0"
    77. looking at parent device '/devices/soc':
    78. KERNELS=="soc"
    79. SUBSYSTEMS=="platform"
    80. DRIVERS==""
    81. ATTRS{power/async}=="disabled"
    82. ATTRS{power/control}=="auto"
    83. ATTRS{power/runtime_active_kids}=="0"
    84. ATTRS{power/runtime_active_time}=="0"
    85. ATTRS{power/runtime_enabled}=="disabled"
    86. ATTRS{power/runtime_status}=="unsupported"
    87. ATTRS{power/runtime_suspended_time}=="0"
    88. ATTRS{power/runtime_usage}=="0"

    注意其中的匹配键:KERNELS=="gmac0"

    所以,分别把以上两条键值添加到规则表中

    1. KERNELS=="emac0", SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="FE0"
    2. KERNELS=="gmac0", SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="FE1"

    常用匹配键:
        * KERNEL     - 匹配设备在内核中的命名
        * SUBSYSTEM  - 匹配设备(在sysfs中)的subsystem名
        * DRIVER     - 匹配设备对应的驱动名
        * ATTR       - 匹配设备在sysfs中属性
        * KERNELS    - 匹配设备及其父亲在内核中的命名
        * SUBSYSTEMS - 匹配设备及其父亲(在sysfs中)的subsystem名
        * DRIVERS    - 匹配设备及其父亲对应的驱动名
        * ATTRS      - 匹配设备及其父亲在sysfs中属性
          注:父亲表示直到最上层的所有祖先

    至此,两张相同的网卡emac、gmac同时加载,通过udev规则实现了匹配。

     

    三、其它

    /usr/lib/udev/rules.d/70-persistent-net.rules 和 /etc/udev/udev.d/70-persistent-net.rules的区别,前者为系统,后者为用户添加规则,用户添加的规则比系统的优先级要高。

  • 相关阅读:
    SRM供应商关系管理是什么?SRM供应商关系管理系统包含哪方面的内容?
    办公技能——如何写好会议纪要,提升职业素养
    Pinctrl子系统_03_Pinctrl子系统使用示例
    java面试题
    神经网络:基本概念、模型与技术
    Android 性能分析 之 插桩日志
    CAS:474922-22-0,DSPE-PEG-MAL,磷脂-聚乙二醇-马来酰亚胺科研试剂供应
    程序员视角下的AIGC技术:现状、挑战与未来展望
    分布式任务调度Schedulerx2.0工作原理
    猿辅导联合多方专家共议新课标:语文将更强调“实践性”
  • 原文地址:https://blog.csdn.net/chenliang0224/article/details/127590326