Linux系統程式設計之啟動流程分析

2021-10-08 04:38:05 字數 2293 閱讀 1845

bootloader

boot parameters

kernel

root filesystem

「boot parameters」分割槽中存放一些可設定的引數,比如ip位址、串列埠波特率、要傳遞給核心的命令列引數等。正常啟動過程中,bootloader首先執行,然後它將核心複製到記憶體中(也有些核心可以直接在固態儲存裝置上直接執行),並且在記憶體某個固定的位址設定好要傳遞給核心的引數,最後執行核心。核心啟動之後,它會掛接(mount)根檔案系統(「root filesystem」),啟動檔案系統中的應用程式。

小知識點:kernel含義:

kernel 作業系統核心:作業系統核心是指大多數作業系統的核心部分。它由作業系統中用於管理儲存器、檔案、外設和系統資源的那些部分組成。作業系統核心通常執行程序,並提供程序間的通訊。

3.4 常用bootloader介紹

現在bootloader種類繁多,比如x86上有lilo、grub等。對於arm架構的cpu,有u-boot、vivi等。它們各有特點,下面列出linux的開發源**的bootloader及其支援的體系結構,如下圖2.2所示:

開放原始碼的

linux

引導程式

bootloader

monitor 描述

x86arm

powerpc

lilo 否

linux

磁碟引導程式 是

否 否grub 否

gnu的lilo

替代程式 是

否 否loadlin 否

從dos引導

linux 是

否 否rolo 否

從rom引導

linux

而不需要

bios 是

否 否etherboot 否

通過乙太網卡啟動

linux

系統的韌體 是

否 否linuxbios 否

完全替代

buis

的linux

引導程式 是

否 否blob 是

lart

等硬體平台的引導程式 否

是 否u-boot 是

通用引導程式 是

是 是redboot 是

基於ecos

的引導程式 是

是 是vivi 是

mizi

公司針對

samsung

的arm cpu

設計的引導程式 否

是 否四、bootloader啟動流程分析      

4.1 執行irom中固化的**程式(此**由soc生產廠商提供)(bl0)

在irom中根據以上流程圖,即關中斷和mmu,關d-cache與i-cache,失效tlb表,讓core1進入空閒,初始化棧,初始化zi,rw段,註冊函式指標,判斷啟動方式,從對應啟動裝置中載入bl1到sram中,然後對bl1進行校驗和檢測,加密校驗,解密處理,最後跳轉到bl1**執行。

4.2 bl1(bootloader1)執行

重啟初始化irq、svc模式的棧,判斷啟動裝置,然後從對應的啟動裝置中載入bl2到sram中,然後判斷是否啟動安全模式,如果是,則對bl2進行校驗,校驗通過則跳轉到bl2**中執行。

4.3 執行bl2

重新初始化irq,svc模式的棧,設定時鐘,初始化外擴的dram,判斷啟動裝置,然後從相應的啟動裝置中讀取os或fw到dram中,然後判斷是否啟動安全模式,如果是,則對bl2進行校驗,校驗通過則跳轉到os或fw**中執行。

4.4 扇區分布

4.5 三者關係

(interal rom固化**)bl0將bl1(bootloader的前16扇區-bl1)載入到iram;bl1然後在iram中執行將bl2(剩下的bootloader)載入到sdram;bl2載入核心,把os在sdram中執行起來,最終os是執行在sdram(記憶體)中的。

4.6 內部ram被出廠配置的分割槽

Linux系統程式設計之程序

程序狀態 4 5種 就緒 初始化 執行,掛起 等待 停止 pbc成員 1 程序id 2 程序狀態 3 程序切換需要儲存和恢復的cpu暫存器 4 描述虛擬位址空間資訊 5 描述控制終端的資訊 6 當前工作目錄 7 umask掩碼 8 檔案描述符 9 訊號相關的資訊 10 使用者和使用者組id 11 會...

Linux系統程式設計之shell script介紹

shell script 程式指令碼化 是乙個可以實現自動管理系統的好工具!它值得開發人員好好學習,基本上,shell script有點像是早期批處理的檔案,即將一些命令彙整起來一次執行,但是shell script擁有更強大的功能,因為它可以編寫不需要經過編譯就能執行的shell script程式...

Linux系統程式設計之檔案程式設計

目錄 一 檔案程式設計 1 linux檔案 2 檔案描述符 file descriptor 3 常用api open write read lseek close 1 open 開啟檔案函式 2 close 關閉檔案 3 write 寫檔案 4 read 讀檔案 5 lseek 游標定位 linux...