歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux之Bootloader了解概念和啟動過程

Linux之Bootloader了解概念和啟動過程

日期:2017/3/1 10:22:12   编辑:Linux編程

Bootloader,簡而言之就是:它是一段小程序,在系統上電時開始執行,主要功能是初始化硬件設備、准備好軟件環境,最後調用操作系統內核。

Bootloader種類比較多,常見的X86上的有LILO,GRUB,ARM架構上比較有名的是U-boot,VIVI. 還有其他的RedBoot / Etherboot等

啟動Bootloader指令地址(ARM結構的cpu一般放在0x0000000地址處,而MIPS結構的CPU一般放在0xBFC00000)

Bootloader常見兩種操作模式:1。啟動加載模式(沒用戶介入) 2.下載模式(用戶命令操作)

Bootloader中典型分區結構圖:

*Bootloader上電後第一個程序。

*Boot parameters分區中一般存放一些可設置的參數,比如IP地址、串口波特率,要傳遞給內核的命令行參數。

*kernel,嵌入式板定制的內核,包含內核啟動參數

*Root filesystem文件系統,裡面包含了linux能夠運行的應用程序,和相關庫等。

@Bootloader的兩個階段了解

1.第一階段(使用匯編語言實現,依賴於cpu體系結構的初始化)

。硬件初始化(看門狗、RAM初始化等)

。為加載Bootloader的第二階段代碼准備RAM空間

。復制Bootloader的第二階段代碼到RAM空間中

。設置好棧

。調轉到第二階段代碼的入口點

2.第二階段(通常C語言實現,好處可讀性和移植性)

。初始化本階段要用到的硬件設備

。檢測系統內存映射(memory map)

。將內核映像和根文件系統系統映像從Flash讀到RAM內存中

。為內核設置啟動參數

@Bootloader與內核交互

Bootloader和內核交互是單向的,因為它們啟動有先後。

Bootloader傳遞參數給內核,有書說明:linux2.4.x後都是以數據結構:標記列表形式來傳遞啟動參數。

標記的數據結構為tag,由tag_header結構和 一個聯合union組成。如下:

  1. struct tag_header {
  2. __u32 size;
  3. __u32 tag;
  4. ;
  1. struct tag_mem32 {
  2. __u32 size;
  3. __u32 start; /* physical start address */
  4. };
  1. struct tag {
  2. struct tag_header hdr;
  3. union {
  4. struct tag_core core;
  5. struct tag_mem32 mem; //內存標記
  6. struct tag_videotext videotext;
  7. struct tag_ramdisk ramdisk;
  8. struct tag_initrd initrd;
  9. struct tag_serialnr serialnr;
  10. struct tag_revision revision;
  11. struct tag_videolfb videolfb;
  12. struct tag_cmdline cmdline;
  13. /*
  14. * Acorn specific
  15. */
  16. struct tag_acorn acorn;
  17. /*
  18. * DC21285 specific
  19. */
  20. struct tag_memclk memclk;
  21. } u;
  22. };
Copyright © Linux教程網 All Rights Reserved