通上面的函数就可以把服务和事件触发的命令添加队列里。其实是在文件parser.c头部,就声明了下面三个链表,如下:

static list_declare(service_list);

static list_declare(action_list);

static list_declare(action_queue);

service_list是定义添加分析所有资源文件里的服务,action_list是定义添加分析所有资源文件里的事件触发的命令列表,action_queue是定义添加当前需要执行操作的命令动作或者服务等。

那么又有下面一个问题了,init进程是在那里添加这些服务或命令到运行队列呢?在init.c文件看到下面的代码:

action_for_each_trigger("early-init", action_add_queue_tail);

drain_action_queue();

原来是通过函数action_for_each_trigger来把所有需要按事件触发运行的命令添加到队列里,函数action_add_queue_tail把需要执行命令放到队列,函数drain_action_queue把添加到队列里的命令进行运行。

#001 void action_for_each_trigger(const char *trigger,

#002 void (*func)(struct action *act))

#003 {

#004 struct listnode *node;

#005 struct action *act;

#006 list_for_each(node, &action_list) {

这行代码是遍历链表所有项。

#007 act = node_to_item(node, struct action, alist);

这行代码是把动作节点转换为动作项。

#008 if (!strcmp(act->name, trigger)) {

#009 func(act);

这段代码是当找到与用户输入相同事件触发的动作,比如上面是查找“early-init”事件。这时就把动作项添加到将要运行的队列里。

#010 }

#011 }

#012 }

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 如何在后台运行Linux命令?
  3. No.11 使用firewall配置的防火墙策略的生效模式
  4. Only the original thread that created a view hierarchy can t
  5. Android(安卓)常用 adb 命令
  6. Android(安卓)静默安装实现方法
  7. Android(安卓)Recovery 的流程分析
  8. Ubuntu 11.04 64位 编译 Android(安卓)2.3 源码
  9. Android的FastBoot的安装与环境变量设置

随机推荐

  1. android检测新版本并下载安装的方法
  2. 深入理解onSaveInstanceState & onRestor
  3. android事件分发机制(上)
  4. Android(安卓)WebView的loadData方法注意
  5. Android(安卓)Studio打包签名全过程
  6. android初学常见问题[持续更新]
  7. Android(安卓)Studio 3.3.X 导入项目的正
  8. 将类似“¥1.5元”的文本中数字标红
  9. [转]Android自定义控件之TextView
  10. RxJava + Retrofit 的实际应用场景