bootload啟動核心

2021-10-07 19:27:38 字數 2354 閱讀 4837

bootloader :將核心和檔案系統載入記憶體

linux 核心:linux 核心由記憶體管理、程序管理、裝置驅動程式、網路管理等組成,它是作業系統的核心,具有很多最基本的功能,決定了系統的效能和穩定性。使用者空間的檔案系統用來提供管理系統的各種配置,提供相應的應用程式、服務、資料交換等。

檔案系統: 檔案系統作為一種載體,它是用來實現使用者與作業系統核心的互動

nandflash存放位址

#define img_bootloader 0x00000000

#define img_kernel 0x00300000

#define img_rootfs 0x00700000

intmain

(void);

uart_init()

;printf

("cpu: s3c2416@%dmhz\n"

,get_armclk()

/1000000);

printf

(" fclk = %dmhz, hclk = %dmhz, pclk = %dmhz\n"

,get_fclk()

/1000000

,get_hclk()

/1000000

,get_pclk()

/1000000);

nandboot_init()

;rtc_init

(&time)

;f_mount

(&fs,"",

0);if

(downloadselect ==3)

printf

("trying to update kernel...\n");

filesize =

sd_readfiletoram

("/image/kernel.bin"

,(uint8_t *

)dram_base);if

(filesize >0)

printf

("trying to update rootfs...\n");

filesize =

nand_downloadrootfs

("/image/rootfs.bin");

if(filesize >0)

else

printf

("update is complete, you need to restart the system...\n");

while(1

);}else

if(downloadselect ==4)

//在這裡開始啟動核心

board_init()

;kernel_boot()

;printf

("linux boot failed\n");

while(1

)}//設定啟動引數

void

kernel_setupparam

(struct tag *params)

intkernel_boot

(void)}

elseif(

(*(uint32_t *

)(kernelbase+4*

9))!= linux_zimage_magic)

else

kernel_setupparam

(params)

;//載入引數

//在交出 cpu 控制權之前,bootloader 需要把 cpu 恢復成初始的環境,cpu 必須禁止

//irq 以及 fiq 中斷,處於特權模式,關閉 mmu,使無效並且寫回 dcache 資料到主存,

//禁止 dcache,推薦 icache 開啟。

irq_disable()

;//禁止中斷

kernel_cleanupbeforeboot()

; kernel =

(void(*

)(uint32_t, uint32_t, uint32_t)

)kernelbase;

//跳到核心載入的位址區別執行

//bootloader 跳轉到核心時,將傳遞三個引數給核心,對於 arm 為 r0、r1、r2 這三

//個暫存器。第乙個引數 r0 必須為 0,第二個引數 r1 為機器碼,必須與 linux 核心一致才

//能啟動,第三個引數為先前設定的核心啟動引數位址位置。跳轉到核心後,bootloader 完

//全退出,由 linux 核心全權處理。

kernel(0

, mach_type,

(uint32_t)params)

;// n開始啟動核心

return-1

;}

核心啟動分析之核心啟動

在uboot啟動核心的時候是呼叫什麼函式呢?thekernel 0,bd bi arch number,bd bi boot params 這個函式的引數第二個代表支援的單板型別 機器id 第三個是uboot傳給核心的一些引數。核心啟動分析過程 想要具體分析的話可以像分析uboot的head.s那樣...

bootload開發readme文件

read me 一 功能 1.硬體初始化 2.延時判斷載入作業系統,按任意鍵bootloader shell 3.載入作業系統 4.shell 三 檔案結構 1.led s.s 程式入口,負責硬體初始化,bootloader自搬移 2.uart0.c uart.h 串列埠驅動的實現 3.main.c...

linux 核心 核心啟動流程

cs是 段暫存器,ip是指令指標暫存器 相當於偏移位址 儲存的是 指令的位址。cs ip共同作用生成了 位址,具體演算法是cs左移4位 ip即是 位址。例如cs 0xf000,ip 0xfff0,則 位址為0xffff0.global globl 命令 global symbol global 使得...