- android如何在init.rc中添加/dev/字符设备节点创建权限
-
-
system/core/init/init.c
-
system/core/init/keywords.h:77: KEYWORD(device, COMMAND, 4, do_device)
-
do_device
-
add_devperms_partners
-
-
/init.rc中我们可以为/dev/下具体设备节点的当被创建时,控制信息
- on early-init
-
device /dev/gpio 644 system wifi
-
device /dev/snd* 664 system audio
-
-
其中*表示prefix为1,没有*表示prefix为0[luther.gliethttp]
-
上面的device关键字后面的system和wifi字符串描述对应的id为
-
static struct android_id_info android_ids[] = {
-
{ "root", AID_ROOT, },
-
{ "system", AID_SYSTEM, },
-
{ "radio", AID_RADIO, },
-
{ "bluetooth", AID_BLUETOOTH, },
-
{ "graphics", AID_GRAPHICS, },
-
{ "input", AID_INPUT, },
-
{ "audio", AID_AUDIO, },
-
{ "camera", AID_CAMERA, },
-
{ "log", AID_LOG, },
-
{ "compass", AID_COMPASS, },
-
{ "mount", AID_MOUNT, },
-
{ "wifi", AID_WIFI, },
-
{ "dhcp", AID_DHCP, },
-
{ "adb", AID_ADB, },
-
{ "install", AID_INSTALL, },
-
{ "media", AID_MEDIA, },
-
{ "shell", AID_SHELL, },
-
{ "cache", AID_CACHE, },
-
{ "diag", AID_DIAG, },
-
{ "net_bt_admin", AID_NET_BT_ADMIN, },
-
{ "net_bt", AID_NET_BT, },
-
{ "sdcard_rw", AID_SDCARD_RW, },
-
{ "vpn", AID_VPN, },
-
{ "keystore", AID_KEYSTORE, },
-
{ "inet", AID_INET, },
-
{ "net_raw", AID_NET_RAW, },
-
{ "net_admin", AID_NET_ADMIN, },
-
{ "misc", AID_MISC, },
-
{ "nobody", AID_NOBODY, },
-
};
-
// =======================================
-
system/core/init/init.c
-
int main(int argc, char **argv)
-
{
-
......
-
INFO("reading config file\n");
-
parse_config_file("/init.rc");
-
-
/* pull the kernel commandline and ramdisk properties file in */
-
qemu_init();
-
import_kernel_cmdline(0);
-
-
get_hardware_name();
-
snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
-
parse_config_file(tmp);
-
-
// 需要在on early-init加入device
-
// 这样下面的device_init();创建节点动作
-
// 才会根据这里的对device设备的描述创建出相应权限的节点[luther.gliethttp]
-
action_for_each_trigger("early-init", action_add_queue_tail);
-
drain_action_queue();
-
-
// 因为device_init()将依赖sysfs文件系统提供的uevent机制
-
// 对builtin到kernel中的所有char,block,net等设备,
-
// 在/dev/目录下动态创建出对应的节点,此时会使用到
-
// init.rc中device添加的内容device信息,
-
// 因此device命令必须添加到early-init字段中
-
// 即[luther.gliethttp]
-
// on early-init
-
// device /dev/gpio 644 system wifi
-
// device /dev/snd* 644system audio
-
INFO("device init\n");
-
device_fd = device_init();
-
......
-
}
阅读(10017) | 评论(0) | 转发(1) |