天天看点

linux启动过程分析

linux内核从哪里开始?

start_kernel(),linux内核源码/init/main.c, 在此之前有些准备工作,先不分析

linux内核是从哪里启动init程序的呢?

start_kernel()-> arch_call_rest_init() -> rest_init()

具体看一下rest_init()

分析一下kernel_init()的关键代码

linux内核会从文件系统中找init这个用户空间程序,那么去哪里找呢?

/sbin/init -> /etc/init -> /bin/init -> /bin/sh (如果这几个都没找到,内核就会直接执行panic,提示开发者,在根文件系统中没有找到init可执行程序)

那么/sbin/init都做了些什么呢?

首先找到/sbin/init的源码,根据使用的发行版来选择,

现在发行版使用的init程序有, busybox简化版init, sysvinit, upstart和systemd

哪里可以找到init的源码?

busybox简化版init: https://git.busybox.net/busybox/tree/init/init.c

sysvinit: http://download.savannah.gnu.org/releases/sysvinit/

upstart: ttp://upstart.ubuntu.com/download.html

systemd: https://github.com/systemd/systemd

以sysvinit(http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.97.tar.xz, src/init.c)为例

继续阅读