Linux啟動過程

2021-05-22 18:00:15 字數 4176 閱讀 5713

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 。

6init

啟動

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的時間也不算短了,一直都是直接使用...