我正在使用objcopy删除一些必要的脚本来将资源文件(zip文件)嵌入闪存(ARM嵌入式东西)。
我正在使用像这样的objcopy:
arm-none-eabi-objcopy.exe -I binary -O elf32-littlearm -B arm --rename-section .data=.rodata input.zip input.zip.o
arm-none-eabi-nm.exe -S -t d input.zip.o
00006301 R _binary_input_zip_end
00006301 A _binary_input_zip_size
00000000 R _binary_input_zip_start
我需要知道的是_end和_size符号的宽度是多少。我只能猜测_start是一个可以像字节数组一样访问的地址:extern uint8_t _binary_input_zip_start[];
。我假设_end和_size属于' native' int-size,我想我可以放心地假设我可以将它们解释为uint32_t。
但我无法确定。我找不到任何东西"尺寸"在objcopy的文档中有关:https://sourceware.org/binutils/docs/binutils/objcopy.html
答案 0 :(得分:0)
我不确定这是否有效,但尝试将选项--sort-size添加到arm-none-eabi-nm。这应该通过将符号与上面的下一个符号进行比较来按大小对符号进行排序。结合-S选项,它应该打印一个大小。希望这可以帮助你推断它们的宽度。
您使用的是哪种ARM micro? 32位是一个很好的猜测,但也有例外。如果您碰巧使用的是Texas Instruments,我可以提供更多帮助。 我没有一个ARM项目,我可以测试它,但它值得一试。如果这不起作用,我会继续挖掘。
来源:我的知识,并通过http://manned.org/arm-none-eabi-nm
仔细检查