PURPOSE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… PURPOSE(9) β€” the kernel API manual, but make it make sense ✨

okay bestie, so the manual name is PURPOSE(9) and it's literally the lore drop for why the auxiliary bus even exists. buckle up πŸŽ€


✨ PURPOSE ✨

so here's the tea, fr fr: in some subsystems, the functionality of the core device (PCI/ACPI/other) is just too complex for a single device to be managed by a monolithic driver (think: Sound Open Firmware), or multiple devices might implement a common intersection of functionality (think: NICs + RDMA), or a driver may want to export an interface for another subsystem to drive (think: SIOV Physical Function export Virtual Function management). 😭

the slay move? split the functionality into child-devices that represent sub-domains of functionality β€” that way you can compartmentalize, layer, and distribute domain-specific concerns via a Linux device-driver model. periodt. πŸ‘‘


a literally iconic example of this kind of requirement is the audio subsystem, where a single IP is handling multiple entities such as HDMI, Soundwire, local devices such as mics/speakers etc. 🎧✨ The split for the core's functionality can be arbitrary or be defined by the DSP firmware topology, and it can include hooks for test/debug. This allows for the audio core device to be minimal and focused on hardware-specific control and communication. no cap, that's the whole vibe. 🫢


each auxiliary_device represents a part of its parent functionality πŸ’– The generic behavior can be extended and specialized as needed by encapsulating an auxiliary_device within other domain-specific structures and the use of .ops callbacks. Devices on the auxiliary bus do not share any structures, and the use of a communication channel with the parent is domain-specific. (iykyk 😌)

⚠️ bestie read this part twice: note that ops are intended as a way to augment instance behavior within a class of auxiliary devices β€” it is not the mechanism for exporting common infrastructure from the parent. Consider EXPORT_SYMBOL_NS to convey infrastructure from the parent module to the auxiliary module(s). πŸ’€ don't do it wrong, okay?

🌈 SEE ALSO 🌈

go read all of those, they're all main character energy πŸ‘‘πŸ“š


πŸ¦‹ and that's the whole page, bestie! this one ships out of ./drivers/base, dated October 2026, and it's PURPOSE(9) β€” catch you in the next manpage πŸ’œπŸŽ€

πŸ“¦ where this page comes from