如何使用arm2010q1工具链在buildroot上为ucLinux构建FLAT用户空间二进制文件

时间:2014-09-23 22:02:55

标签: embedded buildroot uclibc uclinux

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

我试过不同的旗帜。最新组合是这样的:

^ [[7米>>> zpm_t 1.0建筑^ [[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 / output / host / 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?它应该编译成每个二进制可执行文件还是应该以某种方式将它放在系统上?

1 个答案:

答案 0 :(得分:0)

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

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

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