我是靠谱客的博主 烂漫寒风,最近开发中收集的这篇文章主要介绍[IMX6Q]u-boot.bin和u-boot.imx的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

u-boot版本: v2015.04
branch: imx_v2015.04_3.14.52_1.1.0_ga

先说结论,它们的差别在于xxx.cfg文件上,里面主要保存了ddr的配置信息,供ROM读取来初始化内存!

从编译过程来了解

Makefile:

u-boot.imx: u-boot.bin $(IMX_CONFIG) FORCE
	$(call if_changed,mkimage)
IMX_CONFIG是什么?
Makefile:

IMX_CONFIG = $(CONFIG_IMX_CONFIG:"%"=%).cfgtmp

$(IMX_CONFIG): %.cfgtmp: % FORCE
	$(Q)mkdir -p $(dir $@)
	$(call if_changed_dep,cpp_cfg)
CONFIG_IMX_CONFIG是什么:
此值是在./configs/mx6qecovacsandroid_defconfig定义:(平台不同,使用的xxx.cfg也不同)

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6qecovacs/mx6qecovacs.cfg,MX6Q,ANDROID_SUPPORT"
然后被编译到了./include/config.h

./include/config.h:2:#define CONFIG_IMX_CONFIG	board/freescale/mx6qecovacs/mx6qecovacs.cfg
所以最终IMX_CONFIG的值是 mx6qecovacs.cfg.cfgtmp

如何被编译到u-boot.imx中?看 $(call if_changed,mkimage) 做了什么。
scripts/Kbuild.include:

# Execute command if command has changed or prerequisite(s) are updated.
#
if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       
	@set -e;                                                            
	$(echo-cmd) $(cmd_$(1));                                             
	printf '%sn' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
也就是说只要当发现规则的依赖有被更新了、或者编译该规则对应目标的命令行发生改变了,
它就先用$(echo-cmd) 回显出新的命令$(cmd_$(1)),接着执行命令$(cmd_$(1)),
最后再将该命令写到一个叫做$(dot-target).cmd 的临时文件中去,以方便下一次
检查命令行是否有变的时候用。

本例mx6qecovacs.cfg.cfgtmp确实有更新了,所以会执行命令 cmd_$(1),也就是cmd_mkimage:
Makefile:

cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ 
    $(if $(KBUILD_VERBOSE:1=), >/dev/null)
从编译的命令行其实也可以看到:

./tools/mkimage -n board/freescale/mx6qecovacs/mx6qecovacs.cfg.cfgtmp -T imximage -e 0x17800000 -d u-boot.bin u-boot.imx 


参考:
http://blog.chinaunix.net/uid-26675482-id-4408585.html

最后

以上就是烂漫寒风为你收集整理的[IMX6Q]u-boot.bin和u-boot.imx的区别的全部内容,希望文章能够帮你解决[IMX6Q]u-boot.bin和u-boot.imx的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部