gpt4 book ai didi

Android Init 启动 - Ueventd 和 watchdogd

转载 作者:行者123 更新时间:2023-12-01 11:27:02 30 4
gpt4 key购买 nike

我是一个初学者,我正在尝试理解 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?



在前两个答案中回答。

关于Android Init 启动 - Ueventd 和 watchdogd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427089/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com