ARM移植時的OABI與EABI

2021-08-26 11:52:53 字數 1942 閱讀 1659

1。什麼是abi

oabi中的o,表示「old」,「lagacy」,舊的,過時的,oabi就是舊的/老的abi。

eabi中的e,表示「embedded」,是一種新的abi。

eabi有時候也叫做gnu eabi。

oabi和eabi都是專門針對arm的cpu來說的。

3。eabi的好處 / 為何要用eabi

a。支援軟體 浮點和硬體實現浮點功能混用

b。系統 呼叫的效率更高

c。今後的工具更相容

d。軟體浮點的情況下,eabi的軟體浮點的效率要比oabi高很多。

4。oabi和eabi的區別

兩種abi在如下方面有區別:

a。呼叫規則(包括引數如何傳遞及如何獲得返回值)

b。系統呼叫的數目以及應用程式應該如何去做系統呼叫

c。目標檔案 的二進位制格式,程式庫等

d。結構體中的 填充(padding/packing)和對齊。

e。oabi:

* abi flags passed to binutils: -mabi=apcs-gnu -mfpu=fpa

* gcc -dumpmachine: arm-unknown-linux

* objdump -x for compiled binary:

private flags = 2: [apcs-32] [fpa float format] [has entry point]
* "file" on compiled debian binary:

elf 32-bit lsb executable, arm, version 1 (arm), for gnu/linux 2.2.0, dynamically linked (uses shared libs), for gnu/linux 2.2.0, stripped
* "readelf -h | grep flags""

flags: 0x0
eabi:

* abi flags passed by gcc to binutils: -mabi=aapcs-linux -mfloat-abi=soft -meabi=4

* gcc -dumpmachine: arm-unknown-linux-gnueabi

* objdump -x for compiled binary:

private flags = 4000002: [version4 eabi] [has entry point]
* "file" on compiled binary (under debian):

elf 32-bit lsb executable, arm, version 1 (sysv), for gnu/linux 2.4.17, dynamically linked (uses shared libs), for gnu/linux 2.4.17, stripped
* "readelf -h | grep flags""

flags: 0x4000002, has entry point, version4 eabi

[參考]

1。abi/eabi/oabi

2。why arm's eabi matters

3.[pdf]the new

armabi (eabi) and debian

armel

port

4 , armeabiport

5,arm官方的eabi標準文件

perl的arm平台移植

1.本人使用的是perl 5.22.0.tar.gz 2.解壓後到根目錄,執行configure 一直回車到最後,然後make編譯,儲存generate uudmap可執行檔案,後邊要用到 4.解壓補丁包,到perl的原始碼根目錄,替換相同檔案,同時修改cross目錄下的config檔案,依據自己的...

opencv移植到arm的出現的問題

1 bash configure bin sh m bad interpreter 沒有那個檔案或目錄 今天在交叉編譯jpeglib時,明明目錄下有configure檔案,但是執行就報此問題 bash configure bin sh m bad interpreter 沒有那個檔案或目錄 goog...

ARM下一些常用庫的移植

一些庫在各個專案經常重用.如jpeg,freetype,iconv 等.每次大型專案均會反覆重用.因此按照原來專案規範,一般都放在專案libs目錄下,但後來發現,每個專案都做重複操作.也完全沒有必要.因為現在是將其歸綱到乙個comm lib公用資訊.以下是常用庫的arm linux移植,我是放在 h...