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...