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