您的位置:首页 > 其它

从零移植uboot 2017 到nuc970(第十三天)

2017-03-13 19:13 309 查看
   首先为了确定外国的spl到底是怎么实现的,做两个尝试 1.在一些默认配置中增加config_spl_build,编译

尝试 2.google相关问题。 第一个尝试:

grep -i 'config_spl_framework' -r ./configs
./configs/sama5d3xek.h:#define CONFIG_SPL_FRAMEWORK
  取sama5d3xek,执行sed -i '$i  #define CONFIG_SPL_BUILD' ./include/configs/sama5d3xek.h  此时执行
[root@localhost u-boot]# make sama5d3xek_nandflash_defconfig
#
# configuration written to .config
#
[root@localhost u-boot]# make spl/u-boot-spl.bin
include/configs/sama5d3xek.h:183:0: warning: "CONFIG_SPL_BUILD" redefined [enabled by default]
#define CONFIG_SPL_BUILD
^
  会有这个错误,之后取消这个定义发现,正常运行,生成目标,现在突然间有点晕
CC      spl/common/spl/spl.o
CC      spl/common/spl/spl_nand.o
LD      spl/common/spl/built-in.o

  这里也编译正确,也就是虽然只定义了config_spi_framework,但是确隐含着定义了config_spl_build

换句话说,我以前的判断是错误的,官方实现了,现在已经不用进行第二步确定问题了,我的认识有问题

但是从官方的里面也得到了,不应该编译链接 除了spl里面的文件。

  重新回到刚开始,现在重新整理下思路,首先只有正确的编译链接,才谈下一步问题。所以现在修改头

文件定义,实现正确的编译链接。同一个uboot会有这种差别,那么问题完全在头文件的定义上了。

   为了完全和官网默认的编译流程匹配,我对比了下编译过程,以及自己以前的记录日志,最后发现

spl/u-boot-spl: tools prepare \
$(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all

   问题处在dts/dt.dtb,现在取消CONFIG_OF_SEPARATE及CONFIG_SPL_OF_PLATDATA的定义

HOSTLD  tools/dumpimage
HOSTCC  tools/mkimage.o
HOSTLD  tools/mkimage
HOSTCC  tools/proftool
HOSTCC  tools/fdtgrep.o
HOSTLD  tools/fdtgrep
CC      spl/arch/arm/cpu/arm926ejs/cpu.o
CC      spl/arch/arm/cpu/arm926ejs/cache.o
CC      spl/arch/arm/cpu/arm926ejs/nuc970/cpu.o
CC      spl/arch/arm/cpu/arm926ejs/nuc970/reset.o
AS      spl/arch/arm/cpu/arm926ejs/nuc970/lowlevel_init.o
LD      spl/arch/arm/cpu/arm926

  获得了和官方说明一样的配置过程,如果有兴趣可以追踪dts/dt.dtb的makefile规则,它依赖与u-boot,

而u-boot就依赖主体的目标了。现在解决了一个编译流程问题,下面就解决编译成功问题,兜兜转转,又

回到前几天的时候,而且姑且有一点疑问是这样的。config_spl_build,如果在头文件定义会提示重复定义,

换句话说,有默认包含了config_spl_build的地方,我没找到,以后再解决这个问题。

   首先还是按照流程走一遍,看齐编译过程:
AS      spl/arch/arm/lib/crt0.o
.........
CC      spl/arch/arm/lib/spl.o
.........
CC      spl/common/spl/spl.o
  说明编译过程按照spl的流程走了,那么再具体修改,和调整。 首先在:
#ifdef CONFIG_SPL_BOARD_INIT
spl_board_init();
#endif

    该函数里面实现一些板级初始化,定时器时钟初始化,串口时钟初始化,nand初始化,并打印些信息现在要

头脑清晰,如何实现nand初始化,并且怎样修改。以适应自己的板子 现在有些问题,又出现了,我已经很精简

我的spl端的程序,但是就是无法达到我的预期。必须找一些调试方法,故uboot调试方法使用qemu-system-arm,

但是我的平台又没有,不太清楚,这个DEBUG方式是作为什么开发手段。刚开始一直想用串口,问题串口也没办

法达到,只能通过点灯。 点灯开发板 这个板子没有灯得外接,且要找到普通的io口,总之现在在经历调试uboot

阶段,串口不能用前只能用其他方法,比較麻煩
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: