1. 程式人生 > >imx280學習之Uboot移植

imx280學習之Uboot移植

最近有兩個閘道器專案打算用飛思卡爾imx280的方案,因此買了周立功的EasyARM-imx280A開發板進行一些調研。拿到板子之後發現Uboot是2009的,核心是2.6.35的,都是比較老的版本了。網上查了一下,移植新版Uboot與kernel的移植教程寥寥無幾,好不容易google到幾個也是一筆帶過,都沒細說移植過程終於到的一些具體問題以及解決辦法。可能高手都惜墨如金吧,像我這種菜鳥就不講究那麼多了,我把移植過程中遇到的具體問題與解決辦法寫出來跟大家一起探討,當然更希望有高手出來拍磚,多指點指點。

1、準備工作

編譯器使用開發板光碟提供的:arm-fsl-linux-gnueabi-gcc(4.4.4),git clone下載最新的U-boot原始碼(2016.03)。

2、配置並編譯原始碼

配置為mx28evk_nand_defconfig,編譯後將生成的bin檔案用開發板光碟提供的imx-bootlets(10.12.01)生成 imx28_ivt_uboot.sb。

3、下載Uboot檢視執行資訊

在這裡我使用的是mxsldr下載到USB執行,下載後看列印資訊發現Boot prep正常執行,Uboot執行時BOOT:後面輸出亂碼,RAM:之後便沒了列印資訊。經過各種跟蹤列印之後發現是Boot prep沒在某個地址處給出啟動模式與記憶體大小資訊。我的解決方法是在bootlets下boot_prep/init-mx28.c中_start末尾新增如下程式碼:

/* *
* Boot info for mainline U-boot
* HC added 20160423
*  */
struct mxs_spl_data *data = (struct mxs_spl_data *)
((CONFIG_SYS_TEXT_BASE - sizeof(struct mxs_spl_data)) & ~0xf);


printf("data pointer: %X ...\r\n", data);
uint8_t bootmode = mxs_get_bootmode_index();


data->mem_dram_size = 64*1024*1024;//mxs_mem_get_size();


data->boot_mode_idx = bootmode;


printf("bootmode: %X ...\r\n", bootmode);

其中mxs_get_bootmode_index()與mxs_mem_get_size()取自Uboot/arch/arm/cpu/arm926ejs/mxs/spl_boot.c,不過mxs_mem_get_size還沒調通,先根據板子實際實體記憶體大小寫死了。

重新編譯並下載執行,經測試能正確識別USB模式與SD卡模式啟動了,也能列印正確的DRAM資訊,不過會卡在NAND初始化處,輸出資訊為:MXS NAND: DMA read error。這下慘啦,究竟是NAND驅動的問題還是DMA驅動的問題呢?

4、如何正確識別NAND Flash

經過仔細對比開發板光碟提供的Uboot 原始碼,發現官方的Uboot在mx28_evk.c裡面有段初始化nand介面GPIO的程式,參照官方原始碼,我也在mx28_evk.c裡面添加了nand介面GPIO初始化函式。再次編譯下載執行,bingo。問題解決,正確識別了Nand Flash大小。列印資訊如下:

PowerPrep start initialize power...


Configured for 5v only power source.            Battery powered operation disabled.
Apr 23 201615:17:44
FRAC 0x92925552
Wait for ddr ready 1Wait for ddr ready 1bank count is 4
power 0x00820616
Frac 0x92925552
start change cpu freq
hbus 0x00000003
cpu 0x00010001
start test memory accress
ddr2 0x40FFFF00
finish simple test
******ddr2 read write success!
finish simple test
finish boot prep,start to run ...
data pointer: 40001FF0 ...
mxs_get_bootmode_index: 00000000
bootmode: 00000000 ...
data->boot_mode_idx: 00000000,  data->mem_dram_size:67108864




U-Boot 2016.03-dirty (Apr 23 2016 - 21:46:57 +0800)


CPU:   Freescale i.MX28 rev1.2 at 454 MHz
BOOT:  USB #0
SPI:   ready
DRAM:  64 MiB
setup_gpmi_nand
setup_mmc0
setup_fec0
setup_duart
NAND:  128 MiB
MMC:   MXS MMC: 0
*** Warning - bad CRC, using default environment


Video: MXSFB: 'videomode' variable not set!
In:    serial
Out:   serial
Err:   serial
Net:   FEC0 [PRIME], FEC1
Hit any key to stop autoboot:  0

(To be continued......)

相關推薦

imx280學習Uboot移植

最近有兩個閘道器專案打算用飛思卡爾imx280的方案,因此買了周立功的EasyARM-imx280A開發板進行一些調研。拿到板子之後發現Uboot是2009的,核心是2.6.35的,都是比較老的版本了。網上查了一下,移植新版Uboot與kernel的移植教程寥寥無幾,好不容

