1. 程式人生 > >嵌入還開發U-boot框架完整分析

嵌入還開發U-boot框架完整分析

經過一週的努力,終於把U-boot的框架弄清楚了,終於把這幾個地址搞清楚了,學習這些我花了很多時間,如果有人跟你講解的話,你幾分鐘就能理解過來,自己摸索有點傷不起呀。一下是自己的總結,相信你把這篇文章看了,你會對U-boot的燒寫和啟動核心,最終的是一些地址空間的瞭解有深刻的印象,在這裡我貼出來是希望大家少走彎路。

30800000:用於儲存ramdisk(相當於一個臨時的硬碟),用來掛著根檔案系統的。

CPU:三星S3C2440 主頻:400MHZ

NAND Flash : 128M/256 M 位元組  K9F2G08R0A 
記憶體:SDRAM 
start Address:0x30000000  
end Address  : 0x34000000 
size:0x4000000 =64M

從NAND FLASH 啟動:SRAM起始地址是0,size=4KB  0x1000
在NAND FLASH 啟動模式下內部的 4K Bytes BootSRam 被對映到 nGCS0 片選 的空間 。sdram被對映到 nGCS6 

下面是核心中的分割槽:


下面這個是U-boot中的分割槽情況:

在這裡我得說明下,u-boot中的分割槽只是為了方便我們寫程式碼到nand flash中,並沒有什麼實質的意義,在這裡我舉例說明下:

nand write 0 0x00020000    我們可以用nand write boot代替,就是這個意思很簡單,在u-boot中有個mtdparts命令就是方便你寫程式碼到flash中區,只是我們用了一個boot來代替那段地址。


我們燒寫U-boot的方法:

首先下載程式到到初始化SDRAM的程式碼到內部的 4K Bytes BootSRam ,NAND FLASH是不能直接燒寫的,Nor flash是可以直接燒寫的,初始化完成後,把程式燒在SDRAM中地址是0x30000000到0x34000000 去,然後再燒寫一個臨時執行的U-boot.bin檔案到0x33F80000(以後重新上電後U-boot程式還是會被複制在這個地址開始執行),這個U-boot.bin檔案特殊一點,需要去掉需要在include/configs/開發板配置檔案.h(fl2440.h)檔案中新增:#define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用來支援uboot在記憶體中
直接執行然後再利用U-boot自身的寫命令把U-boot寫到NAND FLASH,然後斷電重啟就啟動了U-boot,記住啟動U-boot還是把NAND FLASH中的程式複製到SDRAM中去執行的。
開發板中那個0x30800000是SDRAM中的地址,用於下載檔案,臨時放在SDRAM,還有通過命令或者U-boot本身功能把這個程式寫到NAND FLASH相應的地址上去。

用ADS燒寫U-boot
燒寫的是.axf映像檔案,利用映像檔案來燒寫真正U-boot到SDRAM,然後SDRAM藉助DNW自動把程式寫到NANDFLASH
 
U-boot補丁檔案的製作
cd U-boot1.1.6
patch -p1 < ../補丁檔案的路徑  1代表去掉補丁檔案裡面路徑的第一個"/"
 
 
 編譯裸機程式(包括U-boot)
 可以用ADS和Linux兩種方法編譯,用ADS編譯好用U-boot.bin然後用AXD下載帶SDRAM
 或者用Linux,就得寫連結指令碼和Makefile
 
.axf是elf格式的檔案它是有格式的,有檔案頭,裡面還有section的資訊等,不能直接燒入
需要燒入bin檔案或者hex檔案等,這些檔案是從axf轉化而來的
U-boot燒寫步驟如下:

第一先燒寫SDRAM初始化函式,
第二燒寫特殊的u-boot_SDRAM.bin;
第三燒寫u-boot.bin
u-boot_SDRAM.bin是特殊u-boot檔案需要修改如下一個地方:
需要在include/configs/開發板配置檔案.h(fl2440.h)檔案中新增:
#define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用來支援uboot在記憶體中直接執行


需要先安裝J-Link驅動,下載Setup_JLinkARM_V408l.exe,並安裝。
開啟J-Link Commander
speed 12000
loadbin d:\2440init.bin  0       //就是光碟上的初始化記憶體函式
setpc 0
g


h  
loadbin d:\FL_2440bootV5.bin 0x30000000     //用來臨時存放資料
//setpc 0x30000000      //是不能執行的,執行後會出錯,相當於初始化兩次SDRAM,資料將丟失
//g                     //在這裡只是把這個需要燒寫的程式放在這個地址空間。
                        //後面這個u-boot.bin(再次強調是個特殊u-boot) 你可以當作一個臺階,用著與燒寫真正的u-boot.bin 
 
loadbin d:\u-boot.bin 0x33f80000 //0x33f80000 是把U-boot放在SDRAM記憶體最上面的512k的空間
setpc 0x33f80000  //u-boot-2010.09\board\fl2440\config.mk檔案裡面放在把U-boot放在記憶體的那個地址空間
g                //TEXT_BASE = 0x33F80000

 這時你應該可以在串列埠看到U-boot的輸出資訊了,然後我們在U-boot命令列模式輸入NAND Flash擦除和寫入命令即可:
 我們下載程式是下載到NAND FLASH
 nand erase 0 40000  //

 nand write 30000000 0 40000  //把前面下載到0x3000000的u-boot.bin下載NAND

#define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用來支援uboot在記憶體中直接執行  忽略SDRAM的初始化

相關推薦

嵌入開發U-boot框架完整分析

