udev&misc
2018-09-04 本文已影响0人
gbmaotai
动态创建设备节点——udev
之前加载字符型设备后是通过命令mknod来创建设备节点的。在2.6内核中,有一个名叫udev的后台程序,它通过读取/sys/class的信息,一旦添加的新的设备,该后台程序就会自动创建设备节点。
一、要使用动态创建设备节点,首先要运行udev后台程序。
mount -t tmpfs tmpfs /dev
/sbin/udevd -d
/sbin/udevstart
在嵌入式下有两种方法:
1、移植udev到嵌入式系统中。
2、在编译busybox时加入mdev。
杂设备——misc (NFC PN544)
杂设备就是内核自动帮你分配设备号并且自动创建设备文件。
1、自动分配设备号,是指所有注册为杂设备的设备的主设备号为10,而次设备号内核自动分配。 MISC_DYNAMIC_MINOR
2、自动创建设备文件是指,内核会使用udev(前提是你已经移植udev),动态创建设备节点。
pn544_init 里面i2c_add_driver
probe里面会misc_register
包含头文件:linux/miscdevice.h
定义杂设备结构体:
struct miscdevice {
int minor;
const char *name; //设备文件的名字
const struct file_operations *fops; //指定该设备的fops结构体
struct list_head list;
struct device *parent;
struct device *this_device;
};
2、定义结构体后使用使用一下函数注册和注销:
int misc_register(struct miscdevice * misc); //注册
int misc_deregister(struct miscdevice *misc); //注销
Android 中uevent的实现
/system/core/init/ueventd.c
Android 中的ueventd是一个守护进程,主要作用是接收uevent来创建或删除/dev/xxx(设备节点)。
ueventd,解析ueventd.rc和ueventd.xx.rc,将文件中的每一行信息存放到一个perm_node结构体,然后将这些结构体组成一个双向链表,每一行包含文件名、uid、gid、权限等.
Android底层功能与标准linux对比:
功能 | Linux | Android |
---|---|---|
管理动态设备文件 | udev/mdev | ueventd(init) |
管理动态存储挂载 | udev/mdev | Vold |
管理静态存储挂载 | fstab | Vold |
向上层报告 | 无 | Vold |
init进程 | init/linuxrc | init |
图形界面 | X Windows/Qt/MiniGui | Gralloc+SurfaceFlinger/Minui |
蓝牙驱动 | BluZ | BlueDroid |
音频库 | libalsa | tinyalso |