二..linux開發uboot移植(二)——網路命令ping開發搭建使用&tftp伺服器的安裝&nfs網路伺服器的安裝

2018/01/05 19:48 - 網路命令搭建開發板uboot和虛擬機器ubuntu互相ping通記錄 1. uboot可以通過網路來傳輸檔案到開發

四.linux開發uboot移植(四)——uboot初體驗記錄

一.X210官方uboot配置編譯實踐 將整個BSP打包檔案弄到linux的源生目錄中去解壓分析,不要在windows中的共享資料夾中解壓開。( 除非

五.linux開發uboot移植(五)——uboot配置和編譯過程詳解

一.uboot主Makefile分析1 1、uboot version確定(Makefile的24-29行) Makefile程式碼部分 (1)uboo

十.linux開發uboot移植(十)——uboot原始碼分析4-uboot的命令體系

一、uboot命令體系簡介 1、uboot命令體系實現程式碼在哪裡 uboot命令體系的實現程式碼在uboot/common/cmd_xxx.c中。有若干個.c檔案和命令體系有關。(還有command.c main.c也是和命令有關的)。 uboot實

三.linux開發uboot移植(三)——.基礎shell和Makefile回顧

一.補基礎之shell 1.shell程式執行的執行有多種方法,這裡介紹三種方法: 第一種:./xx.sh,和執行二進位制可執行程式方法一樣。這樣執行shell要求shell程式必須具有可執行許可權。chmod a+x xx.sh來新增可執行許可權。 第二

國嵌視訊學習UBOOT命令

1.help:檢視當前單板所支援的命令 2.環境變數相關     a.printenv:檢視環境變數     b.setenv:新增、修改、刪除環境變數          setenv  名字  值:新增和修改          setenv  名字:刪除     c.sa

七.linux開發uboot移植(七)——uboot原始碼分析2-啟動第二階段start_armboot函式分析1

一.uboot啟動第二階段之start_armboot函式簡介 1.start_armboot函式簡介 (1)這個函式在uboot/lib_arm/board.c的第444行開始到908行結束。 (2)、即一個函式組成uboot第二階段 2、

X210v3S的BSP構建uboot移植(一)

本篇部落格記錄將uboot,kernel,rootfs及QT4.8+openCV移植到x210v3s開發板全過程,持續更新中....... 博主資訊 中文名:瘋仔 英文名:Swann Kang 座標:天津(Tianjing) 時間:2017/12/03(大三) 交流QQ:

STM32F407+STemwin學習筆記STemwin移植

byte 裸機 測試程序 AC class create temp png check 原文鏈接:http://www.cnblogs.com/NickQ/p/8748011.html 環境:keil5.20 STM32F407ZGT6 LCD(320*240) S

uboot移植啟動過程詳解2

/*******************************************************************************          uboot啟動過程之第二階段的分析(board.c的分析)

uboot移植啟動過程詳解1

/*******************************************************************************     uboot啟動過程第一階段的分析(start.s檔案) 核心:start.s的分析, 其他:

uboot移植配置編譯過程詳解4

/****************************************************************     uboot的連結指令碼:u-boot.lds     時間:2018年11月下旬  &

uboot移植配置編譯過程詳解3

/**************************************************************************************     2018.10下旬     針對三星官方為210移植過的

uboot移植配置編譯過程詳解2

/***********************************************************************************             2018.11月

從零開始uboot移植uboot2017.01(一、移植前的準備)

手邊的是一個S5PV210的開發板,想嘗試移植一個比較新的uboot 下載最新版本uboot2018. 編譯器下載 交叉編譯工具鏈的安裝 1.在/usr/local/下面建立一個arm的資料夾,把交叉編譯工具解壓到下面去。 2.為了方便今後使用,

omapl138移植uboot系列修改移植TI官方移植的Linux核心(啟動核心第二篇)

修改Linux核心原始碼     實際上,剛剛我們已經成功的啟動了TI移植過的Linux核心,但是從串列埠控制檯的現象來看,“Starting Kernel”之後什麼資訊都沒有輸出,這就需要我們在TI移植過的核心原始碼之上進行相應修改,以適合我們的639A板卡。

uboot移植config.mk的詳解

/***********************************************************************************             2018.11月         作者:劉鈺         注:以uboot\u

從零開始uboot移植uboot2017.01(七、board_init_r分析)

上一節已經分析到了uboot的board_init_r函式,並且把兩個引數傳遞給它 /* call board_init_r(gd_t *id, ulong dest_addr) */ /* gd的 地址和 當前新的uboot的起始地址傳參給board_init_

uboot移植uboot和kernel的引數傳遞

從uboot啟動核心的形式theKernel (0, machid, bd->bi_boot_params) 可以看出uboot給核心傳遞了3個引數,第1個是0,第2個是機器碼,第3個是引數列表在SDRAM的起始位置 剛好滿足一下呼叫核心的條件• R0=0。 • R1