• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

u-boot主Makefile

@曲终人散@ 2018-05-13 浏览量:731
UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \

-Map u-boot.map -o u-boot

上述代码中加黑的语句在链接程序的时候起什么作用?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:8
  • 这个语句里面有很多系统变量(环境)变量,整个来定义一个UNDEF_SYM变量。

    里面还有用sed进行内容替换,并且用cd进入目录,然后进行链接(在链接时会用到UNDEF_SYM变量)

    主要有这样一些操作:

    UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
    sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\

    这上面是完成UNDEF_SYM变量值定义。


    cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
    --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \

    -Map u-boot.map -o u-boot

    这上面实际上是两个主要操作,其中一个是切换到$(LNDIR)目录,

    然后用$(LD)对应的命令进行处理,其中一个参数是$$UNDEF_SYM



@曲终人散@ 回复了 xdsnet:这个流程我是知道的,那个变量的值是u-boot中命令:-u__u_boot_cmd_do_reset这样类似的东西,但是这在链接的时候什么作用你没说 回复

  • 应该就是链接u-boot的reset命令啊。

  • 参考 https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_61/com.ibm.aix.cmds3/ld.htm

    ld的-u 是为了 防止外部的符号 Name 的垃圾收集。如果指定的符号不存在,将报告一个警告。可以重复使用此标记。

  • 加黑的是指特定的指定项,一般用于跳转指针到特定链接位

  • UNDEF_SYM应该是一个变量,在文件的最开始的地方应该是有定义的,他的值也是在执行过程中或是一开始被赋值的

  • UNDEF_SYM就是一个变量,与C语言中的int i;是一样的,只是这里要符合make的语法

  • 为什么是两个$???环境变量不是一个$就够了么,楼主搞定没?

相关问题

问题达人换一批

u-boot主Makefile