# ueventd ## Overview The **ueventd** module listens for **netlink** events about hot plug of kernel device drivers and dynamically manages the dev node of the corresponding device based on the event type. ## Configuration Files of ueventd ### File Type The configuration files of the **ueventd** module are stored in the **/base/startup/init/ueventd/etc/** directory. They are classified into three types: **device**, **sysfs**, and **firmware**. Currently, the **ueventd** module uses configuration files of the **device** type. If needed, set DAC permissions for a created node in such files. File types are distinguished by the field at the beginning of the file. The following uses **device** as an example: ``` [device] # File type. # /dev/null 0666 0 0 ``` ### Configuration File Description - The configuration file of the **ueventd** module is named **ueventd.config**. - The file consists of five fields, for example: ``` /dev/null 0666 0 0 /dev/binder 0666 0 0 /dev/hwbinder 0666 0 0 /dev/vndbinder 0666 0 0 /dev/input/event* 0660 0 input ``` **Fields in the Configuration File** | Field | Description | | ----------- | ---------------- | | device name | Device node name. | | mode | Permission granted to a device node in compliance with the UGO model.| | uid | UID of a device node.| | gid | GID of a device node.| | parameter | Device node parameter information, which is similar to a notification. If a device is created, a corresponding parameter is set so that other processes can perform operations on the node based on the parameter information.
/dev/null 0666 0 0 device_null
Take the **dev/null** node as as example:
When the device node is created, this field is set to **startup.uevent.device_null "added"**; when the device node is removed, this field is set to **startup.uevet.device_null "removed"**.| - Remarks The nodes of the boot partition may vary according to devices. Therefore, you can configure soft link permissions in the **ueventd.config** file to change the permissions of the corresponding physical device node. These nodes are stored in the **/dev/block/by-name** directory. ``` lrwxrwxrwx 1 root root 20 2017-08-10 16:22 boot_linux -> /dev/block/mmcblk0p5 lrwxrwxrwx 1 root root 20 2017-08-10 16:22 bootctrl -> /dev/block/mmcblk0p3 lrwxrwxrwx 1 ueventd ueventd 21 2017-08-10 16:22 chip-prod -> /dev/block/mmcblk0p10 lrwxrwxrwx 1 root root 20 2017-08-10 16:22 misc -> /dev/block/mmcblk0p2 lrwxrwxrwx 1 root root 20 2017-08-10 16:22 ramdisk -> /dev/block/mmcblk0p6 lrwxrwxrwx 1 ueventd ueventd 20 2017-08-10 16:22 resource -> /dev/block/mmcblk0p4 lrwxrwxrwx 1 ueventd ueventd 20 2017-08-10 16:22 sys-prod -> /dev/block/mmcblk0p9 lrwxrwxrwx 1 root root 20 2017-08-10 16:22 system -> /dev/block/mmcblk0p7 lrwxrwxrwx 1 root root 20 2017-08-10 16:22 uboot -> /dev/block/mmcblk0p1 lrwxrwxrwx 1 ueventd ueventd 21 2017-08-10 16:22 updater -> /dev/block/mmcblk0p11 lrwxrwxrwx 1 ueventd ueventd 21 2017-08-10 16:22 userdata -> /dev/block/mmcblk0p12 lrwxrwxrwx 1 root root 20 2017-08-10 16:22 vendor -> /dev/block/mmcblk0p8 ``` Configuration example: ``` /dev/block/by-name/misc 0660 update update /dev/block/by-name/bootctrl 0660 update update ``` ### Setting the SELinux Tag of a Device Node The SELinux tags of device nodes are set in the **/base/security/selinux_adapter/sepolicy/base/system/file_contexts** file. If the SELinux tag of a device node is not set, the node inherits the SELinux tag of its parent directory. - Defining node tags ``` /dev/block(/.*)? u:object_r:dev_block_file:s0 /dev/block/zram0 u:object_r:zram_device:s0 ``` - Viewing the SELinux tag of the device node by using the **ls -Zl** command ``` # ls -Zl total 0 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 boot_linux -> /dev/block/mmcblk0p5 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 bootctrl -> /dev/block/mmcblk0p3 lrwxrwxrwx 1 ueventd ueventd u:object_r:dev_block_file:s0 21 2017-08-10 16:22 chip-prod -> /dev/block/mmcblk0p10 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 misc -> /dev/block/mmcblk0p2 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 ramdisk -> /dev/block/mmcblk0p6 lrwxrwxrwx 1 ueventd ueventd u:object_r:dev_block_file:s0 20 2017-08-10 16:22 resource -> /dev/block/mmcblk0p4 lrwxrwxrwx 1 ueventd ueventd u:object_r:dev_block_file:s0 20 2017-08-10 16:22 sys-prod -> /dev/block/mmcblk0p9 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 system -> /dev/block/mmcblk0p7 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 uboot -> /dev/block/mmcblk0p1 lrwxrwxrwx 1 ueventd ueventd u:object_r:dev_block_file:s0 21 2017-08-10 16:22 updater -> /dev/block/mmcblk0p11 lrwxrwxrwx 1 ueventd ueventd u:object_r:dev_block_file:s0 21 2017-08-10 16:22 userdata -> /dev/block/mmcblk0p12 lrwxrwxrwx 1 root root u:object_r:dev_block_file:s0 20 2017-08-10 16:22 vendor -> /dev/block/mmcblk0p8 ```