从Keil移植到GCC

8个职位/ 0个新职位
最后一篇
ankitdaf
离线
最后一次露面:3年1个月前
加入:2015-09-03 20:14
从Keil移植到GCC

你好

我正在尝试从Keil到GCC的583个项目的构建。

我已经设法取得了很大的进步,而是卡住了一点。

1.我得到了很多链接错误,即:

./../../../sdk/ble_stack/profiles/prf_utils.o:(.rodata.cust_prf_funcs+0x0): multiple definition of ' cust_prf_funcs'
./../ ...../../../../../../../../1.. / ....../main/arch_system.o::(..rodata.cust_prf_funcs+0x0):首先在这里定义
/../../../sdk/app_modules/src/app_sec/app_security.o:(.rodata.cust_prf_funcs+0x0):多个定义' cust_prf_funcs'
./../ ...../../../../../../../../1.. / ....../main/arch_system.o::(..rodata.cust_prf_funcs+0x0):首先在这里定义
./ ...... / ... /modules/src/app_common/app.o::(.rodata.cust_prf_funcs+0x0):多个定义`cust_prf_funcs'
./../ ...../../../../../../../../1.. / ....../main/arch_system.o::(..rodata.cust_prf_funcs+0x0):首先在这里定义

等等。我想有一些不正确的开关,但我找不到它的东西。有小费吗 ?
---
我收到内存溢出错误

ARM-None-EABI / bin / ld:out / full_emb_sysram.axf部分`.constdata'不适合区域`ram_irom4'
ARM-None-EABI / BIN / LD:Region RAM用堆叠溢出
ARM-None-EABI / BIN / LD:eR_IROM5加载于0000000020000440,000000000020006E33]重叠部分.CONSTDATA加载在[00000000200003E4,0000000000200005EB]
ARM-None-EABI / bin / ld:区域`ram_irom4'溢出428字节
collect2:错误:LD返回1个退出状态

我怀疑这与内存设置不正确有关。是580.lds文件仍然适用吗?你能帮我一个583.lds文件吗?或者我如何开始移植这个?
我已经从应用程序注意到了这些步骤,但仍然有某种方式可以让我的583工作,如你所见:)

我打算在主流商业产品中使用583,所以这种帮助将走很长的路。

-
此致

设备:
ankitdaf
离线
最后一次露面:3年1个月前
加入:2015-09-03 20:14
你好

你好

我设法取得更多进步并设法获得积累。我通过手动比较了.map文件中的符号表来完成此操作,我注意到rom_symdef.txt中的相当几个符号被评论出来,它存在于从keil生成的地图中存在。我取消了解他们,构建成功了。

然而,可执行文件的大小与Keil生成的文件大小相差甚远。Keil生成的hex文件大小为78.9 KB,而gcc生成的hex文件大小仅为6.4 KB。我猜有很多东西丢失了(因为某些地方丢失了一些配置行?)

你觉得我应该尝试什么?(我正在使用da14583)

ankitdaf
离线
最后一次露面:3年1个月前
加入:2015-09-03 20:14
我做了更多的挖掘,我

我做了更多的挖掘,我意识到SDK提供的符号定义文件不能工作,符号表需要为项目再次动态生成。

我现在一直在尝试各种各样的事情,包括尝试使用NM打印符号表,但最多的符号被标记为未定义,甚至没有地址。所有符号都有0000 0000的地址。我不确定这是否是正确的。
你能从这里帮助完成建筑吗?我想我需要创建一个动态符号表,并使用它来链接。

我可以与您分享我在Makefile中制作的更改

请帮忙,谢谢!

ankitdaf
离线
最后一次露面:3年1个月前
加入:2015-09-03 20:14
你好

你好

我检查了构建生成的.map文件,我注意到丢弃所有应用程序代码。

在.map文件中,下面有一个“丢弃的输入部分”条目,这是所有用户定义的功能等。

有链接时间优化或一些这样的混乱?
我试图删除- functions -sections和-fdata-sections,但没有帮助,它只显示溢出错误。

可能是链接文件缺少了583的某些内容,导致链接器忽略了所有用户代码?

我想有正确的583.lds。S文件,其中包括rom符号以及特定于583的内存容量可能是使应用程序工作所需的最后一件事

ankitdaf
离线
最后一次露面:3年1个月前
加入:2015-09-03 20:14
我花了一些时间

我花了更多的时间在这上面。

来自对话的GCC专家可以帮助我在这里找出为什么应用程序代码完全丢弃?它是否与580.LDS.S文件有关?或者做
与链接器标志有什么关系?我正在使用gcc-arm-none-eabi 5.4

谢谢

raohuaming
离线
最后一次露面:4年10个月前
加入:2016-07-01 00:49
我也在努力

我也试图通过使用GCC-ARM-None-Wabi 5.4将我的Keil 5项目搬入GCC项目,但仍然没有运气。我首先使用uvproj2makefile来获取makefile,然后我分别对580.lds.s和makefile进行了一些更改。我有成功编译的所有文件,但无法将它们链接到所有。我也在寻求帮助将它移到GCC。谢谢。

Jamey.Hicks.cmt.
离线
最后一次露面:3年4个月前
加入:2017-03-03 14:21
我注意到,如果UVProjx

我注意到,如果UVProjx文件包含对多个设备的支持,则源文件将多次复制到Makefile中。

在删除重复的文件之后,我能够消除多个定义错误。

标志 - 函数 - 部分和-Fdata-部分为每个函数和数据生成对象文件中的单独部分,使得链接器仅包括所引用的那些。

它听起来像引用应用程序未包含在构建中的代码。

我也遇到了重叠部分问题,但尚未解决它。

Jamey.Hicks.cmt.
离线
最后一次露面:3年4个月前
加入:2017-03-03 14:21
我加了这一行:

我加了这一行:

* (.constdata *)

在580.lds中的*(。rodata *)行之后,并解决了问题.Constdata不适合ER_IROM2。

我正在寻找丢失的插件,这让我找到了arm- noneabi -gcc的6.2.1版本,打包为gcc-arm-embedded:https://launchpad.net/~team-gcc-arm-embedded/aityArchive/ubuntu/ppa.

此版本的GCC包括使用Flag -Ftree-Switch-Constrible的交换机优化,并生成较小的二进制文件。

我还没有测试任何此代码,我的Dev模块是按顺序进行的。

我现在有一个python脚本,用于将Keil项目文件转换为makefile。它工作得更好,但不是完全自动化的。