(
1)開啟
pc電源
pc加電後,乙個特殊的硬體電路會觸發
cpu 的
reset
腳的邏輯值,然後一些
cpu 暫存器,如
cs ,
eip 等被給定乙個值,接著
cpu 跳轉到乙個固定位址開始執行**(
bios
); (
2)
bios
自檢,按設定的裝置啟動
bios
對硬體進行一系列徹底的檢查,如
cpu 型別、速度、快取等,主機板型別,記憶體速度、容量,硬碟大小、型別和工作模式,風扇速度等。
bios
完成自檢後,查詢乙個可以引導的作業系統,並檢視使用者配置的啟動裝置(軟盤、硬碟或者光碟啟動)。發現合法的裝置後(讀取
cmos
中的引導裝置資訊),
bios
就會把其第一扇區的內容(
mbr )複製到記憶體中。然後跳至剛載入的位址並執行之。
(
3)啟動裝置上安裝的引導程式
lilo
或
grub
在linux
啟動中,當
bios
發現是由硬碟引導系統後,就找到此硬碟的
mbr ,將
mbr 中儲存的引導程式載入到記憶體中,然後將
cpu 的控制權交給
mbr 中的這段**。
mbr 中的內容可分為三部分:
1 )真正的可執行**,即
bootloader
**部分;
2 )乙個
64 位元組的分割槽表,包含四個分割槽記錄;
3 )結束識別符號(
0xaa55
),用來做
mbr 的有效性檢測。
bootloader
開始執行,它主要有
lilo
,grub 。
(
4)引導
linux
核心映像
bootloader
查詢分割槽表中的活動分割槽(包含了真正分割槽的資訊),通過這個資訊找到真正的分割槽,然後從這個分割槽將
linux
核心載入到記憶體,並
initrd
檔案系統到記憶體中。獲得
cpu 控制權的核心開始執行:
1 )核心資料結構初始化
-- start_kernel()
函式,呼叫一系列初始化函式,完成
kernel
本身的設定,在其最後,通過呼叫
init
()函式,系統建立第乙個核心執行緒,啟動
init
過程;2 )外設初始化—
init()
函式,首先呼叫
do_basic_setup()
完成外設及其驅動程式的載入和初始化,檔案系統初始化和
root
檔案系統的安裝;3 )
do_basic_setup()
函式返回
init()
後,init()
開啟/dev/console
裝置,重定
stdin
、stdout
、stderr
到控制台;
4 )最後,搜尋檔案系統中的
init
程式(或者由
init=
命令列引數指定的程式),並使用
execve()
系統呼叫
載入執行
init
程式。到此
init()
函式結束,核心的引導部分也到此結束了。
(
5)執行init
程式
init
程式呼叫
rc.sysinit
和rc的等程式,完成系統初始化和執行服務後返回
init
。init
程式執行的內容可以在
/etc/inittab
檔案中定義。 a
.init
呼叫執行指令碼檔案
/etc/rc.d/rc.sysinit
,用來完成一些系統初始化的工作。包括:掛載程序檔案系統
proc
、設定電腦名稱和系統的時間、定義鍵盤、啟用
swap
分割槽、檢查根目錄
(/) 有沒有問題,並且掛載成可讀可寫的狀態、設定系統的時間、載入一些其他的裝置,如
raid
和lvm
等。當rc.sysinit
程式執行完畢後,返回
init
繼續下一步。 b
.在rc.sysinit
執行後,通常接下來會執行到
/etc/rc.d/rc程式
,用來決定啟用哪些服務。守護程序啟動完成後,
rc 程式也就執行完了,然後又將返回
init
繼續下一步。 c
.這時,基本系統環境已經設定好了,各種守護程序也已經啟動了。
init
接下來會開啟
6 個終端,以便使用者登入系統。通過按
alt+fn(n
對應1-6)
可以在這
6 個終端中切換。在
inittab
中的以下
6 行就是定義了
6 個終端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
在2 、3
、4 、5
的執行級別中都將以
respawn
方式執行
mingetty 。
(
6)init
啟動
mingetty
,開啟終端供使用者登入系統
mingetty
是getty
的簡化,
getty
的功能一般包括:
1 )開啟終端線,並設定模式;
2 )輸出登入介面及提示,接受使用者名稱的輸入;
3 )以該使用者名稱作為
login
的引數,載入
login
程式。(
7)使用者成功登入,進入
shell
,完成整個啟動過程。a
.login
程式判斷
getty
傳來的使用者名稱,如果是
root
,則在/etc/securetty
中指定的
tty 列表登入,否則失敗;如果不是,檢視是否存在
/etc/nologin
檔案,存在則終止登入過程,不存在表示可以登入。 b
.分析完使用者名稱後,
login
搜素/etc/passwd
及/etc/shadow
來驗證密碼。 c
.成功登入後,檢查是否需要輸出上次登入資訊和提示郵件,然後設定
shell
的uid
、gid
和相應的環境變數。 d
.一切就緒後,為使用者啟動
shell
,如果沒有設定,則預設是
/bin/bash
,工作目錄預設是「
/ 」。
julia
Linux 啟動過程
fae 將porting 好的linux 提供,幾乎都在寫應用 空閒時間整理一下 b1202 系統啟動的過程 通過 boot vm 進行啟動 vmlinuz init 程序會讀取 etc inittab etc inittab 先 etc rc.d rc.sysinit 再 etc rc.d rc3...
Linux啟動過程
1.加電時由硬體將bios載入到記憶體末尾.這時是實模式,定址空間為1m.2.由硬體將cs段暫存器強制設定為0xffff,ip指令暫存器設定為0x0000.這樣cs ip指向了oxffff0的位址位置.這個位置就是bios程式的入口位址.3.執行bios程式.在記憶體起始位址0x00000設定1k大...
Linux啟動過程
linux啟動過程 前言 linux是一種自由和開放源 的類unix作業系統。該作業系統的核心由林納斯 托瓦茲在1991年10月5日首次發布。在加上使用者空間的應用程式之後,成為linux作業系統。linux是自由軟體和開放源 軟體發展中最著名的例子。接觸linux的時間也不算短了,一直都是直接使用...