wap网站前景,wordpress 閱讀 主题,网站域名类型,网易企业邮箱账号udev 规则文件1. 基本概念udev#xff1a;Linux 的设备管理器#xff0c;负责在 /dev 目录下动态创建设备节点规则文件#xff1a;以 .rules 结尾#xff0c;位于 /etc/udev/rules.d/ 目录文件名格式#xff1a;数字-名称.rules#xff0c;数字决定执行顺序#xff08;越…udev 规则文件1.基本概念udevLinux 的设备管理器负责在/dev目录下动态创建设备节点规则文件以.rules结尾位于/etc/udev/rules.d/目录文件名格式数字-名称.rules数字决定执行顺序越小越先执行2.常见用途插入 USB 设备时自动挂载检测到特定网卡时自动配置加载特定驱动或运行脚本修改设备权限如允许普通用户访问串口WiFi 热点规则的示例示例 1检测到特定网卡时启动热点bash# /etc/udev/rules.d/90-wifi-hotspot.rules ACTIONadd, SUBSYSTEMnet, KERNELwlan0, RUN/usr/bin/systemctl start hostapd示例 2更复杂的规则bash# 当 wlan0 网卡被添加且驱动为特定型号时启动服务 ACTIONadd, SUBSYSTEMnet, KERNELwlan0, DRIVERSrtl8192cu, \ RUN/bin/sh -c /usr/bin/systemctl start hostapd /usr/bin/systemctl start dnsmasq # 当设备移除时停止服务 ACTIONremove, SUBSYSTEMnet, KERNELwlan0, \ RUN/bin/sh -c /usr/bin/systemctl stop hostapd /usr/bin/systemctl stop dnsmasq示例 3完整的 WiFi 热点自动配置bash# /etc/udev/rules.d/90-wifi-hotspot.rules # 当检测到 wlan0 网卡可用时 ACTIONadd, SUBSYSTEMnet, KERNELwlan0, \ TAGsystemd, ENV{SYSTEMD_WANTS}wifi-hotspot.service # 对应的 systemd 服务文件 # /etc/systemd/system/wifi-hotspot.service [Unit] DescriptionStart WiFi Hotspot Afternetwork.target Requiresnetwork.target [Service] Typeoneshot ExecStart/usr/local/bin/setup-wifi-hotspot.sh RemainAfterExityes [Install] WantedBymulti-user.target规则语法解析bash# 基本格式 键值, 键值, ... RUN命令 # 常用键 # ACTION - add添加、remove移除 # SUBSYSTEM - net网络、tty串口、usbUSB # KERNEL - 设备内核名称如 wlan0, eth0 # ATTR{属性} - 设备属性如地址、厂商ID # ENV{变量} - 环境变量调试和测试 udev 规则1.重新加载 udev 规则bash# 重新加载规则不重启 sudo udevadm control --reload-rules sudo udevadm trigger # 或重启 udev 服务 sudo systemctl restart systemd-udevd2.查看设备信息bash# 查看 wlan0 的详细信息 udevadm info -a -p /sys/class/net/wlan0 # 查看 USB WiFi 适配器信息 udevadm info -a -p $(udevadm info -q path -n /sys/class/net/wlan0)3.测试规则不实际执行bash# 模拟添加 wlan0 设备 sudo udevadm test /sys/class/net/wlan0 # 查看规则匹配情况 sudo udevadm test-builtin net_setup_link /sys/class/net/wlan04.监控 udev 事件bash# 实时查看设备事件 sudo udevadm monitor --kernel --property --subsystem-matchnet # 插入 WiFi 适配器时查看输出 sudo udevadm monitor --kernel --property常见问题排查问题 1规则不执行bash# 1. 检查规则文件权限 ls -l /etc/udev/rules.d/90-wifi-hotspot.rules # 2. 检查语法错误 udevadm test /sys/class/net/wlan0 21 | grep -A5 -B5 error # 3. 查看系统日志 journalctl -u systemd-udevd -f问题 2脚本执行失败bash# 1. 确保脚本有执行权限 chmod x /usr/local/bin/setup-wifi-hotspot.sh # 2. 测试脚本手动运行 sudo /usr/local/bin/setup-wifi-hotspot.sh # 3. 检查脚本环境udev 运行环境有限 # 在脚本开头添加日志 echo $(date): Script started /tmp/udev-debug.log实际应用场景1.设备权限管理修改设备文件权限bash# /etc/udev/rules.d/10-my-devices.rules # USB设备读写权限 SUBSYSTEMusb, ATTR{idVendor}1234, ATTR{idProduct}5678, MODE0666 # 串口权限 SUBSYSTEMtty, ATTRS{idVendor}0403, ATTRS{idProduct}6001, MODE0666, GROUPdialout # GPIO设备权限 SUBSYSTEMgpio*, PROGRAM/bin/sh -c chown -R root:gpio /sys/class/gpio chmod -R 770 /sys/class/gpio为特定用户授权bash# 允许用户developer访问所有USB设备 SUBSYSTEMusb, ENV{DEVTYPE}usb_device, OWNERdeveloper # 视频设备权限 SUBSYSTEMvideo4linux, GROUPvideo, MODE06602.设备重命名和符号链接创建持久化的设备名称bash# /etc/udev/rules.d/20-persistent-usb.rules # 根据序列号重命名USB设备 SUBSYSTEMtty, ATTRS{serial}A1234567, SYMLINKttyMyDevice # 根据位置重命名USB端口 SUBSYSTEMtty, ATTRS{idVendor}0403, ATTRS{idProduct}6001, ATTRS{devpath}1.1, SYMLINKttyUSB_Printer # 多规则组合 SUBSYSTEMblock, ATTRS{model}My SSD*, SYMLINKdisk/ssd%n SUBSYSTEMblock, KERNELsd[a-z], ATTRS{removable}1, SYMLINKusbdisk%n网络接口重命名bash# /etc/udev/rules.d/70-persistent-net.rules # 根据MAC地址重命名网络接口 SUBSYSTEMnet, ACTIONadd, ATTR{address}00:11:22:33:44:55, NAMElan0 SUBSYSTEMnet, ACTIONadd, ATTR{address}aa:bb:cc:dd:ee:ff, NAMEwlan03.自动挂载和卸载USB存储设备自动挂载bash# /etc/udev/rules.d/11-usb-auto-mount.rules # USB插入时自动挂载 ACTIONadd, SUBSYSTEMblock, KERNELsd[b-z][0-9], RUN/usr/bin/mount -t auto /dev/%k /media/usb-%k # USB拔出时自动卸载 ACTIONremove, SUBSYSTEMblock, KERNELsd[b-z][0-9], RUN/usr/bin/umount -l /media/usb-%k # 更安全的版本检查文件系统类型 ACTIONadd, SUBSYSTEMblock, KERNELsd[a-z][0-9], ENV{ID_FS_TYPE}vfat|ntfs|ext4, RUN/usr/bin/systemd-mount /dev/%k特定设备的特殊挂载点bash# 根据供应商/产品ID挂载到特定目录 SUBSYSTEMblock, ATTRS{idVendor}abcd, ATTRS{idProduct}1234, ENV{ID_FS_UUID}A1B2C3D4, RUN/bin/mkdir -p /media/backup /bin/mount /dev/%k /media/backup4.设备加载特定驱动强制使用特定驱动bash# /etc/udev/rules.d/50-driver-override.rules # WiFi网卡强制使用特定驱动 SUBSYSTEMnet, ACTIONadd, ATTRS{idVendor}0bda, ATTRS{idProduct}8179, RUN/sbin/modprobe -b rtl8192cu # USB转串口设备 SUBSYSTEMusb, ATTRS{idVendor}0403, ATTRS{idProduct}6001, RUN/sbin/modprobe ftdi_sio # 摄像头设备 SUBSYSTEMvideo4linux, ATTRS{idVendor}046d, ATTRS{idProduct}0825, RUN/sbin/modprobe uvcvideo阻止自动加载驱动bash# 阻止特定设备加载驱动 SUBSYSTEMusb, ATTRS{idVendor}1234, ATTRS{idProduct}5678, ATTR{authorized}05.环境变量设置为设备设置环境变量bash# /etc/udev/rules.d/90-env-vars.rules # 设置设备特定的环境变量 SUBSYSTEMusb, ATTRS{idVendor}abcd, ENV{MY_USB_DEVICE}1 SUBSYSTEMtty, KERNELttyUSB0, ENV{SERIAL_PORT}/dev/ttyUSB0 # 在应用中可以使用这些变量 ACTIONadd, SUBSYSTEMusb, ENV{ID_VENDOR_ID}1234, ENV{MYAPP_DEVICE_ADDED}16.设备状态监控和通知设备事件通知bash# /etc/udev/rules.d/99-notify.rules # USB设备插入时发送通知 ACTIONadd, SUBSYSTEMusb, RUN/usr/bin/wall USB device inserted # 发送桌面通知 ACTIONadd, SUBSYSTEMusb, ENV{DISPLAY}:0, ENV{XAUTHORITY}/home/user/.Xauthority, RUN/usr/bin/notify-send USB Device New device connected # 播放声音 ACTIONadd, SUBSYSTEMusb, RUN/usr/bin/aplay /usr/share/sounds/usb-insert.wav7.Zynq 平台专用规则PL可编程逻辑设备管理bash# /etc/udev/rules.d/99-zynq.rules # FPGA bitstream 加载后的设备处理 SUBSYSTEMuio, ACTIONadd, KERNELuio[0-9]*, MODE0666 # AXI GPIO 设备权限 SUBSYSTEMgpio, KERNELgpiochip*, PROGRAM/bin/sh -c echo 0 /sys/class/gpio/export chmod 666 /sys/class/gpio/gpio0/value # DMA 设备配置 SUBSYSTEMdma, KERNELxdma[0-9]*, MODE0666, GROUPvideo共享内存设备bash# 为共享内存设备设置权限 SUBSYSTEMmisc, KERNELu-dma-buf, MODE06668.高级匹配规则使用 PROGRAM 测试bash# 执行外部程序并基于输出做决策 SUBSYSTEMusb, PROGRAM/usr/bin/test_usb_type %p, RESULTstorage, SYMLINKusbstorage # 检查设备属性并设置标签 SUBSYSTEMblock, PROGRAM/usr/bin/blkid -o value -s LABEL %N, RESULT!, SYMLINKdisk/by-label-%c属性继承和父设备匹配bash# 匹配父设备的属性 SUBSYSTEMtty, ATTRS{idVendor}0403, ATTRS{idProduct}6001, GOTOftdi_rules # 使用 KERNELS向上匹配 KERNELS1-1.2, SUBSYSTEMtty, SYMLINKttyUSB_HubPort2 # 设备路径匹配 DEVPATH/devices/pci0000:00/0000:00:14.0/usb1/1-1, ACTIONadd, RUN/bin/echo Device at root hub port 1 /tmp/udev.log9.系统配置调整电源管理设置bash# /etc/udev/rules.d/80-power.rules # 禁用USB自动挂起 SUBSYSTEMusb, ATTR{power/control}on ACTIONadd, SUBSYSTEMusb, TESTpower/control, ATTR{power/control}auto # 设置USB自动挂起超时 SUBSYSTEMusb, ATTR{power/autosuspend_delay_ms}2000性能优化bash# 设置磁盘调度器 SUBSYSTEMblock, KERNELsd[a-z], ACTIONadd, RUN/bin/echo deadline /sys/block/%k/queue/scheduler # SSD优化 SUBSYSTEMblock, ATTRS{removable}0, ATTRS{queue/rotational}0, RUN/bin/echo 0 /sys/block/%k/queue/rotational10.安全和限制规则设备访问限制bash# 只允许特定设备 SUBSYSTEMusb, ENV{ID_VENDOR_ID}!1234, ENV{ID_MODEL_ID}!5678, ATTR{authorized}0 # 限制特定USB设备 SUBSYSTEMusb, ATTRS{idVendor}abcd, ATTRS{idProduct}1234, ATTR{authorized}0审计和日志bash# 记录所有USB设备连接 SUBSYSTEMusb, ACTIONadd, RUN/bin/logger -t udev USB device added: %E{ID_VENDOR} %E{ID_MODEL} # 记录设备移除 SUBSYSTEMusb, ACTIONremove, RUN/bin/logger -t udev USB device removed11.实用工具集成自动备份bash# USB存储插入时自动备份 ACTIONadd, SUBSYSTEMblock, KERNELsd[b-z][0-9], ENV{ID_FS_TYPE}ext4|vfat, RUN/usr/local/bin/auto_backup.sh %k # auto_backup.sh 内容 #!/bin/bash DEVICE$1 MOUNT_POINT/media/backup_$(date %Y%m%d_%H%M%S) mkdir -p $MOUNT_POINT mount /dev/$DEVICE $MOUNT_POINT rsync -av /home/important_data/ $MOUNT_POINT/backup/ umount $MOUNT_POINT设备初始化bash# 设备首次使用时初始化 ACTIONadd, SUBSYSTEMblock, KERNELsd[b-z], PROGRAM/usr/bin/test -f /var/lib/first_use_%k, RESULT1, RUN/usr/local/bin/initialize_device.sh %k12.调试和测试规则调试规则bash# 临时添加调试规则 SUBSYSTEMusb, ACTIONadd, RUN/bin/sh -c echo UDEV: %k added at $(date) /tmp/udev_debug.log SUBSYSTEMusb, ACTIONremove, RUN/bin/sh -c echo UDEV: %k removed at $(date) /tmp/udev_debug.log # 记录完整设备信息 ACTIONadd|remove, RUN/bin/sh -c udevadm info -a -p %p /tmp/udev_full_info.log13.实用脚本模板udev 规则生成脚本bash#!/bin/bash # generate-udev-rules.sh VENDOR_ID$1 PRODUCT_ID$2 DEVICE_NAME$3 cat /etc/udev/rules.d/99-${DEVICE_NAME}.rules EOF # Rules for ${DEVICE_NAME} SUBSYSTEMtty, ATTRS{idVendor}${VENDOR_ID}, ATTRS{idProduct}${PRODUCT_ID}, SYMLINKtty${DEVICE_NAME} SUBSYSTEMtty, ATTRS{idVendor}${VENDOR_ID}, ATTRS{idProduct}${PRODUCT_ID}, MODE0666 SUBSYSTEMusb, ATTRS{idVendor}${VENDOR_ID}, ATTRS{idProduct}${PRODUCT_ID}, ENV{ID_MM_DEVICE_IGNORE}1 EOF echo Rules created for ${DEVICE_NAME}14.规则调试命令bash# 查看设备信息 udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) # 测试规则匹配 udevadm test $(udevadm info -q path -n /dev/ttyUSB0) # 监控udev事件 udevadm monitor --property --subsystem-matchusb # 触发设备事件 udevadm trigger -v --typesubsystems --subsystem-matchusb15.最佳实践建议规则命名使用数字前缀控制顺序01-50-99-注释说明每条规则添加注释测试规则先用udevadm test测试避免冲突检查现有规则避免重复日志记录复杂规则添加日志输出错误处理脚本中要有错误检查