詳解Linux系統啟動過程:從BIOS自檢到登錄界面
Linux系統的啟動過程可概括為:BIOS自檢 → 引導加載程序(GRUB/LILO) → 內核加載 → init進程啟動 → 系統初始化 → 登錄界面。 下面將對各個階段進行詳細闡述:
計算機啟動后,BIOS首先進行POST (Power-On Self-Test) 自檢,檢測硬件。此后,BIOS根據CMOS設置的引導順序,從硬盤、軟盤或光驅等設備讀取引導扇區。Linux系統通常從硬盤的MBR (Master Boot Record) 開始引導,MBR位于磁盤的第一個扇區(0柱面0磁頭1扇區)。BIOS將控制權交給MBR中的引導加載程序。 要查看MBR內容,可以使用以下命令(需root權限):
dd if=/dev/sda of=mbr.bin bs=512 count=1 od -xa mbr.bin
(/dev/sda替換為你的引導磁盤)
GRUB和LILO是常見的引導加載程序,負責加載操作系統內核。GRUB擁有交互式命令界面,支持網絡引導,其配置文件錯誤不會導致系統無法啟動;而LILO則相反。 兩者都讀取MBR中的引導信息,但GRUB更靈活,能支持多個操作系統。
引導加載程序加載內核映像(zImage或bzImage)到內存。內核映像是壓縮的,加載后會進行解壓,并放入高端內存。如有初始RAM磁盤映像,也會被加載。 內核加載完成后,開始內核引導過程。
內核引導完成后,啟動init進程 (PID為1)。init進程是所有其他進程的祖先,負責系統初始化和運行級別管理。它扮演終結父進程的角色,并根據/etc/inittab (或systemd)文件執行相應的腳本,進行系統初始化工作,例如設置鍵盤、字體、加載模塊、配置網絡等。
init進程根據/etc/inittab (或systemd)文件執行一系列初始化腳本,例如/etc/rc.d/rc.sysinit,完成系統初始化。 初始化完成后,系統進入登錄界面,等待用戶登錄。
通過以上步驟,Linux系統完成啟動過程,進入可操作狀態。 需要注意的是,現代Linux系統普遍使用systemd代替傳統的init系統,其啟動流程更為復雜,但基本原理與上述過程類似。