娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

【嵌入式開發】 Bootloader 詳解 ( 代碼環境 | ARM 啟動流程 | uboot 工作流程 | 架構設計)

發布者:科技創造者最新更新時間:2025-02-08 來源: cnblogs關鍵字:嵌入式開發  Bootloader  ARM  啟動流程  uboot 手機看文章 掃描二維碼
隨時隨地手機看文章

一. Bootloader 簡介

1. Bootloader 簡介


Bootloader 作用 : 啟動系統時將 Kernel 帶入到內存中, 之后 Bootloader 就沒有用處了;

-- Bootloader 在 Linux 系統中的層次 : Bootloader --> Boot parameters --> Kernel --> root filesystems;

-- 最常用的 bootloader : uboot 是 bootloader 中最優秀的;


uboot 簡介 : 

-- 支持 CPU : MIPS, x86, ARM 等;

-- 引導的系統 : Linux, Android, VxWorks, QNX;


uboot 模式 :

-- 自主模式 : 如果開機, 我們什么操作都不做就是自主模式;

-- 開發模式 : 開機后立刻按下 空格鍵, 會進入 uboot 的命令行模式, 即開發模式;


2. 使用 Source Insight 閱讀 uboot 源碼


Source Insight 使用流程 : 

-- 創建工程 : '菜單欄' --> 'Project' --> New Project 彈出下面的對話框, 在對話框中輸入代碼的保存路徑 和 工程名;


-- 每個工程有自己的文件 : 點擊 OK 后, 在下面的對話框選擇第一個選項, 其它默認;


-- 彈出選擇源碼界面 : 這里現在這里暫停下, 也可以關掉, 從 '菜單' --> 'Project' --> 'Add and Remove Project Files';


-- 解壓 uboot 源碼 : 使用 Samba 文件共享, 將 uboot 源碼在 linux 目錄下解壓, 由于編碼和文件系統特性, 在 windows 目錄下解壓會出錯, 通過 直接在 Samba 用戶目錄下解壓;

[root@localhost arm]# cd /home/samba/
[root@localhost samba]# ls
ARM-tools  uboot.tar.gz
[root@localhost samba]# 
[root@localhost samba]# 
[root@localhost samba]# tar -xvzf uboot.tar.gz 
uboot/
uboot/README

... ...

-- 映射網絡驅動器 : 復制 Samba 中存放 uboot 源碼的共享文件路徑為 '\192.168.0.111sambauboot',  打開 '我的電腦', 選擇 '計算機' 菜單;



-- 添加映射地址 : 在映射網絡驅動器對話框中, 填入 Samba 目錄;


-- 生成了一個 Z 盤 : 


-- 導入代碼 : 選擇 '菜單' --> 'Project' --> 'Add and Remove Project Files', 在彈出的對話框中選中 uboot 目錄, 并進入其跟目錄, 選擇 右側 'Add all' 按鈕, 在彈出的對話框中選擇兩個選項都選擇, 以便其子目錄中的文件也能被加載進入;


-- 查看加載完成的工程 : 發現沒有 .S 匯編文件;


-- 加載匯編文件 : 選擇  '菜單' --> 'Options' --> 'Document Options', 在 C Source File 中選擇 *.s;*.S, 結果為 '*.c;*.h;*.s;*.S';


-- 繼續添加工程文件 : 選擇 '菜單' --> 'Project' --> 'Add and Remove Project file';


-- 此時匯編文件出現了 : 







二. ARM 處理器啟動流程 (啟動方式 | 內存映射 | 啟動流程)





1. S3C2440 芯片啟動流程



(1) S3C2440 啟動方式



2440 啟動方式 : 

-- Nor Flash : Nor Flash 大小只有 2M;

-- Nand Flash : Nand Flash 大小 256M;



(2) S3C2440 內存映射




內存映射 : S3C2440 文檔, Page 221, 第六章 Nand Flash Memory Mapping, 也可以搜索 Mapping 關鍵詞;

-- 左圖 : Nor Flash 啟動地址映射;

-- 右圖 : Nand Flash 啟動地址映射;





(3) S3C2440 啟動流程


Nor Flash 指令加載 :  CPU 上電 讀取指令 : 從 0x0 地址讀取指令;


Nand Flash 指令加載 : 

