device_register(9)
β¨ device_register(9) β¨
okay so this is the device_register page from the Kernel API Manual, and bestie it's a short one but the NOTE at the bottom is load-bearing, so don't scroll past it π
πΈ NAME πΈ
device_register β register a device with the system.
like, you have a device. the system does not know about it. we fix that. π«Ά
π SYNOPSIS π
int device_register (struct device *dev );
π¦ ARGUMENTS π¦
devβ pointer to the device structure. that's it. that's the whole arg, she's lowkey simple like that β¨
π DESCRIPTION π
This happens in two clean steps β initialize the device, then add it to the system. two steps, very demure, very mindful. π§
The two steps can be called separately, but calling device_register is the easiest and most common way to do it. fr fr, this is the main character path.
So when should you split them up into the two separate helpers? Only if you have a clearly defined need to use and refcount the device before it gets added to the hierarchy. that's the vibe check. no clear need? don't split. π
For more information, go read the kerneldoc for device_initialize and device_add β that's where the lore lives π
β οΈ NOTE Never directly freedevafter calling this function β even if it returned an error! π like genuinely never, not "never except when it fails", never never. Always useput_deviceto give up the reference that got initialized in this function instead. that's the whole move.put_device, notkfree. periodt. π
π₯ SEE ALSO π₯
Kernel file ./drivers/base/core.c, plus this entire extended fam β all (9) sections, all iconic, all listed exactly as they come π:
__fwnode_link_add(9)__fwnode_link_del(9)__fwnode_link_cycle(9)fwnode_links_purge_suppliers(9)fwnode_links_purge_consumers(9)fwnode_links_purge(9)__fwnode_links_move_consumers(9)__fw_devlink_pickup_dangling_consumers(9)fw_devlink_refresh_fwnode(9)device_is_dependent(9)device_pm_move_to_tail(9)device_link_wait_removal(9)device_link_add(9)device_link_del(9)device_link_remove(9)device_links_check_suppliers(9)__device_links_queue_sync_state(9)device_links_flush_sync_list(9)device_links_force_bind(9)device_links_driver_bound(9)__device_links_no_driver(9)device_links_no_driver(9)device_links_driver_cleanup(9)device_links_busy(9)device_links_unbind_consumers(9)device_links_purge(9)wait_for_init_devices_probe(9)fwnode_is_ancestor_of(9)fwnode_get_next_parent_dev(9)__fw_devlink_relax_cycles(9)fw_devlink_create_devlink(9)__fw_devlink_link_to_consumers(9)__fw_devlink_link_to_suppliers(9)dev_driver_string(9)device_release(9)devm_device_add_group(9)devices_kset_move_before(9)devices_kset_move_after(9)devices_kset_move_last(9)device_create_file(9)device_remove_file(9)device_remove_file_self(9)device_create_bin_file(9)device_remove_bin_file(9)device_initialize(9)kobject_has_children(9)dev_set_name(9)device_add(9)get_device(9)put_device(9)device_del(9)device_unregister(9)device_get_devnode(9)device_for_each_child(9)device_for_each_child_reverse(9)device_for_each_child_reverse_from(9)device_find_child(9)device_offline(9)device_online(9)__root_device_register(9)root_device_unregister(9)device_create(9)device_create_with_groups(9)device_destroy(9)device_rename(9)device_move(9)device_change_owner(9)device_shutdown(9)dev_err_probe(9)dev_warn_probe(9)set_primary_fwnode(9)set_secondary_fwnode(9)device_remove_of_node(9)device_add_of_node(9)device_set_of_node_from_dev(9)get_dev_from_fwnode(9)
and that's the page!! shoutout to ./drivers/base for housing all this, and to the October 2026 release for stamping it β go register some devices bestie, and remember: put_device, not free. iykyk ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms