从Keil到gcc的移植

8个职位/ 0个新职位
最后一篇文章
ankitdaf
离线
最后一次见到:3年2个月前
加入:2015-09-03 20:14
从Keil到gcc的移植

你好

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

我已经取得了很大的进步,但仍停留在某一点上。

1.我收到很多链接器错误,即:

./../../../sdk/ble_stack/profiles/prf_utils.o:(.rodata.cust_prf_funcs+0x0): multiple definition of ' cust_prf_funcs'
../../../../../../sdk/platform/arch/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'
../../../../../../sdk/platform/arch/main/arch_system.o:(.rodata.cust_prf_funcs+0x0):首先在此处定义
../../../../../../../sdk/app_modules/src/app_common/app.o:(.rodata.cust_prf_funcs+0x0)`cust_prf_funcs'的多个定义
../../../../../../sdk/platform/arch/main/arch_system.o:(.rodata.cust_prf_funcs+0x0):首先在此处定义

等等我认为有一些开关是不正确的,但我找不到它是什么。有什么建议吗?
---
2.我收到一个内存溢出错误

arm none eabi/bin/ld:out/full\u emb\u sysram.axf节“.constdata”将不适合区域“RAM\u IROM4”
arm none eabi/bin/ld:堆栈溢出的区域RAM
arm none eabi/bin/ld:在[00000000 2000044000000020006E33]处加载的段ER_IROM5与在[00000000 200003E400000000200005EB]处加载的段重叠
arm none eabi/bin/ld:区域“RAM_IROM4”溢出428字节
collect2:错误:ld返回了1个退出状态

我怀疑这与内存设置不正确有关。580.lds文件是否仍然适用?你能帮我查一下583.lds文件吗?或者我如何开始移植这个?
我已经完成了申请说明中的步骤,但要让我的583正常工作还有一段路要走,如您所见:)

我打算在主流商业产品中使用583,因此这一帮助将大有帮助。

--
顺致敬意,

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

你好

我设法取得了一些更大的进步,并设法积累了经验。通过手动比较.map文件中的符号表,我注意到rom_symdef.txt中有相当多的符号被注释掉,这些符号出现在由Keil生成的映射中。我取消了它们的注释,构建成功了。

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

你认为我应该试试什么?(我正在使用DA14583)

ankitdaf
离线
最后一次见到:3年2个月前
加入:2015-09-03 20:14
我又挖了一些,我

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

我已经尝试了半天多的各种事情,包括尝试使用nm打印符号表,但是大多数符号都被标记为未定义,甚至没有地址。所有符号的地址均为0000。我不确定这是否正确。
你能从这里帮助完成构建吗?我想我需要创建一个动态符号表,并使用它进行链接。

我可以与您共享我在makefile中所做的更改

请帮忙,谢谢!

ankitdaf
离线
最后一次见到:3年2个月前
加入:2015-09-03 20:14
你好

你好

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

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

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

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

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

ankitdaf
离线
最后一次见到:3年2个月前
加入:2015-09-03 20:14
我花了更多的时间在

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

一位来自Dialog的GCC专家能在这里帮我弄清楚为什么应用程序代码被完全丢弃吗?它是否与580.lds.S文件有关?还是这样
与链接器标志有关吗?我正在使用gcc arm ONE 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。谢谢。

杰米.希克斯.cmt
离线
最后一次见到:3年4个月前
加入:2017-03-03 14:21
我注意到如果uvprojx

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

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

标志-ffunction节和-fdata节在对象文件中为每个函数和数据生成单独的节,以便链接器可能只包含引用的部分。

听起来您的构建中没有包含引用应用程序的代码。

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

杰米.希克斯.cmt
离线
最后一次见到:3年4个月前
加入:2017-03-03 14:21
我加了一行:

我加了一行:

* (.constdata *)

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

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

此版本的gcc包括使用flag-ftree开关转换的开关优化,并生成较小的二进制文件。

我还没有测试过这些代码,我的开发模块正在订购中。

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