一、系統引導過程總體介紹
啟動流程圖:
系統引導過程主要由以下幾個步驟組成(以硬碟啟動為例) 1
、開機; 2
、bios
加電自檢(
post——power on self test
),包括檢查
ram,
keyboard
,顯示器,軟硬磁碟等等。
intel
系列的cpu
首先進入的是實模式,並開始執行位於位址
0xffff0
處的**,也就是
rom-bios
起始位置的**; 3
、搜尋啟動的作業系統,根據
bios
設定,可能會依次訪問每個軟盤的第乙個扇區、硬碟、
cd-row
等;一旦找到有效的啟動裝置,將第乙個扇區(0頭
0道1扇區,也就是
boot sector
)的內容讀入記憶體位址
0x7c00處;
4、檢查(word
)0000
:7dfe
是否等於
0xaa55.
若不等於則轉去嘗試其他介質;如果沒有其他啟動介質,則顯示
「no rom basic」
,然後宕機; 5
、跳轉到
0000:7c
00處執行
mbr中的程式
bootsect.s;
6、mbr先將自己複製到
0x90000
處,然後將緊接其後的
setup
部分(第二扇區)拷貝到
0x90200
,將真正的核心**拷貝到
0x100000
。以上這些拷貝動作都是以
bootsect.s
、setup.s
以及vmlinux
在磁碟上連續存放為前提的; 7
、bootsect.s
完成載入動作後,就直接跳轉到
0x90200
,這裡正是
setup.s
的程式入口。
setup.s
的主要功能就是將系統引數(包括記憶體、磁碟等,由
bios
返回)拷貝到
0x90000-0x901ff
記憶體中,這個地方正是
bootsect.s
存放的地方,這時它將被系統引數覆蓋。以後這些引數將由保護模式下的**來讀取。 8
、setup.s
還將video.s
中的**包含進來,檢測和設定顯示器和顯示模式。最
後,setup.s
將系統轉換到保護模式,並跳轉到
0x100000
(對於bzimage
格式的大核心是
0x100000
,對於zimage
格式的是
0x1000
)的核心引導**,
bootloader
過程結束; 9
、bootloader
跳轉到0x100000,
此處為"arch/i386/init/head.s"
中的startup_32
,startup_32
的**只需要設定一下全域性變數,然後就跳轉到
start_kernel
去了;start_kernel()
是"init/main.c"
中的asmlinkage
函式,至此,啟動過程轉入體系結構無關的通用
c**中; 10
、start_kernel()
中設定與體系結構相關的環境、頁表結構初始化、
trap/irq
初始化、核心程序排程器初始化、時間
/定時器初始化、控制台初始化、核心
cache
初始化、記憶體初始化、內部及通用等各種
cache
初始化、訊號量初始化、其他部分初始化
(init()
及smp_init());
11、啟動
init()
過程,建立第乙個程序;
init()
中,取得
run-level
資訊,
執行/etc/rc.d/rc.sysinit
指令碼,
啟用核心的外掛程式式模組
(/etc/modules.conf),
然後init
執行run-level
的各個指令碼
, 接著執行
/etc/rc.d/rc.local
指令碼,
最後執行
/bin/login 程式
, 登入之後開始以
shell
控管主機; 12
、啟動完成。
Linux啟動過程分析
boot loader 當cpu一上電,此時cpu必須從nor flash或者nand flash中取指令 直接從 nand flash取指令的ap為支援nand 啟動 nand boot 其實原理就是ap 內部的rom裡有一小段 包括nand flash驅動,它啟動從nand flash中讀取一段...
Linux 啟動過程分析
runlevel 命令 可以檢視當前的執行級別 linux 系統啟動過程如下 1 bios自檢 2 啟動grub lilo 3 執行linux 核心並檢測硬體 4 執行系統的第乙個程序init 5 init 讀取到系統引導配置檔案 etc inittab中的資訊進行初始化 6 etc rc.d rc...
Android啟動過程分析 1
從系統的角度看,android的啟動過程可以分為bootloader引導 裝載和啟動linux核心,啟動andorid系統的3個大的階段。其中android系統的啟動還可以細分為啟動init程序,啟動zygote,啟動sytemserver,啟動各項服務等多個階段。1 bootloader的引導 b...