2014-09-23 72 views
0

我有一个基于ucLinux内核2.6.33的没有MMU的cortex-M3 buildroot系统。支持在内核中启用FLAT,ZFLAT,SHARED_FLAT。 里面buildroot一切都设置为M3等 我有工作系统与工作内核和busybox(这只是在用户空间中的二进制)。系统或其他库上没有uClibc。 我试图建立这样最简单的用户空间应用程序:main(){}如何使用arm2010q1工具链在buildroot上为ucLinux构建FLAT用户空间二进制文件

我试着用不同的标志。最新的组合如下:

^[[7m >>> zpm_t 1.0 Building^[[27m /usr/bin/make -j5 FLAGS =“ - c -mthumb -march = armv7 -mfix-cortex-m3 -ldrd“EXTRA_LDFLAGS =”-Wl,-elf2flt, - static“CC =”/ mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache/mnt/repos/repos/github/nocturn_buildroot /输出/主机/ usr/bin/arm-uclinuxeabi-gcc“LD =”/ mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi -ld“HEADERS =” - I/mnt/repos/repos/github/nocturn_buildroot/output/target/usr/include/SDL“LIBS =” - L/mnt/repos/repos/github/nocturn_buildroot /../ nocturn_tools/arm-2010q1/arm-uclinuxeabi/libc/usr/lib“-C /mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t-1.0 all make [1]:进入目录/mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t-1.0' /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-gcc -c -mthumb -march=armv7 -mfix-cortex-m3-ldrd -I/mnt/repos/repos/github/nocturn_buildroot/output/target/usr/include/SDL t.c /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-gcc -Wl,-elf2flt,--static t.o -L/mnt/repos/repos/github/nocturn_buildroot/../nocturn_tools/arm-2010q1/arm-uclinuxeabi/libc/usr/lib -o t make[1]: Leaving directory/mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t- 1.0'

平面文件似乎是确定:

$ arm-uclinuxeabi-flthdr output/target/opt/t 
output/target/opt/t 
    Magic:  bFLT 
    Rev:   4 
    Build Date: Wed Sep 24 00:28:31 2014 
    Entry:  0x45 
    Data Start: 0x1f00 
    Data End:  0x1f70 
    BSS End:  0x1fa0 
    Stack Size: 0x1000 
    Reloc Start: 0x1f70 
    Reloc Count: 0x29 
    Flags:  0x1 (Load-to-Ram) 

但在系统我一直有一个段错误是不那么信息:

/opt # ./t 
[ 23.200000] 
[ 23.200000] 
[ 23.200000] t: fault at 0xa0501dd4 [pc=0xa0501dd4, sp=0xa0503f28] 
[ 23.200000] Invalid ISA state 
[ 23.200000] 
SEGV 

我错过了什么?它应该是非常简单的东西。另外 - 如何处理uClibc?它应该被编译到每个二进制可执行文件中,还是应该把它放在系统上?

回答

0

我已将我的应用与错误的库链接。我不得不从thumb2文件夹内预先建立一个工具链(对于M3):

LIBS="-L$(TOPDIR)/../tools/arm-2010q1/arm-uclinuxeabi/libc/thumb2/usr/lib" 

只是修复它有帮助。因为我有libc.a和libm.a作为静态存档 - 只需修复LIBS就足够了。并且不需要像-lm这样的标志。在buildroot编译期间,它需要静态库的一部分并创建一个可用的FLAT二进制文件。

相关问题