Embedded System 修課紀錄(1-1)
這篇文章主要是 Embedded System 修課紀錄(1) 的加分題,主要是完成 cross compiler 編譯環境或稱 build toolchain 的一連串活動,最後用 Qemu 模擬 Arm 的結果輸出。
準備工具
助教在 VirtualBox 提供的 binutils, gcc, newlib 版本如下所示
目錄架構
將所有檔案和程式碼編放於 /home/sn/lab3_project/ 底下
binutils-2.15.tar.bz2 編譯到 build-binutils,gcc-3.4.6.tar.bz2 則是 build-gcc,newlib-1.12.0.tar.gz 編譯到 build-newlib,而程式碼則放在 src 底下即可,而 toolchain 期望放在 arm-elf,因此相對應的指令為
操作過程
以下為 history 所留下的 command line 紀錄,並做分享
驗證 cross-compiler 成果
這是一定要的啊~所以我們來寫一隻 C 囉。
以下是 C 語言程式碼:
接著,試著編譯其他版本的 Source。另外有些許疑問 --enable-interwork, --enable-multilib 參數的使用時機以及參考文件 [3.] 所示,GCC 先 make all-gcc 而不是 make all,先去 make newlib C 函式庫,再回來GCC make all的用意。
參數說明
--target 有兩個 arm-elf 以及 arm-linux
arm-linux 的 binutils 使用 glibc library 並作 dynamic link, 所產生出的 binary code 適用於有 linux os 存在的環境。另一方面,arm-elf 的 bintuils 不會去調用glibc, 可以自己選擇 newlib 或 uClibc 為 static link,且開發linux based的嵌入式環境會選用 Glibc。
Reference
[1.] 楊教授課程授課資料
[2.] 自己動手打造Cross compile 環境(一)
[3.] 自己動手打造Cross compile 環境(二)
[4.] 編譯 GCC for ARM 錯誤
準備工具
助教在 VirtualBox 提供的 binutils, gcc, newlib 版本如下所示
binutils-2.15.tar.bz2 gcc-3.4.6.tar.bz2 newlib-1.12.0.tar.gz
目錄架構
將所有檔案和程式碼編放於 /home/sn/lab3_project/ 底下
binutils-2.15.tar.bz2 編譯到 build-binutils,gcc-3.4.6.tar.bz2 則是 build-gcc,newlib-1.12.0.tar.gz 編譯到 build-newlib,而程式碼則放在 src 底下即可,而 toolchain 期望放在 arm-elf,因此相對應的指令為
cd /home/sn/lab3_project/ mkdir build-binutils build-gcc build-newlib mkdir src
操作過程
以下為 history 所留下的 command line 紀錄,並做分享
- 解壓縮 Source
tar jxvf binutils-2.15.tar.bz2 tar jxvf gcc-3.4.6.tar.bz2 tar zxvf newlib-1.12.0.tar.gz
- 編譯並安裝 binutils
cd build-binutils/ ../binutils-2.15/configure --target=arm-elf --prefix=/home/sn/lab3_project/arm-elf make && make install && echo done
- 增加 /bin 路徑
export PATH=$PATH:/home/sn/lab3_project/arm-elf/bin
- 編譯並安裝 gcc
cd build-gcc/ ../gcc-3.4.6/configure --target=arm-elf --prefix=/home/sn/lab3_project/arm-elf/ --enable-languages=c --with-newlib make && make install && echo done
- 編譯並安裝 newlib
cd build-gcc/ cd build-newlib/ ../newlib-1.12.0/configure --target=arm-elf --prefix=/home/sn/lab3_project/arm-elf/ make && make install && echo done
驗證 cross-compiler 成果
- 編寫 Hello World!
這是一定要的啊~所以我們來寫一隻 C 囉。
cd src vim hello.c
以下是 C 語言程式碼:
#include <stdio.h> int main() { printf("Hello! World!\n"); printf("哈囉! C!\n"); return 0; }
- 編譯 hello.c
arm-elf-gcc hello.c
- 執行結果
sudo apt-get install qemu sudo qemu-arm hello // 輸出結果 Hello! World! 哈囉! C!
接著,試著編譯其他版本的 Source。另外有些許疑問 --enable-interwork, --enable-multilib 參數的使用時機以及參考文件 [3.] 所示,GCC 先 make all-gcc 而不是 make all,先去 make newlib C 函式庫,再回來GCC make all的用意。
參數說明
--target 有兩個 arm-elf 以及 arm-linux
arm-linux 的 binutils 使用 glibc library 並作 dynamic link, 所產生出的 binary code 適用於有 linux os 存在的環境。另一方面,arm-elf 的 bintuils 不會去調用glibc, 可以自己選擇 newlib 或 uClibc 為 static link,且開發linux based的嵌入式環境會選用 Glibc。
Reference
[1.] 楊教授課程授課資料
[2.] 自己動手打造Cross compile 環境(一)
[3.] 自己動手打造Cross compile 環境(二)
[4.] 編譯 GCC for ARM 錯誤
Comments
Post a Comment