device_create(9)
π device_create(9) β Kernel API Manual, but make it make sense π
okay bestie, welcome to device_create(9) from the Kernel API Manual π this is the one that makes a device exist in sysfs. main character energy fr.
β¨ NAME β¨
device_create β creates a device and registers it with sysfs π¦
πΈ SYNOPSIS πΈ
struct device * device_create (const struct class *class , struct device
*parent , dev_t devt , void *drvdata , const char *fmt , ... );
like, look at her go π
π ARGUMENTS π
classβ pointer to thestruct classthat this device should be registered to β¨parentβ pointer to the parentstruct deviceof this new device, if any π«Άdevtβ thedev_tfor the char device to be added π«drvdataβ the data to be added to the device for callbacks πfmtβ string for the device's name π...β variable arguments π
π DESCRIPTION π
so here's the vibe: this function can be used by char device classes. a struct device will be created in sysfs, registered to the specified class. iconic behaviour, no cap β¨
a "dev" file will be created, showing the dev_t for the device, if the dev_t is not 0,0. like, zero-zero? no file for you π
if a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs β literal family tree π§
the pointer to the struct device will be returned from the call, and any further sysfs files that might be required can be created using this pointer. so keep her safe π
Returns struct device pointer on success, or ERR_PTR on error π so please, please check her before you dereference her.
ngl the ERR_PTR bit is the part everyone forgets and then spends three hours debugging. don't be that girl π
π¦ SEE ALSO π¦
literally the whole neighborhood, bestie β kernel file ./drivers/base/core.c and all of these:
__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)device_register(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_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)
okay that's the whole page, go forth and register your devices responsibly π«Άβ¨
and finally, the cute little sign-off: this icon lives in ./drivers/base, dated October 2026, and she's filed under device_create(9) π bye bestie, slay your sysfs πΈ
π¦ 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