zoukankan      html  css  js  c++  java
  • uevent

    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)
    

    我接上U盘,想自动挂载,怎么办?
    mdev.conf的格式:
    : [<@|$|*> ]

    device regex:正则表达式,表示哪一个设备
    uid: owner
    gid: 组ID
    octal permissions:以八进制表示的属性
    @:创建设备节点之后执行命令
    $:删除设备节点之前执行命令
    *: 创建设备节点之后 和 删除设备节点之前 执行命令
    command:要执行的命令

    写mdev.conf
    1.
    leds 0:0 777
    led1 0:0 777
    led2 0:0 777
    led3 0:0 777

    leds?[123]? 0:0 777

    leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console

    leds?[123]? 0:0 777 * if [ (ACTION = "add" ]; then echo create /dev/)MDEV > /dev/console; else echo remove /dev/$MDEV > /dev/console; fi

    leds?[123]? 0:0 777 * /bin/add_remove_led.sh

    把命令写入一个脚本:
    add_remove_led.sh

    !/bin/sh

    if [ (ACTION = "add" ]; then echo create /dev/)MDEV > /dev/console;
    else
    echo remove /dev/$MDEV > /dev/console;
    fi

    1. U盘自动加载
      sda[1-9]+ 0:0 777 * if [ (ACTION = "add" ]; then mount /dev/)MDEV /mnt; else umount /mnt; fi

    sda[1-9]+ 0:0 777 * /bin/add_remove_udisk.sh

    add_remove_udisk.sh

    !/bin/sh

    if [ (ACTION = "add" ]; then mount /dev/)MDEV /mnt;
    else
    umount /mnt;
    fi

    版权声明:本文为博主原创文章,转载请注明文章来源,有需要帮忙可加QQ:871263854
  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/Dream998/p/8540764.html
Copyright © 2011-2022 走看看