Linux啟動分析(1) 總體過程

2021-06-15 21:32:00 字數 2412 閱讀 7135

一、系統引導過程總體介紹

啟動流程圖:

系統引導過程主要由以下幾個步驟組成(以硬碟啟動為例) 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...