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