This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2001:无法与 MSP430-elf-ld 链接;MCU 没有上部存储器功能

Guru**** 2378650 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/838578/msp430g2001-cannot-link-with-msp430-elf-ld-the-mcu-has-no-upper-memory-capability

器件型号:MSP430G2001

我成功地按照 SLAU646E 的§5.2进行编译、然后执行"chmod -R 0:0 install"和"cp -A install/*/"、从而在 Linux 上安装 MSP430 gcc 版本8.2.0。 我将支持文件升级到版本1.207,并将命令作为 root:"install -m755 -d /usr/local/msp430-elf/sys-include ",然后是"install -m644 include/*/usr/local/msp430-elf/sys-include "。

当尝试制作一个简单的项目时、所有内容都可以编译、并且带有"msp430-elf-size"命令的视图中没有显示".data"段中的任何组件。

当尝试使用 MSP430-elf-ld 通过我的预设 makefile 将所有内容链接在一起时、我将获得以下输出:

msp430-elf-gcc -mmcu=msp430g2001 -msmall -msort -l/usr/local/msp430-elf/sys-include \
-wl、-Map、g2_01blink.map -o g2_01blink.elf g2_01blink.o blink.o bCMP+.o wDT+.o
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:错误:g2_01blink.map、假设较低区域中的数据使用较低区域、但认为较低区域中的数据使用较低区域。
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 G2_01blink.o 的目标特定数据
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:错误:G2_01blink.elf 使用上部区域作为数据、但 BCM+.o 假定数据位于下部存储器中。
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 BCM+.o
的目标特定数据/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:错误:G2_01blink.elf 使用上部区域作为数据、但 IO.o 假定数据位于下部存储器中。
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 io.o
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld 的目标特定数据:错误:g2_01blink.elf 使用较高的区域作为数据、但 WDT+.o 假定数据位于较低的存储器中。
/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 WDT+.o
collect2的目标特定数据:错误:LD 返回1退出状态
make:***[makeg2001.mk:19:g2_01blink.elf]错误1

我有生成的加载图。

