uboot Makefile 分析

简介: 应该说,uboot的Makefile还是比较简单的,虽然看起来很庞大,但是后面的大部分都是各类型board的config,真正生成u-boot.bin的部分较少。uboot的代码也是如此,代码很多,如果单一的看某个board,代码则不多。
应该说,uboot的Makefile还是比较简单的,虽然看起来很庞大,但是后面的大部分都是各类型board的config,真正生成u-boot.bin的部分较少。uboot的代码也是如此,代码很多,如果单一的看某个board,代码则不多。

 282 ALL += (obj)uboot.srec(obj)u-boot.bin (obj)System.map(U_BOOT_NAND) (UBOOTONENAND)(obj)u-boot.dis
 283 ifeq ($(ARCH),blackfin)
 284 ALL += $(obj)u-boot.ldr
 285 endif
 286 
 287 all:        $(ALL)
 288 
 289 (obj)uboot.hex:(obj)u-boot
 290         (OBJCOPY){OBJCFLAGS} -O ihex $
 291 
 292 (obj)uboot.srec:(obj)u-boot
 293         (OBJCOPY){OBJCFLAGS} -O srec $
 294 
 295 (obj)uboot.bin:(obj)u-boot
 296         (OBJCOPY){OBJCFLAGS} -O binary $
 297 
 298 (obj)uboot.ldr:(obj)u-boot
 299         (LDR)T(CONFIG_BFIN_CPU) -f -c @
 300 
 301 (obj)uboot.ldr.hex:(obj)u-boot.ldr
 302         (OBJCOPY){OBJCFLAGS} -O ihex $
 303 
 304 (obj)uboot.ldr.srec:(obj)u-boot.ldr
 305         (OBJCOPY){OBJCFLAGS} -O srec $
 306 
 307 (obj)uboot.img:(obj)u-boot.bin
 308         ./tools/mkimage -A $(ARCH) -T firmware -C none \
 309         -a $(TEXT_BASE) -e 0 \
 310         -n (shellsednes/.UBOOTVERSION//p(VERSION_FILE) | \
 311             sed -e 's/"[     ]*$$/ for $(BOARD) board"/') \
 312         -d $
 313 
 314 (obj)uboot.sha1:(obj)u-boot.bin
 315         (obj)tools/ubsha1(obj)u-boot.bin
 316 
 317 (obj)uboot.dis:(obj)u-boot
 318         (OBJDUMP)d $@
 319 
 320 (obj)uboot:depend(SUBDIRS) (OBJS)(LIBBOARD) (LIBS)(LDSCRIPT)
 321         UNDEF_SYM=`(OBJDUMP)x(LIBBOARD) $(LIBS) | \
 322         sed  -n -e 's/.*$(SYM_PREFIX)__u_boot_cmd_.*/-u\1/p'|sort|uniq`;\
 323         cd (LNDIR) &&(LD) (LDFLAGS)UNDEFSYM(__OBJS) \
 324             --start-group (__LIBS) --end-group(PLATFORM_LIBS) \

上面列出来的代码就是最终生成各种object的规则,在此之前,Makefile配置了当前OS类型,目标ARCH,交叉编译器,目标目录等环境变量。
从这一段代码可以看出,u-boot是首先被生成的,使用$(LD)来链接各.a得到。u-boot是elf格式的文件,这个文件是不能直接下载到board上运行。三星的IROM只能识别纯粹的binary,即不包含地址重定位的binary。

u-boot.bin就是纯粹的binary格式,可以直接下载到board的SDRAM中,或者烧写到flash中。从Makefile可以看出,u-boot.bin使用OBJCOPY从u-boot中拷贝得到。从之前的elf格式分析知道,实际上就是将elf格式去头去尾,并将各segment填充合并。

其他格式的文件或map等不再详述,从Makefile可以看得很清楚。

2518 smdkc100_config :       unconfig
2519     @(MKCONFIG)(@:_config=) arm s5pc1xx smdkc100 samsung s5pc100
再接下来的board config部分,以smdkc100为例。我们执行make smdkc100_config,实际上就是执行了:
mkconfig smdkc100 arm s5pc1xx smdkc100 samsung s5pc100
mkconfig是一个脚本文件,其内容这里就不列出来了。他的工作就是根据输入参数,将cpu, board,include目录下的对应文件或子目录链接到顶层目录上来。
阅读(358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册

', title : '选择类型', width : 300, height : 150, scroll : 'no', callback : function(action){ if(action == 'close'){ .cover(false); } } }); });('#admin_delete').live('click' , function(){ ///blog/logicdel/id/3480184/url/%252Fblog%252Findex.html.html var type = ('#del_type').val(); var url = '/blog/logicdel/id/3144398/url/%252Fuid%252F21505072.html.html'; window.location.href= url + '?type=' + type; }); //顶 js中暂未添加&过滤('#digg').live('click' , function(){ if(isOnLine == '' ) { //showErrorMsg('登录之后才能进行此操作' , '消息提示'); showErrorMsg('操作失败,您需要先登录!', '消息提示', '/site/login.html'); return false; } var bid = ('#digg').attr('bid'); var url =('#digg').attr('url'); var digg_str = $.cookie('digg_id'); if(digg_str != null) { var arr= new Array(); //定义一数组 arr = digg_str.split(","); //字符分割 for( i=0 ; i '; tpl += '
'; tpl += '文明上网,理性发言...'; tpl += '
'; tpl += '
'; tpl += '
'; tpl += ' '; tpl += '
'; tpl += '
'; tpl += '
目录
打赏
0
0
0
0
77
分享
相关文章
|
4月前
|
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
72 20
[Linux工具] Makefile

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等