back

by WaitWaitWha·5mo ago·view on hn ↗
Love it.

Since I am a visual learner, here is a sequence diagram that helped me follow it a bit cleaner. (yes, I used the gAI dark magic)

```

  sequenceDiagram
      participant HW as Hardware
      participant Kernel as Linux Kernel<br>(USB / driver core / kobject)
      participant NetlinkK as Netlink<br>(NETLINK_KOBJECT_UEVENT<br>group 1 = MONITOR_GROUP_KERNEL)
      participant Udevd as udevd<br>(systemd-udevd)
      participant NetlinkU as Netlink<br>(NETLINK_KOBJECT_UEVENT<br>group 2 = MONITOR_GROUP_UDEV)
      participant App as Userspace Application<br>(libudev or direct netlink listener)
      participant Sysd as systemd<br>(device units, services)
      participant DevFS as /dev<br>(device nodes + symlinks)
  
      HW->>Kernel: Physical insertion (USB plug-in)
  
      Kernel->>Kernel: Detect change via bus/driver<br>(e.g. xhci-hcd → usbcore)
  
      Kernel->>Kernel: Register new device in device model<br>(kobject_add / device_add)
  
      Kernel->>NetlinkK: kobject_uevent_env(ACTION=add, ...)<br>multicast to group 1<br>(raw uevent: null-terminated key=value strings)
  
      NetlinkK->>Udevd: Receive kernel uevent<br>(ACTION=add, SUBSYSTEM=..., DEVPATH=..., etc.)
  
      Note over Udevd: udevd parses uevent
  
      Udevd->>Udevd: Match & apply udev rules<br>(/lib/udev/rules.d/, /etc/udev/rules.d/)
  
      Udevd->>Udevd: Perform actions:<br>• Load firmware<br>• usb_modeswitch<br>• Set permissions<br>• Run programs/scripts
  
      Udevd->>Udevd: Create device node(s)<br>e.g. /dev/bus/usb/001/002
  
      Udevd->>Udevd: Create symlinks<br>e.g. /dev/ttyACM0, /dev/disk/by-id/...
  
      alt Optional: triggers systemd .device unit
          Udevd->>Sysd: Triggers / influences device unit activation
          Sysd->>Sysd: May start dependent services / scopes
      end
  
      Udevd->>Udevd: Build enhanced udev packet:<br>• libudev header ("libudev\0", magic 0xfeedcafe, ...)<br>• MurmurHash2 subsystem/devtype<br>•   64-bit tag Bloom filter<br>• Original + added properties
  
      Udevd->>NetlinkU: Broadcast processed event<br>multicast to group 2<br>(binary format with header + properties)
  
      NetlinkU->>App: Receive udev event packet<br>(via libudev_monitor or raw netlink socket)
  
      App->>App: Parse header, validate magic/credentials<br>Extract properties
  
      App->>App: React to device<br>(open /dev/..., query sysfs, etc.)
  
      Note over DevFS: Device now usable via stable names / permissions
```
1 comments
sorry for the dumb question, but what language is this? dotty? mermaid? what tool can i feed that code into ?

EDIT: chatgpt correctly identified it as mermaid.

live link: https://mermaid.live/edit#pako:eNqVVu1u6kYQfZWRf1SJLmAgJASri...

apologies. Yes it is for mermaid.live