在这里移植的uboot源码是三星官方提供的

1:移植前准备:

  下载并解压uboot源代码,并创建Source Insight工程,注意linux源代码不能在

共享文件中直接解压,原因是linux中采用了很多链接功能,而这个功能在windows

里面是没有的,所以在共享文件夹中编译会出错,解压代码

tar -jxvf name

2:查看Makefile

  在编译之前要看Makefile中的交叉编译工具链的设置是否和我们虚拟机中交叉编译工具链的配置相同(主要是安装路径和版本)

ifeq ($(ARCH),arm)
#CROSS_COMPILE = arm-linux-
#CROSS_COMPILE = /usr/local/arm/4.4.1-eabi-cortex-a8/usr/bin/arm-linux-
#CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
endif

3:编译、烧录

  使用make smdkv210single_config,对应include/configs/smdkv210single.h头文件

运行的现象为:SD checksun Error,开发板供电锁存开启


分析:

(1)打印的第一个SD CHECKSUM ERROR可以理解,因为那是SD0通道的iNand校验失败,

(2)开发板供电锁存是在uboot启动的第一阶段的lowlevel_init.S中完成的,开发板供电锁存但没有打印OK说明错误发生在开发板供电锁存与DDR初始化之间,分析可知开发板是没有PMIC(电源管理模块)的,所以当uboot跳转到PMIC_InitIp这个函数时就会发生死循环,所以这行代码应该屏蔽掉

//bl PMIC_InitIp

4: uboot成功启动,并打印出如下信息

SD checksum Error
OK

U-Boot 1.3.4 (Aug  5 2016 - 15:08:57) for SMDKV210

CPU:  S5PV210@1000MHz(OK)
APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz
MPLL = 667MHz, EPLL = 80MHz
HclkDsys = 166MHz, PclkDsys = 83MHz
HclkPsys = 133MHz, PclkPsys = 66MHz
SCLKA2M  = 200MHz
Serial = CLKUART
Board:   SMDKV210
DRAM:     1 GB
Flash:   8 MB
SD/MMC:  unrecognised EXT_CSD structure version 6
unrecognised EXT_CSD structure version 6
Card init fail!
0 MB
NAND:    0 MB
The input address don't need a virtual-to-physical translation : 23e9c008
*** Warning - using default environment

In:      serial
Out:     serial
Err:     serial
checking mode for fastboot ...
Hit any key to stop autoboot:  0

no devices available

no devices available
get_format
-------- 0 --------
Wrong Image Format for bootm command
ERROR: can't get kernel p_w_picpath!
SMDKV210 #

至此说明uboot已经成功启动,只是uboot启动第二阶段的配置有不正确,需要进一步修改