我有一些问题,我试图谷歌找出来但是徒劳无功。因此,在此发布。提前感谢您的时间。
Linux中可用的C文件(我使用Ubuntu)生成init
可执行文件?如何从内核模块调用init
;引导程序在到达内核init
文件后如何调用/boot/vmlinuz
模块?
有没有办法追踪调用init
函数的函数?
到目前为止我尝试过:尝试通过readelf和nm但是无法使用它们追溯到被调用者。
systemd
替换init
后的引导程序。我开始理解,首先调用与udev和d-bus相关的侦听套接字;然后每个进程启动并获得与这些套接字的连接。但我需要清楚地了解系统的运作方式。
如有必要,请帮我指出相关链接。我已经提到的链接很少:
但他们解释的方式非常抽象。
答案 0 :(得分:0)
Linux中可用的C文件(我使用Ubuntu)在哪里生成init可执行文件?
这取决于哪个包提供init
可执行文件。在默认的Ubuntu Utopic安装中,/sbin/init
是/sbin/upstart
的符号链接,因此您需要找到upstart
的来源。使用您最喜欢的搜索引擎进行简单搜索可能会指向the Upstart page,其中包含指向源下载和VCS存储库的链接。
您还可以使用apt-get source
命令下载特定包的源代码。您还需要安装dpkg-dev
软件包(apt-get install dpkg-dev
),之后您可以运行:
apt-get source upstart
之后您将拥有:
root@ubuntu:~# ls upstart-1.13.2/
ABOUT-NLS config.guess contrib extra ltmain.sh po TODO
aclocal.m4 config.h.in COPYING HACKING m4 README util
AUTHORS config.rpath dbus init Makefile.am README.tests
ChangeLog config.sub debian INSTALL Makefile.in scripts
compile configure depcomp install-sh missing test
conf configure.ac doc lib NEWS test-driver
在Ubuntu Vivid上,/sbin/init
是/lib/systemd/systemd
的符号链接,因此您需要获取systemd sources。
请注意,upstart和systemd的操作与旧版/sbin/init
系统完全不同。上述链接中的文档描述了每个系统的运行方式。
如何从内核模块调用init;引导程序在到达kernel / boot / vmlinuz文件后如何调用init模块?
引导加载程序不会调用init
。引导加载程序加载并执行内核。
有没有办法跟踪哪个函数调用init函数?到目前为止我尝试过:尝试通过readelf和nm但无法使用它们追溯到被调用者。
我不清楚你在这里尝试做什么。内核调用/sbin/init
。也许this question是相关的。
systemd替换init后的引导过程。我开始理解,首先调用与udev和d-bus相关的侦听套接字;然后每个进程启动并获得与这些套接字的连接。但我需要清楚地了解系统的运作方式。
正如我之前所说,systemd没有替换 init ,它取代了 upstart ,而 upstart 取代了 init < / em>的。希望systemd网站上提供的文档能够帮助您了解工作原理。如果没有,如果您询问有关具体事情的问题,您可能会得到更好的答案,这些事情不清楚或不符合您的想法。
答案 1 :(得分:0)
我对你的问题感到有点困惑,因为你指的是&#34; init函数&#34;和&#34; init elf可执行文件&#34;。
我将为您提供Linux内核源代码的参考,因为这些问题在代码中有简单的答案: 内核在引导时start_kernel直接调用init 然后调用rest_init来创建init进程执行线程和init进程任务结构。 init线程在kernel_init的内核中开始执行,快速调用run_init_process调用do_execve(内核相当于execve)。在调用do_execve之后,init进程已经开始。