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......)

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值