-- 啟動 0 地址 : Nand Flash 不能被直接訪問到, 沒有參與 ARM 的編址, BootSRAM 是片內的 RAM;

-- BootRAM 簡介 : BootSRAM 又名 Setpping stone (墊腳石), Bootloader 最前端 4K 自動復制到 BootRAM, 剩下的 復制到 內存中, 4K 的代碼運行完之后會跳轉到內存繼續執行剩下的代碼;

-- 內存地址 : 在下面的 Nand Flash Memory Mapping 圖中, s3c2440 芯片內存起始地址是 0x3000_0000;

-- 文檔參考 : Page 213, 章節6 Nand Flash Contorller;


OVERVIEW
In recent times, NOR flash memory gets high in price while an SDRAM and a NAND flash memory is comparatively
economical , motivating some users to execute the boot code on a NAND flash and execute the main code on an
SDRAM.
S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash boot
loader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4
KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstone
will be executed.
Generally, the boot code will copy NAND flash content to SDRAM. Using hardware ECC, the NAND flash data
validity will be checked. Upon the completion of the copy, the main program will be executed on the SDRAM.




2. S3C6410 芯片啟動流程




(1) S3C6410 啟動方式




s3c6410 啟動方式介紹 : 

-- SROM 啟動 : 即 Nor Flash 啟動, 6410 也支持 Nor Flash 啟動;

-- OneNand 啟動 : 特殊的 Nand Flash, 同時具有 Nor Flash 和 Nand Flash 的特性;

-- MODEM 啟動 :  詳情參考文檔;

-- IROM 啟動 : IROM 是處理器內部的組件, 該啟動方式包括 SD 卡啟動 和 Nand Flash 啟動;

-- 啟動方式文檔 : S3C6410X 文檔, 搜索關鍵詞 booting, Page 123, 3.3.3 章節;



(2) S3C6410 地址映射



啟動設備地址布局 :

-- IROM (Internal ROM) : 0x0800_000 地址, 64M; 

-- Stepping Stone (Boot Loader) : 0x0C00_0000 地址, 64M;  

-- 地址布局文檔 :  S3C6410X 文檔, Page 116, 2.2 章節, Device Specific Address Space 圖表 設備特殊地址空間; 



0 地址映射介紹 : 

-- 鏡像區域 : Booting Device Region by XOM Setting (XOM設置的引導設備區域), 根據不同的啟動設置, 將對應的啟動設備映射到該區域;

-- IROM 啟動 : 會將 IROM 映射到該鏡像區域;

-- Nor Flash 啟動 : 將 Nor Flash 映射到該鏡像區域;

-- 文檔參考 : 從上面的文檔截圖 : 





(3) S3C6410 啟動流程



啟動流程 : S3C6410_Internal_ROM_Booting 文檔, Page 6, 2.1 章節;

-- 1. IROM 初始化 : IROM 中固化了軟件, 稱為 bootloader0, 是 0階段的 bootloader, 該 BL0 執行 初始化時鐘, D-TCM, 設備特殊控制器, 引導設備; 

-- 2. 加載 BL1 : 加載 BL1 到 Stepping Stone (墊腳石), 將放在 nand flash 中的 bootloader1 (即 Bootloader 最前面的 8K) 拷貝到 Stepping Stone 中; 

-- 3. 執行 BL1 : BL1 初始化系統時鐘, UART, SDRAM, Stepping Stone 執行完 8K Bootloader 后, 將剩余的 bootloader (BL2) 拷貝到 SDRAM 中運行;

-- 4. 執行 BL2 : 跳轉到 SDRAM 中執行 BL2, 加載內核;

-- 對比 2440 : 上電后 6410 先運行 IROM 中的代碼, 不是先運行 Bootloader;

-- 文檔參考 : 





3. S5PV210 芯片啟動流程




(1) S5PV210啟動方式



S5PV210 啟動方式簡介 : 

-- IROM 啟動方式 : 包括 Nand Flash 啟動, SD 卡啟動;

-- First boot URAT --> USB 啟動方式 : USB , 串口等啟動方式;

-- 文檔位置 : S5PV210_UM_REV1.1 文檔, Page 523, 6.2.4 章節;







(2) S5PV210地址映射



S5PV210 地址映射 : 

-- IROM : 首地址 0xD000_0000, 大小 64KB;

-- IRAM : 這是 Stepping Stone (墊腳石), 首地址 0xD002_0000, 大小 96KB;

-- 零地址 : Boot area, 是一個映射區域, 與啟動模式(boot model)相關. 該地址不固定于某一個設備, 如果使用 IRAM 啟動, 就會將 IRAM 地址映射到 零地址處;

-- 內存 : 內存 首地址 0x2000_0000, DRAM0 位置;

-- 文檔位置 : Page 30, 2.1.1 章節, Device Specific Address Space 表;





(3) S5PV210啟動過程




名詞解釋 : 

-- IROM : 引導區域, 該區域的鏡像取決與啟動模式, 根據啟動模式裝載不用的設備映像到該 IROM 區域;

-- I-SRAM | SRAM : 這里的 SRAM 是 Stepping Stone (墊腳石), 用于存放拷貝的 bootloader 第一 和 第二階段的代碼;

-- BL1 : bootloader 第一階段; 

-- BL2 : bootloader 第二階段;

-- SDRAM Controller : 內存控制器;

-- SDRAM | DRAM : 內存;


S5PV210 啟動過程 : 

-- 1. IROM 初始化 : 初始化系統時鐘, 初始化設備特別控制器, 引導設備;

-- 2. 裝載 BL1 : 將 BL1 (16KB) 拷貝到 IRAM (Strpping Stone 96KB 明顯比arm11 要大) 中, IROM 會在安全引導模式下驗證 BL1 完整性;

-- 3. 執行 BL1 : 將 BL2 (80KB) 拷貝到 I-SRAM (Internal 內部 SRAM ) 中, BL1 會在安全引導模式下驗證 BL2 完整性;

-- 4. 執行 BL2 : 初始化內存控制器, 如果 Stepping Stone 還不夠, 那么就將剩余的拷貝到 SDRAM(內存) 中, 然后裝載操作系統到內存中;

-- 5. 執行操作系統 : 跳轉到內存中, 執行 剩余的 BL 或者 執行操作系統代碼;

-- 參考文檔 : S5PV210_iROM_ApplicationNote_Preliminary_20091126 文檔, Page 7, 2.1 章節, Operating Sequence 圖;





作者 : 韓曙亮

博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795

轉載請著名出處


相關資源下載 : 

-- u-boot 源碼 : http://download.csdn.net/detail/han1202012/8342761

-- S3C2440 文檔 : http://download.csdn.net/detail/han1202012/8342701

-- S5PV210_iROM_ApplicationNote_Preliminary_20091126 文檔 : http://download.csdn.net/detail/han1202012/8342709

-- S3C6410_Internal_ROM_Bootin 文檔 : http://download.csdn.net/detail/han1202012/8342725

-- S3C6410X 文檔 : http://download.csdn.net/detail/han1202012/8342731

-- S5PV210_UM_REV1.1 文檔 : http://download.csdn.net/detail/han1202012/8342745





三. U-Boot 工作流程詳解






1. S3C2440 芯片的 U-Boot 工作流程




(1) S3C2440 BL 程序入口


S3C2440 uboot 入口分析 : 

-- Makefile 分析 : 查看uboot 源碼根目錄下的 Makefile 文件, 可以找到下面的內容 : 

smdk2440_config	:	unconfig
	@$(MKCONFIG) $(@:_config=) arm s3c24xx smdk2440 samsung s3c2440

-- 2440 開發板相關配置 : 第二行的第三項 'smdk2440' 是開發板相關的配置目錄;


-- 2440 開發板相關文件 : 與該芯片對應的各種硬件相關文件在 boardsamsungsmdk2440 目錄, 下面是目錄內容;

[root@localhost uboot]# cd board/samsung/smdk2440/
[root@localhost smdk2440]# ls
config.mk  libsmdk2440.a    Makefile    smdk2440_val.h
flash.c    lowlevel_init.o  smdk2440.c  u-boot.lds
flash.o    lowlevel_init.S  smdk2440.o


-- u-boot.lds 鏈接器腳本內容 : 分析 'cpu/s3c24xx/start.o (.text)' 內容, 可以知道 cpu/s3c24xx/start.o 是程序入口;

