天天看點

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)為例

繼續閱讀