mdev机制(二)————在Linux内核中的实现
2017-04-26 00:01
260 查看
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)
相关文章推荐
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- Linux内核抢占实现机制分析(转)
- Linux内核抢占实现机制分析
- Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- linux内核进程调度以及定时器实现机制(转载)
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- Linux内核进程调度以及定时器实现机制
- linux内核中断实现机制
- Linux内核抢占实现机制分析
- Linux内核进程调度以及定时器实现机制(转)
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- Linux内核抢占实现机制分析
- Linux内核进程调度以及定时器实现机制
- Linux内核设计与实现——7 中断与中断处理(7)——中断处理机制的实现&/proc/interrupts
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- Linux内核抢占实现机制分析
- Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析