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