用于arm7tdmi的Buildroot ARM工具链来编译SourceForge Archopen

时间:2015-03-19 23:00:23

标签: c arm toolchain buildroot

我有兴趣编译sourceforge项目https://svn.code.sf.net/p/archopen/code/ArchOpen/trunk/,更具体地说是app AOnes,它是Archos Gmini 400的NES模拟器(非活动旧项目)

分析源代码,我看到Gmini400是arm7tdmi设备,没有MMU,用于编译的工具链是一个名为arm-linux-nofpu的buildroot。 我认为(根据buildroot-2009-02 menuconfig)no-fpu意味着软浮点,所以我试图建立这样一个工具链。

我使用buildroot-2013-02构建工具链(2009年和2010年都不适用于我),并提供以下选项:

  • arm7tdmi
  • 没有MMU
  • 软件浮点
  • 启用elf2flt支持(我看到有这样的参考 ArchOpen的Makefile)

我让其他选项保持原样并进行构建。

我检查了ArchOpen,启动配置脚本选择Gmini4XX作为目标(而不是Gmini 402 chich完全不同),选择defaut.rules并编辑生成的Makefile.conf以适应工具路径和名称(因为我生成的工具链名称不同)

第一个错误:

[thread.o]
{standard input}: Assembler messages:
{standard input}:1236: Error: Rn must not overlap other operand -- swpb r0,r3,[r0] 

嗯,这段代码应该可以正常工作了,但是我打开了thread.h并修正了要通过的源代码(添加"&")

第二个错误:

undefined reference to __aeabi_idivmod and undefined reference to __aeabi_ldivmod

正如谷歌所说,这似乎是一个缺失的问题。 我编辑了wav文件夹makefile以添加-lgcc并指定-L/lib_folder_of_my_toolchain_containing_libgcc.a

第三个错误:

in gcc/config/arm/lib1funcs.asm : multiple definition of __divsi3
in gcc/config/arm/lib1funcs.asm : undefined reference to raise
in libgcc.a (some .o inside) : undefined reference to __aeabi_unwind_cpp_pr0

我不知道解决这个问题......

有没有人有想法?有没有人可以帮助我获得与此archopen代码兼容的工作arm7工具链?

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,在这个特殊情况下,回到2005年是一个很好的解决方案......

使用ubuntu 5.04,buildroot使用defaut通用ARM(小端)配置构建,但以下选项除外:

  • GCC 3.3.5
  • 不使用每日uClibc快照
  • 处理器没有MMU
  • 不支持大文件
  • 默认情况下使用softfloat
  • 没有安装busybox(因为我只想要工具链)
  • 没有创建Ext2文件系统(原因与上述相同)

编译完最后一个GCC阶段后,构建失败。此时,在PATH环境中添加buildroot / build_arm_nofpu / staging_dir / bin。变量,下载libfloat源码(libfloat-990616.orig.tar.bz2)tarball,编辑Makefile改变gcc,ld和arm-linux-uclibc-gcc,arm-linux-uclibc-ld和arm-linux- uclibc-as和build libfloat(make clean& make)。将libfloat.a复制到buildroot / build_arm_nofpu / staging_dir / lib并再次运行buildroot make(不清除)。构建应该成功结束。使用此工具链,mediOS将在没有任何警告的情况下进行编译。