linux设备驱动模型之/sys/目录注册

目录

/* /sys/devices/ */

/* /sys/dev/ */

/* /sys/dev/block 父节点:/sys/dev/*/

/* /sys/dev/block 父节点:/sys/dev/*/

/*bus初始化*//* /sys/bus/ */

/* /sys/devices/system 父节点:/sys/devices/ */

/* /sys/class/ */

/* /sys/firmware/ */

/* /sys/hypervisor/ */

/* /sys/firmware/devicetree 父节点:/sys/firmware/*/

/* /sys/devices/platform 父节点:/sys/devices/ */

/* /sys/kernel/ kernel/ksysfs.c */

/* /sys/block/ kernel/block/genhd.c */

/* /sys/fs/ fs/namespace.c */

/* /sys/module/ kernel/params.c */

/* /sys/power/ kernel/power/main.c */


sys$ ls -F ./
block/  bus/  class/  dev/  devices/  firmware/  fs/  hypervisor/  kernel/  module/  power/

static void __init do_basic_setup(void)
{
        cpuset_init_smp();
        driver_init();
        init_irq_proc();
        do_ctors();
        do_initcalls();
}
driver_init:

/*设备相关初始化*/

/* /sys/devices/ */

struct kset *devices_kset;
注册:devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);

/* /sys/dev/ */

static struct kobject *dev_kobj;
注册:dev_kobj = kobject_create_and_add("dev", NULL);

/* /sys/dev/block 父节点:/sys/dev/*/

struct kobject *sysfs_dev_block_kobj
sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);

/* /sys/dev/block 父节点:/sys/dev/*/

struct kobject *sysfs_dev_char_kobj;
sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);

/*bus初始化*/
/* /sys/bus/ */

static struct kset *bus_kset;
bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);

/* /sys/devices/system 父节点:/sys/devices/ */

static struct kset *system_kset;
system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);

/* /sys/class/ */

/* Hotplug events for classes go to the class subsys */
static struct kset *class_kset;
class_kset = kset_create_and_add("class", NULL, NULL);

/* /sys/firmware/ */

struct kobject *firmware_kobj;
firmware_kobj = kobject_create_and_add("firmware", NULL);

/* /sys/hypervisor/ */

struct kobject *hypervisor_kobj;
hypervisor_kobj = kobject_create_and_add("hypervisor", NULL);

/* /sys/firmware/devicetree 父节点:/sys/firmware/*/

struct kset *of_kset;
of_kset = kset_create_and_add("devicetree", NULL, firmware_kobj);

/* /sys/devices/platform 父节点:/sys/devices/ */

struct device platform_bus;
platform_bus_init=>device_register(&platform_bus)

do_initcalls:

/* /sys/kernel/ kernel/ksysfs.c */

struct kobject *kernel_kobj;
kernel_kobj = kobject_create_and_add("kernel", NULL);
ksysfs_init:
core_initcall(ksysfs_init);
#define core_initcall(fn)    __define_initcall(fn, 1)

/* /sys/block/ kernel/block/genhd.c */

static struct kobject *block_depr;
/* create top-level block dir */
block_depr = kobject_create_and_add("block", NULL);
static int __init genhd_device_init(void)
subsys_initcall(genhd_device_init);
#define subsys_initcall(fn)     __define_initcall(fn, 4)

/* /sys/fs/ fs/namespace.c */

void __init mnt_init(void)
struct kobject *fs_kobj;
fs_kobj = kobject_create_and_add("fs", NULL);
start_kernel=>vfs_caches_init=>mnt_init

/* /sys/module/ kernel/params.c */

struct kset *module_kset;
module_kset = kset_create_and_add("module", &module_uevent_ops, NULL);
static int __init param_sysfs_init(void)
subsys_initcall(param_sysfs_init);
#define subsys_initcall(fn)     __define_initcall(fn, 4)

/* /sys/power/ kernel/power/main.c */

struct kobject *power_kobj;
power_kobj = kobject_create_and_add("power", NULL);
static int __init pm_init(void)
core_initcall(pm_init);
#define core_initcall(fn)    __define_initcall(fn, 1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值