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
  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/Dream998/p/8540764.html
Copyright © 2011-2022 走看看