解决elf转bin文件超大

为什么bin文件会超大?

因为程序的加载地址不连续

MEMORY
{
    ILM (rx!w) : ORIGIN = 0x00FC0000, LENGTH = 192K
    Flash (rx!w) : ORIGIN = 0x51000000, LENGTH = 64K
    RAM (xrwai) : ORIGIN = 0x20030000, LENGTH = 64K 
}

如上区域划分,代码可以执行在ILMFlash中,如果同时使用两个区域,地址跨度非常大,默认生成的bin文件也会超大

objcopy -O binary "test.elf"  "test.bin"

在只使用ILM的情况下ELF的大小274Kbin的大小为44K

  .xip :
  {
    . = ALIGN(4);
    *( .text.test_matrix*)
    . = ALIGN(4);
  } >Flash

将部分代码(.xip段)放在FlashELF的大小275Kbin的大小则为1310981K



怎么解决?

生成多个bin

使用objcopy -h,可以得到如下信息(节选)

-j --only-section <name>         Only copy section <name> into the output
   --add-gnu-debuglink=<file>    Add section .gnu_debuglink linking to <file>
-R --remove-section <name>       Remove section <name> from the output
   --remove-relocations <name>   Remove relocations from section <name>

-j选项(或--only-section)用于指定要包含在输出文件中的段或节。使用此选项可以选择只包含特定的段或节,从而去除不需要的部分

-R选项(或--remove-section)用于指定要从输出文件中移除的段或节。使用此选项可以去除不需要的段或节

可以使用如下指令生成Flash.binILM.bin

objcopy -O binary -j .xip "test.elf"  "Flash.bin"
objcopy -O binary -R .xip "test.elf"  "ILM.bin"

最终ELF的大小275KFlash.bin的大小为5KILM.bin的大小为40K

xilinx自动将elfbin脚本是用于将Xilinx开发工具生成的elf文件换为可执行的bin文件的自动化脚本。elf文件是一种可执行文件格式,包含了程序的二进制代码和相关的调试信息。而bin文件则只包含了程序的二进制代码。 在Xilinx开发工具中,通常生成的可执行文件elf文件,在一些特定的场景中,可能需要将其换为bin文件,例如一些嵌入式系统中只能直接运行bin文件。而手动进行elfbin文件的格式换可能会比较繁琐,所以可以使用xilinx提供的自动脚本来进行换。 这个换脚本通常会包含以下几个步骤: 1. 引入依赖库:脚本会引入一些必要的依赖库,包括适配Xilinx开发工具版本的库和用于elfbin换的库。 2. 读取elf文件:脚本会调用相应的函数读取已经生成的elf文件。 3. 解析elf文件:脚本会解析elf文件的结构,获取程序的二进制代码、入口地址等信息。 4. 换为bin文件:脚本会使用获取的信息,将elf文件中的二进制代码提取出来,并处理为bin文件的格式,生成可执行的bin文件。 5. 输出bin文件:脚本会将生成的bin文件保存在指定的位置,以便后续的使用和部署。 使用xilinx自动将elfbin脚本可以提高开发效率和便捷性,减少手动操作的错误概率。同时,脚本也可以在不同的项目中复用,提高开发过程的一致性和标准化程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值