如果仍然有问题、我可能必须恢复到版本7。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不想您在编译/汇编阶段通过了"-mdata-region=none"? 如果是、则删除该选项会解决该问题。

    "-mdata-region=none" 对于8.2.0具有新的含义、并告诉编译器数据可以位于上部或下部存储器区域。 当然、这只适用于大内存模型中的430X 器件。 下一个版本已修补此修补程序、因此如果在不使用-mcode/data-region 的情况下使用了-mlarge、则会出现错误。

    如果-mdata-region=none 不是问题、您能否在编译/汇编阶段为目标文件发布 MSP430-elf-gcc 调用。

    以下链接对我来说很好:

    msp430-elf-gcc -mmcu=msp430g2001 -i/home/JozeF/msp430-gcc-support-files/include -msmall -melet -c tester.c -o tester.o
    msp430-elf-gcc -mmcu=msp430g2001 -L/home/JozeF/msp430-gcc-smtester -smalle.o smallet -meltester -meltester -mcu-mele.o -mcu.include -msp430gcc-meltester 支持文件
    

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、我看到链接器认为是使用上部区域作为数据的输出可执行 ELF 文件、而不是输入目标文件。 因此、它们似乎已正确组装。

    您能否将"-v -wl、-v"添加到 MSP430-elf-gcc 的链接阶段调用中并发布输出。

    错误来自检查输入目标文件上设置的对象属性的链接器。 输出 ELF 文件从链接器看到的第一个目标文件获取其对象属性、该文件应为 crt0.o

    因此、构建 crt0.o 时可能会出现问题、或者 GCC 为您的器件挑选了错误的器件或其他器件。

    谢谢、此致、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    输出为:

    使用内置规格。
    collect_gcc=MSP430-elf-gcc
    collect_lto_wraper=/usr/local/libexec/gcc/msp430-elf/8.2.0/lto-wrapper
    目标:MSP430-elf
    配置为:./../gcc/configure --target=MSP430-elf --enable-languages=c、c++--disable-NLS --enable-initfini-array --enable-target-optspace --enable-newlib-nane-formattende-io --withglethe-model:
    single
    gcc version 8.2.0 (gleepy)
    Compiler_path=/usr/local/libexec/gcc/msp430-elf/8.2.0:/usr/local/libexec/gcc/msp430-elf/8.2.0:/usr/local/libexec/gcc/msp430-elf:/usr/local/lib/gcc/msp430-elf/8.2.0:/usr/local/lib/gcc/msp430-elf:/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin
    :library_path=/usr/local/lib/gcc/msp430-elf/8.2.0/430:/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib/430
    /usr/local/msp430-elf/sys-include/devices.csv
    /usr/local/libexec/gcc/msp430-elf/8.2.0/lto-wrapper:/usr/local/lib/gcc/msp430-elf/8.2.0 /usr/local/libexec/gcc/msp430-elf/8.2.0/collect2 /tmp/ccrqRNZv.res:/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib /usr/local/libexec/gcc/msp430-elf/8.2.0/liblto_plugin.so:collect_gc选项='-mmcu=msp430g2001''-msmalle''-lus/local/mcu-opt-pine-pin-option=-linux-pine-preferency=-linux-pin-opt-linux-pin-opt-linux-pine-pin-se-pin-opt-pine-pine-pin-se-pine-pin-se-pin-opt-opt-pine-pin-cpu-pin-se-pin-cpu-pin-se-pin-se-pin-opt-linux=-linux-linux-linux-linux-pine-pine-pine-pine-pin-se-pin-opt-linux-pin-se-pin-se-pin-se-pin-sbuck-pin-si-pin-se-pin-se-pin-sbi-pin-si-pin-sbi-pin-si-p /../../../msp430-elf/lib /../../../msp430-elf/lib/430 /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib/430/crt0.o /usr/local/lib/gcc/msp430-elf/8.2.0/430/crtbegin_no_eh.o start-group -lmull_none -LC -lgcc -lcrt -lnosys --end-group --script=msp430g2001.ld -lgcc /usr/local/lib/gcc/msp430-elf/8.2.0/430/crtend_no_eh.o /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib/430/crtn.o -lgcc
    collect2版本8.2.0
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld /usr/local/libexec/gcc/msp430-elf/8.2.0/liblto_plugin.so -plugin-opt=/usr/local/libexec/gcc/msp430-elf/8.2.0/lto-wrapper -plugin-cc=-fresolution=/tmp/ccrqRNZv.res -lese-opt=pin-pass-pine-pin-prue-pin-pin-opt-lc-pine-through -lc-pin-prue-pine-pin-opt=-lc-pin-pin-pin-opt-rc-pine-pine-pine-pine-pin-rf-now-through -rc-rc-lc-pin-opt-pin-opt=-rc-lc-pine-pine-pine-pine-pine-pin-opt-rf-now-through -pin-opt-pin-opt-pin-opt-rf-n gc-sections -o g2_01blink.elf /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib/430/crt0.o /usr/local/lib/gcc/msp430-elf/8.2.0/430/crtbegin_no_eh.o /../../../msp430-elf/lib/430 /usr/local/lib/gcc/msp430-elf/8.2.0/430/crtend_no_eh.o /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib/430/crtn.o -L//usr/local/msp430-elf/sys-include -L//usr/local/lib/gcc/msp430-elf/8.2.0/430 -l/local/lib/msp430-leblink/gcc-msp430-lblink/gcc-msp430-gld/r-msp4msp4msps -r-msp4msp/r-r-msp4mspr-ms/r-mspr-msp4mspr-mspr-mspr-mspr-ms/r-gcc-mblu.ld/r-msp4msp-msp4msps -mspr-mspr-mspr-mspr-mc-mspr-mspr-mspr-mc-mc-gr-gr-gcc-mspr-mspr-mspr-gr-mspr-mspr-msp /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld /../../../msp430-elf/lib
    
    g2_01blink.elf 使用上部区域来存储数据、但 g2_01blink.o 假定数据位于下部存储器中。
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 G2_01blink.o 的目标特定数据
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:错误:G2_01blink.elf 使用上部区域作为数据、但 BCM+.o 假定数据位于下部存储器中。
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 BCM+.o
    的目标特定数据/usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:错误:G2_01blink.elf 使用上部区域作为数据、但 IO.o 假定数据位于下部存储器中。
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 io.o
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld 的目标特定数据:错误:g2_01blink.elf 使用较高的区域作为数据、但 WDT+.o 假定数据位于较低的存储器中。
    /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/bin/ld:无法合并文件 WDT+.o
    collect2的目标特定数据:错误:LD 返回1退出状态 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。 我自己使用8.2.0.52-源代码已满重建工具链、并在修复工具链路径以匹配我的系统后进行了精确的 ld 调用、我无法复制它。

    如果我将 crt0.o 的路径替换为7.3.2.154中的 crt0.o 的路径,则会得到与您相同的错误。

    可能会发生的情况是、当您构建工具链时、7.3.2.154中的"MSP430-elf-us"就在您的路径上。 因此、GCC 编译使用旧的汇编器构建了 crt0.o (以及其他 CRT 对象)、这些编译器没有它查找的新"数据区域"对象属性、用于验证目标文件之间的数据区域是相同的。

    但是、如果您未修改过使用 README-build.sh 脚本、我不希望这种情况发生、因为在构建 GCC 之前有一行代码、这会将刚刚构建的汇编器置于其他任何内容之前的路径上。

    导出路径=$PWD/./../install/usr/local/bin:$path 

    您能否布置"readelf -a 的输出  /usr/local/lib/gcc/msp430-elf/8.2.0/../../../../msp430-elf/lib/430/crt0.o"

    7.3.2中的 crt0.o 将如下所示:

    属性部分:mspabi
    文件属性
    Tag_ISA:MSP430
    Tag_Code_Model:Small
    Tag_Data_Model:Small
    

    8.2.0中的 crt0.o 看起来像这样(标签未正确显示、但请注意标签编号10和标签值1。 1表示较低区域2表示较高区域):

    属性部分:mspabi
    文件属性
    Tag_ISA:MSP430
    Tag_Code_Model:Small
    Tag_Data_Model:Small
    :1 (0x1) 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我最终重建了整个东西。

    在重建之前、readelf 命令发出以下命令:

    属性部分:mspabi
    文件属性
    Tag_ISA:MSP430
    Tag_Code_Model:Small
    Tag_Data_Model:Small
    

    重建后、就是这样:

    属性部分:mspabi
    文件属性
    Tag_ISA:MSP430
    Tag_Code_Model:Small
    Tag_Data_Model:Small
    :1 (0x1)
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我忘记说我已经成功编译了。 "msp430-elf-size -a g2_01blink.elf"产生以下结果:

    g2_01blink.elf:
    部分 大小 addr
    __reset_vector 2 65534
    .rodata 0 65024
    .rodata2 4 65024
    .text 132 65028
    .data 0 512.bss
    0 512
    .noinit 0 512
    堆 4. 512
    .msp430.attributes 25 0
    .comment 20. 0
    .debug_aranges 264 0
    .debug_info 2677 0
    .debug_Abbrev 718. 0
    .debug_line 1114. 0
    .debug_frame 160 0
    .debug_str 483 0
    .debug_ranges 136. 0
    总计 5739.
    

    我在构建说明中有一条注释、要在构建新版本之前先从/usr/local/bin 中删除旧版本。