經過一週的努力,終於把U-boot的框架弄清楚了,終於把這幾個地址搞清楚了,學習這些我花了很多時間,如果有人跟你講解的話,你幾分鐘就能理解過來,自己摸索有點傷不起呀。一下是自己的總結,相信你把這篇文章看了,你會對U-boot的燒寫和啟動核心,最終的是一些地址空間的瞭解有深刻

基於jquery開發的UI框架整理分析

roi black html屬性 二次 quick src 相關 分析 prim 根據調查得知,現在市場中的UI框架差不多40個左右,不知大家都習慣性的用哪個框架,現在市場中有幾款UI框架稍微的成熟一些,也是大家比較喜歡的一種UI框架,那應該是jQuery,有部分U

u-boot主makefile分析2

1.包含主目錄的config.mk # load other configuration include $(TOPDIR)/config.mk 在config.mk中主要做了哪些工作呢? 1.編譯工具定義 # # Include the make variables (CC, et

u-boot主makefile分析1

 1.u-boot版本號 VERSION = 1 PATCHLEVEL = 1 SUBLEVEL = 6 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSIO

u-boot原始碼目錄分析(以jz2440 u-boot1.1.6為例)

一、檔案的分析 arm_config.mk。字尾是.mk,是一個Makefile檔案,將來在某個Makefile中會去呼叫它。 Changelog檔案,修改記錄檔案,該檔案記錄了這個uboot專案的版本變遷以及每個版本較上個版本修改的記錄。 config.mk。和arm_

AM335x U-boot d程式碼分析過程3

    我們繼續上一篇的程式碼,已經來到s_init()(位於arch\arm\cpu\armv7\am335x\board.c),其原始碼如下: [cpp] view plain copy pr

AM335x U-boot d程式碼分析過程2

題外話     之前那一篇試水了一下,我回過頭看一下,覺得還是含水量還是太大了。這個系列的部落格的目的應該是讓讀者看完以後,對armV7 cpu的u-boot有個更加深的瞭解,也讓我把知道的東西都寫出來,加深認識,作為後期複習的工具。 原始碼分析  

AM335x U-boot d程式碼分析過程1

題外話: 經過一段時間的學習,對u-boot-2014.10有了初步的瞭解,趁著還記著,趕緊寫下來,同時將之前還模稜兩可的部分用圖表的方式加強一下。 原始碼分析 彙編部分 之前一直看的是ARM9的u-boot,

u-boot命令尋找分析--find_cmd函式

/********************************************************************************/ u-boot命令尋找分析 /**********************************

U-Boot啟動過程分析總結

做為嵌入式開發者,U-Boot的啟動是必須要熟悉的。下面分享U-Boot啟動流程。 U-Boot啟動核心的過程可以分為兩個階段,兩個階段的功能如下: 第一階段功能 硬體裝置初始化 載入U-Boot第二階段程式碼到RAM空間 設定好棧 跳轉到第二階段程式碼入口 第二階段功能 初始化本階

IMX6Q u-boot啟動流程分析

文章目錄 u-boot第一階段 中斷向量 reset復位向量程式碼 uboot第二階段 程式碼與中斷向量重定位 程式碼重定位過程 board_init_r函式 啟動Linux核心

U-boot主Makefile分析

原文:http://blog.csdn.net/qq_28992301/article/details/51802885 U-boot主Makefile分析 主Makefile位於uboot原始碼的根目錄下,其內容主要結構為:  1. 確定版本號及主機資訊

u-boot.lds檔案分析

u-boot.lds決定了u-boot可執行映像的連線方式,以及各個段的裝載地址(裝載域)和執行地址(執行域)。 GNU官方網站上對.lds檔案形式的完整描述: SECTIONS{ ... secname start BLOCK(align) (NOLOAD) : A

U-boot引導流程分析

大多數BootLoader都分為stage1和stage2兩大部分,U-boot也不例外。依賴於cpu體系結構的程式碼(如裝置初始化程式碼等)通常都放在stage1且可以用匯編語言來實現,而stage2則通常用C語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。 1、 stage1(sta

嵌入式Linux開發——(十一)u-boot原始碼分析

1、U-Boot的特性:     ①開放原始碼     ②支援多種嵌入式作業系統核心:Linux、NetBSD、VxWorks、QNx、RTEMS、ARTOS、 LynxOS     ③支援多種架構的CPU:Power

【ARM-Linux開發U-Boot啟動過程--詳細版的完全分析

----------------------------------------------------------------------------------------------------------------------------------------

基於TQ2440開發板的U-boot-1.1.6的start.S程式碼分析

start.S彙編原始檔是U-boot執行的起始程式碼檔案,也是不容易理解的實現部分。執行流程如下: .globl _start//定義_start是全域性標籤,其他檔案也可以使用。.globl是GNU彙編語法。 _start:breset//跳轉到reset標籤出執行,由

(二)U-boot開發板上移植過程詳解--bootloader架構分析

 本例中採用的同樣是前邊一貫的實驗板,這裡就不對板子資源做進一步介紹了。     我們知道,bootloader是系統上電後最初載入執行的程式碼。它提供了處理器上電覆位後最開始需要執行的初始化程式碼。在PC機上載入程式一般由BIOS開始執行,然後讀取硬碟中位於MBR(Main Boot Record,主引

分析u-boot的Makefile

選項 lin 編譯平臺 create cpp port n) ati inux   這裏分析三星s5pv210芯片官方u-boot 先看u-boot 版本號 VERSION = 1    #主版本號PATCHLEVEL = 3   #次版本號SUBLEVEL

u-boot-201611 啟動過程分析——基於smdk2410

u-bootu-boot-201611 啟動過程分析——基於smdk2410