Android Init 启动之Ueventd 和 watchdogd
我是一个初学者,我正在尝试理解 Kernel-Android 界面。
在 system/core/init/init.c ,初始部分有以下代码。
if (!strcmp(basename(argv[0]), "ueventd"))
return ueventd_main(argc, argv);
if (!strcmp(basename(argv[0]), "watchdogd"))
return watchdogd_main(argc, argv);
接下来是板特定的解析
init.rc
文件。
ueventd_main
解析板特定
uevent.rc
文件。
watchdogd_main
尝试设置超时,然后继续向
/dev/watchdog
写入一个空字符在无限循环中。
在 Karim Yaghmour 的“嵌入式 Android”一书中,它被称为:
One of the first things init does is check whether it was invoked as ueventd. init includes an implementation of the udev hotplug events handler. Because this code is compiled within init’s own code, init checks the command-line that was used to invoke it, and if it was invoked through the /sbin/ueventd symbolic link to /init, then init immediately runs as ueventd.
我的问题是
1)我相信这个主函数的参数是从内核bootcmd参数“init =”接收的。我对吗?
2) 在什么情况下会调用一个 init 以仅作为 ueventd 或 watchdogd 运行?
3) 符号链接(symbolic link)到/init 是什么意思?
请您参考如下方法:
1) I believe that the arguments to this main function are received from kernel bootcmd parameters "init=". Am I right?
不,不是 bootcmd 参数。
argv[0]
是正在启动的可执行文件的名称。
如果您查看 Android.mk对于
init
, 你会看见:
# Create symlinks.
LOCAL_POST_INSTALL_CMD := $(hide) mkdir -p $(TARGET_ROOT_OUT)/sbin; \
ln -sf ../init $(TARGET_ROOT_OUT)/sbin/ueventd; \
ln -sf ../init $(TARGET_ROOT_OUT)/sbin/watchdogd
在这里您可以看到创建了两个额外的符号链接(symbolic link),都指向 init。这些将包含在
/sbin/
中的最终 Android 启动镜像中
2) Under what scenario one would invoke an init to be run only as ueventd or watchdogd?
在 init.rc ,你可以看到:
## Daemon processes to be run by init.
##
service ueventd /sbin/ueventd
class core
critical
seclabel u:r:ueventd:s0
shutdown critical
这是声明服务 ueventd 并指定
ueventd
的路径小路。所以当
ueventd
服务启动后,它将执行 init,但
argv[0]
参数将是
ueventd
.
watchdogd
以同样的方式完成。
所以它是用三个不同名称调用的同一个可执行文件
init
,
ueventd
, 或
watchdogd
.根据调用它的名称,会执行三种不同的代码路径之一(如您引用的代码中所示)。
当不同的命令在实现上基本相同时,通常会这样做。在我的 Ubuntu 系统上:
$ ls -l /usr/bin/unxz
lrwxrwxrwx 1 root root 2 Oct 3 11:04 /usr/bin/unxz -> xz
你可以看到
unxz
链接到
xz
来自 xz 的手册页:
unxz is equivalent to xz --decompress.
所以在这里,只有一个可执行文件,但根据用于启动它的可执行文件名称,行为是不同的。
3) What do they mean by symbolically linked to /init?
在前两个答案中回答。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。