OUTPUT_FORMAT('elf32-littlearm', 'elf32-littlearm', 'elf32-littlearm')
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
	. = 0x00000000;
	. = ALIGN(4);
	.text      :
	{
	  cpu/s3c24xx/start.o	(.text)
	  cpu/s3c24xx/s3c2440/cpu_init.o	(.text)
	  *(.text)
	}
	. = ALIGN(4);
	.rodata : { *(.rodata) }
	. = ALIGN(4);
	.data : { *(.data) }
	. = ALIGN(4);
	.got : { *(.got) }

	. = .;
	__u_boot_cmd_start = .;
	.u_boot_cmd : { *(.u_boot_cmd) }
	__u_boot_cmd_end = .;

	. = ALIGN(4);
	.mmudata : { *(.mmudata) }

	. = ALIGN(4);
	__bss_start = .;
	.bss : { *(.bss) }
	_end = .;
}

-- 找到 start.o 對應文件 : start.S 是對應的文件, 在上面的 u-boot.lds 鏈接器腳本中有 'ENTRY(_start)' 說明 _start 是程序入口, 下面是 start.S 中_start 程序入口代碼;


/*
 *************************************************************************
 *
 * Jump vector table as in table 3.1 in [1]
 *
 *************************************************************************
 */


.globl _start
_start:
	b	reset
	ldr	pc, _undefined_instruction
	ldr	pc, _software_interrupt
	ldr	pc, _prefetch_abort
	ldr	pc, _data_abort
	ldr	pc, _not_used
	ldr	pc, _irq
	ldr	pc, _fiq

_undefined_instruction:
	.word undefined_instruction
_software_interrupt:
	.word software_interrupt
_prefetch_abort:
	.word prefetch_abort
_data_abort:
	.word data_abort
_not_used:
	.word not_used
_irq:
	.word irq
_fiq:
	.word fiq

	.balignl 16,0xdeadbeef


[1] [2] [3] [4]
關鍵字:嵌入式開發  Bootloader  ARM  啟動流程  uboot 引用地址:【嵌入式開發】 Bootloader 詳解 ( 代碼環境 | ARM 啟動流程 | uboot 工作流程 | 架構設計)

上一篇:分區表--多中文件系統的混搭燒錄
下一篇:驅動對應用的異步通知機制

推薦閱讀最新更新時間:2025-04-17 11:53

Part4_lesson2---ARM處理器這個硬件啟動流程分析
1、啟動方式 s3c2440:可以從Nor flash啟動,Nor flash一般是2MB;也可以從Nandflash啟動,它一般是256MB,我們習慣上把我們的uboot,內核以及文件系統都放到Nandflash里面去,選擇開發板從nandflash啟動。 當2440從nandflash啟動的時候,其地址布局是怎樣的呢? 打開芯片手冊 當處理器上電之后,它會從哪兒去取它的第一條指令呢,會從0地址處去取它的第一條指令。如果說是從nor flash來啟動,0地址處應該安排我們的nor flash,然后編寫的代碼應該放在nor flash的最前端,否則cpu去取指令會取不到。如果說從nandflash啟動的話,上圖右面看不到na
[單片機]
Part4_lesson2---<font color='red'>ARM</font>處理器這個硬件<font color='red'>啟動</font><font color='red'>流程</font>分析
柳暗花明:淺談嵌入式ARM開發的前世今生
  在這個科技高度發達的今天,相信很多在校學生停留在51單片機上的種種應用開發,做一個小玩意,獲得個好名次,這在無形中增加了對單片機的理解和認識,對以后的工作奠定雄厚的基礎:匯編語言的使用,可以讓你在ARM Bootloader的開發上如魚得水;各種外圍器件的使用,可以讓你在應用開發中如沐春風。但是,如果僅僅停留在這個階段,或者說停留在低端單片機的開發應用上,拿到手的 金子 也有限,這就需要你踏入更加廣闊的電子領域---嵌入式開發?,F在最流行的是 ARM+Linux 構架,如果在這條路上你走的比較遠,那么,這對你的生活質量的提高也大有幫助。   由于 ARM+Linux 構架的嵌入式開發范圍很廣,如果想全部掌握,需要懂Linux使
