내 생각엔 무슨 일이 일어날 것 같아?
제가 이해한 바로는 USB 장치를 컴퓨터에 연결하면 다음과 같은 일이 발생합니다.
- 커널은 USB 장치가 연결되어 있음을 인식했습니다.
- 커널은 드라이버 등과 같은 새로운 장치에 대해 매우 낮은 수준의 항목을 설정합니다.
uevent
커널은 하나를 데몬으로 보냅니다udev
.- Udev 데몬은 전송된 정보로 채워집니다
/dev
.
내가 하고 싶은 것
그냥 뛰어내릴 수도 있겠다 싶었는데3단계uevent를 udev에 수동으로 전송합니다. uevent는 netlink를 통해 전송되고netlink는 소켓 기반입니다., 이론적으로는 어느 소켓에 쓸지 알아야 하기 때문에 이것이 가능해야 합니다. 이것이 가능한지, 어떻게 작동하는지 아는 사람이 있나요?
답변1
udevadm 트리거
1. 한번 시도해 보세요
sudo udevadm trigger --verbose --action=remove --property-match='DEVNAME=/dev/sdd'
Remove uevent가 트리거되고 /dev/sdd
콘텐츠는 다음과 같습니다.
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
strace
2.잇
그가 복용하는 복용량을 확인하십시오.
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가 존재해야 합니다.
- uevent 메시지 본문을 완전히 맞춤설정할 수 없습니다.
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-in-example/