devfsadm(8) on Solnix vs Linux and the BSDs
devfsadm is the illumos command at /usr/sbin/devfsadm that maintains the /dev namespace and the path_to_inst(5) database: it loads drivers, attaches device instances and creates the /dev links. Linux udevadm and FreeBSD devfs/devctl cover only parts of this, so there is no one-to-one flag mapping.
The manual pages
- Solnix: devfsadm(8) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: udevadm(8) systemd-260.5 (different command, similar job)
- FreeBSD: devfs(8) 15.1-RELEASE (different command, similar job)
- FreeBSD: devctl(8) 15.1-RELEASE (different command, similar job)
What Solnix runs
A default Solnix system runs the illumos devfsadm at /usr/sbin/devfsadm. No other variants are shipped. The daemon form, /usr/lib/devfsadm/devfsadmd, starts at boot. The page says drvconfig, disks, tapes, ports, audlinks and devlinks are implemented as links to devfsadm.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux | model: command that builds /dev vs control tool for a daemon | devfsadm itself creates the /dev links and loads drivers, and its daemon form devfsadmd handles kernel reconfiguration events. udevadm does not populate /dev. It controls the running systemd-udevd, requests kernel events, manages the event queue and queries the udev database. Source: Solnix devfsadm(8) DESCRIPTION; Linux udevadm(8) DESCRIPTION |
| Linux | re-scanning devices | Plain devfsadm with no options tries to load every driver and attach all possible device instances, then creates the /dev links. Linux uses udevadm trigger to request kernel events and udevadm settle to wait for the queue. The trimmed bundle shows only their synopses. Source: Solnix devfsadm(8) DESCRIPTION; Linux udevadm(8) SYNOPSIS (trigger, settle) |
| Linux | querying device information | devfsadm has no query mode. Its -v only prints changes made to /dev. On Linux, udevadm info queries the udev database (--query name, symlink, path, property, all) and can export it with -e/--export-db.Source: Solnix devfsadm(8) -v, OPTIONS; Linux udevadm(8) info -q, -e |
| Linux | dry run and debugging | devfsadm -s suppresses changes to /dev and is meant to be combined with -v. -n stops it loading drivers or adding nodes to the kernel device tree. udevadm test has a separate debug mode, and its --dry-run flag appears in the flag list; the trimmed text does not describe it.Source: Solnix devfsadm(8) -s, -n; Linux udevadm(8) SYNOPSIS (test), option flag list |
| Linux | cleaning stale entries | devfsadm -C removes dangling /dev links that are not normally removed, and -c restricts this to a device class. udevadm info -c/--cleanup-db cleans the udev database, which is a different object.Source: Solnix devfsadm(8) -C, -c; Linux udevadm(8) info -c, --cleanup-db |
| FreeBSD | /dev rules vs /dev construction | FreeBSD devfs(8) does not build /dev. It sets rules (path and type conditions; group, hide, mode, user and unhide actions) on devfs(4) mounts, and rule sets are reloaded with service devfs restart. devfsadm takes no rule language. It reads an alternate devlink.tab with -t (default /etc/devlink.tab).Source: FreeBSD devfs(8) DESCRIPTION, Rule Specification; Solnix devfsadm(8) -t |
| FreeBSD | operating on another /dev tree | devfs -m mount-point works on a devfs(4) mount and defaults to /dev. devfsadm -r root_dir presumes the /dev trees are under root_dir rather than /, and the page makes no other assumption about root_dir.Source: FreeBSD devfs(8) -m; Solnix devfsadm(8) -r |
| FreeBSD | driver attach and detach | Solnix devfsadm -i driver_name configures only the devices of the named driver, and -c limits work to a device class (disk, tape, port, audio, pseudo). FreeBSD devctl acts on one named device: attach, detach, disable, enable, set driver, rescan. Per-device commands are not in the devfsadm page.Source: Solnix devfsadm(8) -i, -c; FreeBSD devctl(8) SYNOPSIS and DESCRIPTION |
| FreeBSD | /devices namespace | devfsadm no longer manages /devices, which devfs(4FS) now handles. devfsadm still creates links to nodes in /dev and /devices. The page warns that /devices might not exist or might change, and is not an API. The FreeBSD pages describe no /devices directory. Source: Solnix devfsadm(8) DESCRIPTION, NOTES; FreeBSD devfs(8) DESCRIPTION |
| all four | service management and daemon | On Solnix, svcadm(8) controls devfsadm under SMF. The service svc:/system/device/local:default starts it during reconfiguration boot. Otherwise svc:/system/sysevent:default starts it. Query status with svcs(1). FreeBSD devfs rules are loaded by the devfs rc service. Source: Solnix devfsadm(8) NOTES; FreeBSD devfs(8) DESCRIPTION |
| all four | exit status | devfsadm returns 0 on success and 1 on any error. The bundle does not give exit-status sections for the udevadm, devfs or devctl pages, so finer-grained codes cannot be assumed. Source: Solnix devfsadm(8) EXIT STATUS |
Everyday tasks
| Task | Solnix | Linux | FreeBSD |
|---|---|---|---|
| create /dev links and attach all devices | devfsadm | udevadm trigger | — |
| wait until pending device events are processed | — | udevadm settle | — |
| remove dangling /dev links | devfsadm -C | — | — |
| show what would change in /dev without changing it | devfsadm -s -v | — | — |
| query device information | — | udevadm info -q property -n /dev/sda | — |
| rescan a bus | devfsadm -i driver_name | — | devctl rescan device |
| change permissions or visibility of device nodes | — | — | devfs rule add rulespec; service devfs restart |
| reload device rules after editing | — | udevadm control --reload | service devfs restart |
Standards
- POSIX: devfsadm is not a POSIX.1-2024 utility.
- Solnix: The page states it does not constitute an API; the /devices directory might not exist or might have different contents in a future release.
Writing portable scripts
- Do not script against devfsadm, udevadm or devfs/devctl interchangeably. Branch on which tool is present, and prefer stable paths such as /dev/... over parsing tool output.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.