[單片機]
柳暗花明:淺談<font color='red'>嵌入式</font><font color='red'>ARM</font><font color='red'>開發</font>的前世今生
ARM嵌入式系統開發之發送過程的實現
要通過網卡發送數據時,上層協議實體調用函數 hard_start_xmit() ,在我們的驅動程序中這個函數被映射成 DM9000_wait_to_send_packet() 函數,正如它名字中 wait 所表示的那樣,這個函數只完成了等待發送的工作,實際的發送是調用 DM9000_hardware_send_packet() 函數完成的,這也是前面提到的 buffer 分配機制的一種體現。 在具體介紹這兩個函數之前,有必要簡單說一說 DM9000 芯片發送數據的工作原理。前面已經講過,為了增加網絡吞吐量 DM9000 芯片內部集成了 8K 的 buffer ,芯片對這些 buffer 采用了內存頁面管理方式,每頁 256
[嵌入式]
uboot重定位代碼分析
概述 重定位(relocate)代碼將BootLoader自身由Flash復制到SDRAM,以便跳轉到SDRAM執行。之所以需要進行重定位是因為在Flash中執行速度比較慢,而系統復位后總是從0x00000000地址取指。 重定位代碼,位于/U-Boot/cpu/s3c44b0/start.S : relocate: adr r0, _start ldr r1, _TEXT_BASE cmp r0, r1 beq stack_setup ldr r2, _armboot_start ldr r3, _bss_start sub r2, r3, r2 a
[單片機]
3.3.Uboot的使用
解壓uboot的壓縮包得到uboot的工程文件uboot,進入uboot,打開Makefile文件,搜索自己的開發板的類型。我的是OK6410 256的。 然后執行配置文件: 接著執行一下的命令進行編譯: 編譯完成的截圖: 完成之后,我們會在我們的uboot的目錄看待生成uboot.bin文件,這就是要燒寫到開發板的映像文件。 燒寫uboot.bin 到OK6410開發板 首先燒寫我們的輔助安裝程序mmc_256.bin到SD卡。設置開發板從SD卡啟動。在啟動的瞬間按住空格進入選擇菜單。 首先是選擇1,格式化我們的Nand flash。 接著選3,Burn image from USB. 接著選擇
[單片機]
3.3.<font color='red'>Uboot</font>的使用
記錄ok6410 jlink 命令行調試uboot
1啟動ok6410 進入uboot命令行 2\啟動JLinkGDBServer -device ARM11 3arm-none-eabi-gdb u-boot 初始化腳本 # Connect to the J-Link GDBServer target remote localhost:2331 # Set JTAG speed to 30 kHz monitor endian little monitor speed 30 # Reset the target monitor reset monitor sleep 10 # # CPU core initialization # # Set the processor to s
[單片機]
嵌入式開發學習(10)<匯編寫啟動代碼之設置棧、調用c語言、開關看門狗和開關iCache>
C語言運行時需要和棧的意義: “C語言運行時(runtime)”需要一定的條件,這些條件由匯編來提供。C語言運行時主要是需要棧 C語言與棧的關系:C語言中的局部變量都是用棧來實現的。如果我們匯編部分沒有給C部分預先設置合理合法的棧地址,那么C代碼中定義的局部變量就會落空,整個程序就死掉了。 我們平時在編寫單片機程序(譬如51單片機)或者編寫應用程序時并沒有去設置棧,但是C程序還是可以運行的。原因是:在單片機中由硬件初始化時提供了一個默認可用的棧,在應用程序中我們編寫的C程序其實并不是全部,編譯器(gcc)在鏈接的時候會幫我們自動添加一個頭,這個頭就是一段引導我們的C程序能夠執行的一段匯編實現的代碼,這個代碼中就幫我們的C程序設
[單片機]
<font color='red'>嵌入式</font><font color='red'>開發</font>學習(10)<匯編寫<font color='red'>啟動</font>代碼之設置棧、調用c語言、開關看門狗和開關iCache>
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 增城市| 临澧县| 泽普县| 凌源市| 木里| 沾化县| 汉沽区| 邓州市| 陵水| 苍山县| 淮安市| 乌苏市| 庄河市| 瑞丽市| 安溪县| 宜宾县| 淮安市| 秭归县| 巴青县| 伊金霍洛旗| 贞丰县| 图木舒克市| 禹城市| 赣州市| 中牟县| 武穴市| 安溪县| 铁岭市| 汤原县| 衢州市| 五台县| 鄂托克前旗| 廉江市| 湘乡市| 桐庐县| 阜南县| 凌海市| 塘沽区| 剑川县| 屯昌县| 益阳市|