【uboot移植】基于samsung移植过的uboot(一)

准备工作

我这边获取到了三星关于其开发板smdkv210移植过的uboot源代码,当然这个代码也是三星基于uboot官方的某一版本开发的。三星出的开发板会卖给一些大代理商,因此源代码也会随之流出。

分头在windows的共享文件夹、ubuntu中各解压,便于看代码和编译,以及修改文件之后方便拷贝。

对于我们看代码来说,为了避免在SourceInsight中看到太多的重名文件,我们最好对其目录下的cpu、board文件夹下的文件进行删减。cpu下仅留下s5pc11x,board下仅留下samsung。

尝试运行

一般来说,我们使用的开发板是基于三星出的开发板的硬件基础上进行了一定的修改或裁剪。因此,我们开发板使用的uboot与Samsung使用的开发板uboot,其实很大程度上存在相似。由此,我们可以尝试直接将Samsung的uboot在我们的开发板上跑一下。

一、那既然要跑一下的话,我们先看Makefile中的交叉编译工具链(CROSS_COMPILE) 是否配置正确。ubuntu对应的目录也安装了该工具链。在这里插入图片描述
二、交叉编译工具链检查好之后,我们可以尝试编译了,uboot在编译前需要先配置,make xxx_config。但是这个uboot中并没有我们开发板相关的配置项以及配置头文件。我们开发板x210是基于三星开发板smdkv210开发的,因此找到smdkv210的配置项。有5个开发板,我们就随便选一个吧,第一个mdkv210single_config(理论上如果知道哪个与我们开发板更类似就选取哪个),mdkv210single_config对应include/configs/smdkv210single.h头文件。
在这里插入图片描述
make smdkv210single_config之后make。然后通过烧录脚本进行烧录,这里的烧录脚本中执行的两个文件sd_fdisk、mkbl1(分别是sd_fdisk.c、C110-EVT1-mkbl1.c编译而来的)是x86-64架构的,三星上传到时候没有将其clean。我们重新将这两个文件make一下,得到 Intel 80386版本的。

然后运行,运行结果是:
第一,串口无输出;
第二,开发板供电锁存成功。
那么可以得出结论:错误在开发板供电锁存代码和串口初始化打印"O"代码之间死掉了。

顺藤摸瓜找错误点

找到中间段的一些代码,通过led去找到卡死的函数为PMIC_InitIp(PMIC是电源管理芯片),因为我们开发板没有PMIC,因此这个函数内部向PMIC发送I2C接口的命令时会死循环,所以屏蔽这里之后问题解决。
在这里插入图片描述
找的问题所在点之后,把led的代码去掉,重新启动。
在这里插入图片描述
那后uboot卡在了打印“NAND:”之后,我们搜索之后锁定到了lib_arm/board.c中。结合分析调用顺序以及加打印确认(串口已经初始化了),锁定到了start_armboot函数中Board Specific这一系列的defined(CONFIG_SMDKC110)中的nand_init这个函数。
在这里插入图片描述
但是定位到这个函数之后,继续加打印定位。最后其调用关系如下:
drivers/mtd/nand/nand.c中nand_init( )
nand_init_chip( )
cpu/s5pc11x/nand.c中的board_nand_init( )

在这里插入图片描述
最后定位到了这一句,这句代码是在等待引脚的预备状态。按理说这些地方应该是不需要改动的,因此应该是前置步骤的某些配置相关出问题了。

所以分析到这就先不往下分析了,后续从前面的打印内容来查问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值