2014-09-23 58 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二進制文件。

相關問題