mdev机制(二)————在Linux内核中的实现

class_device_create
    class_device_register
        class_device_add
            kobject_uevent(&class_dev->kobj, KOBJ_ADD);
                kobject_uevent_env(kobj, action, NULL);

                    // action_string = "add";
                    action_string = action_to_string(action);

                    /* 分配保存环境变量的内存 */
                    /* environment values */
                    buffer = kmalloc(BUFFER_SIZE, GFP_KERNEL);

                    /* 设置环境变量 */
                    envp [i++] = scratch;
                    scratch += sprintf(scratch, "ACTION=%s", action_string) + 1;
                    envp [i++] = scratch;
                    scratch += sprintf (scratch, "DEVPATH=%s", devpath) + 1;
                    envp [i++] = scratch;
                    scratch += sprintf(scratch, "SUBSYSTEM=%s", subsystem) + 1;

                    /* 调用应用程序: 比如mdev */
                    /* 启动脚本 echo /sbin/mdev > /proc/sys/kernel/hotplug 
                     * 设置了uevent_helper为“/sbin/mdev“
                     */

                    argv [0] = uevent_helper;  // = "/sbin/mdev"
                    argv [1] = (char *)subsystem;
                    argv [2] = NULL;
                    call_usermodehelper (argv[0], argv, envp, 0);

分析: busybox mdev.c  

100ask: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=add
envp[3] = DEVPATH=/class/sixth_drv/buttons
envp[4] = SUBSYSTEM=sixth_drv
envp[5] = SEQNUM=720
envp[6] = MAJOR=252
envp[7] = MINOR=0

mdev_main
    temp = /sys/class/sixth_drv/buttons
    make_device(temp, 0);
        /* 确定设备文件名,类型,主次设备号 */
        device_name = bb_basename(path);  = "buttons"


        'c' == > 字符设备节点
        根据"/sys/class/sixth_drv/buttons/dev"的内容确定主次设备号

        mknod(device_name, mode | type, makedev(major, minor)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值