目前 ARM 的平台已經有 64 位元 CPU,其 Debian 架構是 aarch64,為了兼顧傳統 32 位元之 armel/armhf 支援,及最新的 aarch64 架構支援,我們必須安裝這三者之 toolchain,並分別設定其指令才能使用。要編譯 ARM 平台的程式,必須安裝 Cross toolchain,所謂的 Cross toolchain 就是 在 X86 平台上編譯 ARM 的可執行檔。要安裝這些 toolchain 必須使用 Embedded Debian Project 所提供資源,所以我們要修改 /etc/apt/sources.list 這個檔案,新增底下設定:
#armhf toolchain
deb http://emdebian.org/tools/debian/ jessie main
新增完畢之後,請執行:
# apt-get update
然後執行:
# dpkg --print-foreign-architectures
armel
i386
這裡可以看到目前我們的系統支援 armel 以及 i386 等非 x86_64 平台的架構,現在請
執行:
# dpkg --add-architecture armhf
# dpkg --add-architecture arm64
來新增 armhf 及 arm64 架構,作完之後再重新執行剛剛的指令可以看到目前已經有
armhf 架構了,指令如下:
# dpkg --print-foreign-architectures
其輸出至少會有三行:
armel - armel 架構
armhf - armhf 架構
arm64 - arm64 架構
接著安裝 armhf 以及 arm64 的 gcc 套件,請執行:
# apt-get update
# apt-get install crossbuild-essential-armhf
# apt-get install crossbuild-essential-arm64
為了方便未來我們使用這三個不同版本的工具,請在 ~/.bashrc 中新增底下設定:
alias makearm='make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-'
alias makerpi='make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-'
alias makearm64='make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-'
然後安裝
# apt-get install qemu-user qemu-user-static
接下來執行底下指令來驗證 armhf 版本之編譯工具是否已安裝完成:
$ arm-linux-gnueabihf-gcc -v
$ arm-linux-gnueabihf-cpp -v
$ arm-linux-gnueabihf-g++ -v
然後請再執行底下指令來驗證 arm64 版本之編譯工具是否已安裝完成:
$ aarch64-linux-gnu-gcc -v
$ aarch64-linux-gnu-cpp -v
bash: aarch64-linux-gnu-cpp:命令找不到
lrwxrwxrwx 1 root root 25 10月 24 10:07 aarch64-linux-gnu-cpp -> aarch64-linux-gnu-cpp-4.9
建立完再重新執行一次:
$ aarch64-linux-gnu-cpp -v
此時應該就沒有問題了,請再執行最後一個程式的驗證:
$ aarch64-linux-gnu-g++ -v
看看是否已安裝完畢,接著可以作編譯 arm 版 hello.c 的程式,指令如:
~/prog $ arm-linux-gnueabihf-gcc hello.c -o hello_arm
接著檢查 hello_arm 是否為 ARM 之可執行檔:
~/prog $ file hello_arm
hello_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.18, BuildID[sha1]=ff5f6feea2e9b6d69384e8983758eb78c629276a, not stripped
確定有上面的檔案是 ARM 版可執行檔後,我們可以執行底下指令來驗證:
~/prog $ qemu-arm hello_arm
Hello World
接下來請執行底下指令,將 hello.c 編譯成 arm64 位元版本:
~/prog $ aarch64-linux-gnu-gcc hello.c -o hello_arm64
此時會編出一個 hello_arm64 的檔案,請執行底下指令來觀看此檔格式:
~/prog $ file hello_arm64
hello_arm64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=6a5f0a968cea7ef12c8dfb9873772f1660ea0b6c, not stripped
要驗證此檔是否可執行,請執行:
~/prog $ qemu-aarch64 hello_arm64
Hello World
截至目前為止,我們已完成 armhf、arm64 之編譯工具安裝及驗收,這些工具將成為未來編譯 arm 核心、u-boot 的基本工具。
Q:什麼是 armel ? 什麼是 armhf ? 什麼是 arm64 ?
請依照
https://wiki.debian.org/CrossToolchains
https://wiki.debian.org/EmdebianToolchain
https://wiki.debian.org/Embedded_Debian
來安裝,20 分鐘驗收。
沒有留言:
張貼留言