Intereting Posts
LD_PRELOAD эквивалент для запуска процесса? Что происходит, когда виртуальный пакет зависит / рекомендует / предлагать без реального пакета зависит / рекомендует / предлагать? Как я могу отправить символы в команду, как если бы они пришли из файла? Клиентское приглашение MySql иногда прерывается Как я могу совместно использовать принтер CUPS с гостем Windows VirtualBox? Почему мой сервер не может обслуживать более 400 одновременных соединений Можно получить доступ к / var / lib / mysql-файлам, но не к / home / username / Desktop / temp? Как исключить из «Match Group» в SSHD? Gnome 3 всегда на резерв при входе в систему Как сделать Gnome 3 для восстановления геометрии окна приложения? Как связать ключ Windows с меню GNOME в Fedora? nvidia-smi висит бесконечно: что может быть проблемой? Как печатать одинаковые строки несколько раз с переменными, измененными с помощью Sed / Awk / anything? Namservers вернулись к нормальному вскоре после подключения VPN с помощью Openconnect В сценарии Cat in expect добавлена ​​новая строка до конца строки

Могу ли я маскировать ядро ​​uevent?

То, что я думаю, происходит

Насколько я понимаю, это происходит, когда я подключаю USB-устройство к компьютеру:

  1. Ядро распознает, что я подключил USB-устройство
  2. Ядро настраивает очень низкоуровневые вещи для нового устройства, такого как драйверы и т. Д.
  3. Ядро отправляет uevent демону udev .
  4. Демон Udev использует отправленную информацию для заполнения соответствующих файлов в /dev .

Что я хочу сделать

Я думал, что, возможно, я мог бы перейти прямо к шагу 3 , вручную отправив uevent в udev. Поскольку uevent отправляется по netlink, а netlink основан на сокетах , теоретически это должно быть возможно, так как мне просто нужно знать, к какому сокету нужно писать. Любой, кто имеет представление, может ли это работать и как?

триггер udevadm

1. попробуйте

 sudo udevadm trigger --verbose --action=remove --property-match='DEVNAME=/dev/sdd' 

приведет к удалению /dev/sdd remove uevent, содержимое как

 remove@/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd SUBSYSTEM=block MAJOR=8 MINOR=48 DEVNAME=sdd DEVTYPE=disk SEQNUM=12589 

2. strace это

см., что он доза:

 sudo strace udevadm trigger --verbose --action=remove --property-match='DEVNAME=/dev/sdd' ... fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 37), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc0596a7000 write(1, "/sys/devices/pci0000:00/0000:00:"..., 101/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd ) = 101 open("/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd/uevent", O_WRONLY) = 3 write(3, "remove", 6) = 6 close(3) = 0 exit_group(0) = ? +++ exited with 0 +++ 

3. обобщить

на самом деле, это только делает

 echo 'remove' | sudo tee /sys/block/sdd/uevent 

этот путь все еще зависит от sysfs:

  • должны существовать системы sysfs
  • не может суммировать пользовательский текст сообщения UUvent

файл sysfs uevent:

 cat /sys/block/sdd/uevent MAJOR=8 MINOR=48 DEVNAME=sdd DEVTYPE=disk 

рефов:
http://fibrevillage.com/sysadmin/93-udevadm-useage-examples http://arakilab.media.eng.hokudai.ac.jp/~msylw/2013/07/using-udev-to-trigger-events- в-примере /