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