Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15490755
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: 嵌入式

2011-03-23 22:14:15

  1. android如何在init.rc中添加/dev/字符设备节点创建权限

  2. system/core/init/init.c
  3. system/core/init/keywords.h:77: KEYWORD(device, COMMAND, 4, do_device)
  4. do_device
  5. add_devperms_partners

  6. /init.rc中我们可以为/dev/下具体设备节点的当被创建时,控制信息
  7. on early-init
  8.     device /dev/gpio 644 system wifi
  9.     device /dev/snd* 664 system audio

  10. 其中*表示prefix为1,没有*表示prefix为0[luther.gliethttp]
  11. 上面的device关键字后面的system和wifi字符串描述对应的id为
  12. static struct android_id_info android_ids[] = {
  13.     { "root", AID_ROOT, },
  14.     { "system", AID_SYSTEM, },
  15.     { "radio", AID_RADIO, },
  16.     { "bluetooth", AID_BLUETOOTH, },
  17.     { "graphics", AID_GRAPHICS, },
  18.     { "input", AID_INPUT, },
  19.     { "audio", AID_AUDIO, },
  20.     { "camera", AID_CAMERA, },
  21.     { "log", AID_LOG, },
  22.     { "compass", AID_COMPASS, },
  23.     { "mount", AID_MOUNT, },
  24.     { "wifi", AID_WIFI, },
  25.     { "dhcp", AID_DHCP, },
  26.     { "adb", AID_ADB, },
  27.     { "install", AID_INSTALL, },
  28.     { "media", AID_MEDIA, },
  29.     { "shell", AID_SHELL, },
  30.     { "cache", AID_CACHE, },
  31.     { "diag", AID_DIAG, },
  32.     { "net_bt_admin", AID_NET_BT_ADMIN, },
  33.     { "net_bt", AID_NET_BT, },
  34.     { "sdcard_rw", AID_SDCARD_RW, },
  35.     { "vpn", AID_VPN, },
  36.     { "keystore", AID_KEYSTORE, },
  37.     { "inet", AID_INET, },
  38.     { "net_raw", AID_NET_RAW, },
  39.     { "net_admin", AID_NET_ADMIN, },
  40.     { "misc", AID_MISC, },
  41.     { "nobody", AID_NOBODY, },
  42. };
  43. // =======================================
  44. system/core/init/init.c
  45. int main(int argc, char **argv)
  46. {
  47. ......
  48.     INFO("reading config file\n");
  49.     parse_config_file("/init.rc");

  50.     /* pull the kernel commandline and ramdisk properties file in */
  51.     qemu_init();
  52.     import_kernel_cmdline(0);

  53.     get_hardware_name();
  54.     snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
  55.     parse_config_file(tmp);

  56. // 需要在on early-init加入device
  57. // 这样下面的device_init();创建节点动作
  58. // 才会根据这里的对device设备的描述创建出相应权限的节点[luther.gliethttp]
  59.     action_for_each_trigger("early-init", action_add_queue_tail);
  60.     drain_action_queue();

  61. // 因为device_init()将依赖sysfs文件系统提供的uevent机制
  62. // 对builtin到kernel中的所有char,block,net等设备,
  63. // 在/dev/目录下动态创建出对应的节点,此时会使用到
  64. // init.rc中device添加的内容device信息,
  65. // 因此device命令必须添加到early-init字段中
  66. // 即[luther.gliethttp]
  67. // on early-init
  68. //     device /dev/gpio 644 system wifi
  69. //     device /dev/snd* 644system audio
  70.     INFO("device init\n");
  71.     device_fd = device_init();
  72. ......
  73. }
阅读(10017) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~