




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
init.c分析因为启动是首先运行init.c所以从其main()开始分析652 int main(int argc, char *argv)653 654 int fd_count = 0;655 struct pollfd ufds4;656 char *tmpdev;657 char* debuggable;658 char tmp32;659 int property_set_fd_init = 0;660 int signal_fd_init = 0;661 int keychord_fd_init = 0;662 663 if (!strcmp(basename(argv0), ueventd)664 return ueventd_main(argc, argv);这段代码初始化一些变量,然后663行判断是否给用户空间发事件,这里显然不执行if语句。666 /* clear the umask */667 umask(0);设置允许当前进程创建文件或者目录为最大可操作的权限。673 mkdir(/dev, 0755);674 mkdir(/proc, 0755);675 mkdir(/sys, 0755);创建设备目录dev,进程文件系统目录proc,系统目录sys。677 mount(tmpfs, /dev, tmpfs, 0, mode=0755);678 mkdir(/dev/pts, 0755);679 mkdir(/dev/socket, 0755);680 mount(devpts, /dev/pts, devpts, 0, NULL);681 mount(proc, /proc, proc, 0, NULL);682 mount(sysfs, /sys, sysfs, 0, NULL);把tmpfs挂载到/dev下,然后创建pts和socket目录,在/dev/pts挂装devpts虚拟文件系统,在目录/proc挂装proc文件系统,在目录/sys挂装sysfs文件系统。690 open_devnull_stdio();创建空的设备节点(/dev/null)。691 log_init();创建kmsg(/dev/kmsg)节点,主要用来输出LOG信息。693 INFO(reading config filen);694 init_parse_config_file(/init.rc);分析根目录下面的init.rc配置文件,并且把里面的参数组成链表的方式697 import_kernel_cmdline(0);从内核里取得引导参数699 get_hardware_name(hardware, &revision);获取当前android系统运行的硬件信息。主要从/proc/cpuinfo里读到相关的信息。700 snprintf(tmp, sizeof(tmp), /init.%s.rc, hardware);701 init_parse_config_file(tmp);以/init.硬件名称.rc来获取相应硬件的配置文件,并且把配置文件参数加载到链表里。以下一段代码,用于加载action_list和queue_list列表,action_list用来加载脚本里的action,queue_list主要用于加载非脚本里的action以及排列action的顺序703 action_for_each_trigger(early-init, action_add_queue_tail);在action_list列表里查找以early-init为名的action变量,找到后将它加到queue_list列表里705 queue_builtin_action(wait_for_coldboot_done_action, wait_for_coldboot_done);把第一个(函数)和第二个参数(名字)组装成一个action变量加到action_list和queue_list列表。706 queue_builtin_action(property_init_action, property_init);707 queue_builtin_action(keychord_init_action, keychord_init);708 queue_builtin_action(console_init_action, console_init);console_init_action会加载开机画面和文字709 queue_builtin_action(set_init_properties_action, set_init_properties);711 /* execute all the boot actions to get us started */712 action_for_each_trigger(init, action_add_queue_tail);713 action_for_each_trigger(early-fs, action_add_queue_tail);714 action_for_each_trigger(fs, action_add_queue_tail);715 action_for_each_trigger(post-fs, action_add_queue_tail);716 717 queue_builtin_action(property_service_init_action, property_service_init);718 queue_builtin_action(signal_init_action, signal_init);719 queue_builtin_action(check_startup_action, check_startup);720 721 /* execute all the boot actions to get us started */722 action_for_each_trigger(early-boot, action_add_queue_tail);723 action_for_each_trigger(boot, action_add_queue_tail);724 725 /* run all property triggers based on current state of the properties */726 queue_builtin_action(queue_property_triggers_action, queue_propety_triggers);729 #if BOOTCHART730 queue_builtin_action(bootchart_init_action, bootchart_init);731 #endif这里没有定义BOOTCHART所以不执行这个733 for(;) 734 int nr, i, timeout = -1;735 736 execute_one_command();737 restart_processes();来判断那些服务需要重新启动。738 739 if (!property_set_fd_init & get_property_set_fd() 0) 740 ufdsfd_count.fd = get_property_set_fd();741 ufdsfd_count.events = POLLIN;742 ufdsfd_count.revents = 0;743 fd_count+;744 property_set_fd_init = 1;745 746 if (!signal_fd_init & get_signal_fd() 0) 747 ufdsfd_count.fd = get_signal_fd();748 ufdsfd_count.events = POLLIN;749 ufdsfd_count.revents = 0;750 fd_count+;751 signal_fd_init = 1;752 753 if (!keychord_fd_init & get_keychord_fd() 0) 754 ufdsfd_count.fd = get_keychord_fd();755 ufdsfd_count.events = POLLIN;756 ufdsfd_count.revents = 0;757 fd_count+;758 keychord_fd_init = 1;759 760 761 if (process_needs_restart) 762 timeout = (process_needs_restart - gettime() * 1000;763 if (timeout 0) 772 if (timeout BOOTCHART_POLLING_MS)773 timeout = BOOTCHART_POLLING_MS;774 if (bootchart_step() 0 | -bootchart_count = 0) 775 bootchart_finish();776 bootchart_count = 0;777 778 779 #endif这段代码是用来计算运行性能。780 781 nr = poll(ufds, fd_count, timeout);782 if (nr = 0)783 continue;轮询几个socket是否有事件处理。784785 for (i = 0; i fd_count; i+) 786 if (ufdsi.revents = POLLIN) 787 if (ufdsi.fd = get_property_set_fd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【语文】广东省深圳市罗湖区翠竹小学小学二年级下册期末试题
- 七年级语文必读名著阅读傅雷家书练习题试题及答案
- 2025年陕西省安全员C证考试题库含答案
- 2025企业消防安全知识题库及答案
- 2025年设备维修质量检验员新员工岗位专业知识笔试题目及答案
- 2025年高级审计师考试真题及答案解析
- 2024体育知识竞赛题库及参考答案
- 2025年电梯安装修理作业人员T证考试练习题及答案
- 高速公路考试面试真题及答案
- 咨询顾问评选方案模板
- 输血科岗前培训课件
- 间质性肺炎护理查房内容课件
- 交通事故原因分析
- 深圳市企业职工养老保险养老金申请表
- IDC云数据中心机房运维服务解决方案
- 婴幼儿发展的一般规律及养育要点
- 大一统视阈下的边疆治理
- 2020ESPEN专家建议:围手术期营养管理
- 《教育心理学》课程教学大纲
- 学校健康食堂学生营养餐带量食谱
- 中西医结合导论第一章中西医结合导论
评论
0/150
提交评论