新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > hotplug_uevent機制

        hotplug_uevent機制

        作者: 時間:2016-11-21 來源:網絡 收藏
        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:要執行的命令
        命令:vi /etc/mdev.conf
        ls -l /dev/led*
        vi /bin/add_remove_led.sh
        chmod +x /bin/add_remove_led.sh
        寫mdev.conf
        1.
        leds 0:0 777
        led1 0:0 777
        led2 0:0 777
        led3 0:0 777
        2.
        leds?[123]? 0:0 777
        3.
        leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console
        4.
        leds?[123]? 0:0 777 * if [ $ACTION = "add" ]; then echo create /dev/$MDEV > /dev/console; else echo remove /dev/$MDEV > /dev/console; fi
        5.
        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
        6. U盤自動加載
        sda[1-9]+ 0:0 777 * if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi
        7.
        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


        關鍵詞: hotplug_uevent機

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 疏勒县| 团风县| 陆河县| 乳源| 竹溪县| 霍州市| 仙游县| 榆树市| 陆河县| 太白县| 阿图什市| 富蕴县| 辛集市| 浙江省| 抚州市| 绥江县| 克东县| 常山县| 衡南县| 宁海县| 泰顺县| 哈巴河县| 二手房| 彭山县| 改则县| 阳信县| 浦江县| 拉孜县| 萨迦县| 于都县| 岗巴县| 巢湖市| 石阡县| 大丰市| 北海市| 新乐市| 自贡市| 文山县| 台北市| 枣阳市| 方城县|