udev&misc

作者: gbmaotai | 来源:发表于2018-09-04 10:16 被阅读0次

    动态创建设备节点——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

    相关文章

      网友评论

          本文标题:udev&misc

          本文链接:https://www.haomeiwen.com/subject/yvxgwftx.html