Asterisk Cross-Compilation for ARM Processor

    版本為 16:48, 20 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    說明

    此篇再說明如何建立一個 Cross-Compile 的 Linux x86 編譯環境,透過相對應 CPU 的 toolchain,就可編譯適合嵌入系統的 Asterisk 套件。

    重點項目如下:

    • 選擇一個好用的 Linux x86 系統,可運作在實體機器或虛擬機,本次使用 Ubuntu 10 32-bit 於 VMware ESXi 下。
    • 下載合適的 toolchain 檔案(應該要包含所需的編譯器程式等),並建立 Cross-Compile 執行環境。
    • 先 Cross-Compile ncurses 套件,這是編譯 Asterisk 時所需要的。
    • 開始 Cross-Compile Asterisk 套件

    安裝 Ubuntu 10 x86 Linux

    • 選擇一般安裝即可。
    • 可安裝在實體機或虛擬機。

    建立 Cross-Compile 編譯環境

    • 依照 embedded system 所用的處理器,找尋並下載 toolchain 的檔案,內含有需要的各種編譯器程式檔。本次以這個 toolchain: arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 為例。
    • Cross-Compile 不需要 root 權限,所以在 /home 目錄下作業即可。
    • 手動建立幾個作業目錄
      • ~/ARM_Cross-Compile/toolchain : 用來放各種不同的 toolchain 檔。
      • ~/ARM_Cross-Compile/build_source : 要編譯套件的原始檔
      • ~/ARM_Cross-Compile/build_opt : 已作完 Cross-Compile 的套件執行目錄。
      • ~/ARM_Cross-Compile/build_start : 實際作 Cross-Compile 的工作目錄。
    • 修改 PATH
      編輯 ~/.profile,加上 toolchain 的編譯器執行檔路徑
      export PATH="$PATH:/home/alang/ARM_Cross-Compile/toolchain/CodeSourcery/bin/
      注意:如果要更換不同的 toolchain 作 cross-compile,必須先修改 PATH 以及在作 cross-compile 過程中的 CC, CXX 等變數。

    Cross-Compile ncurses

    cd /home/alang/ARM_Cross-Compile/build_start/ncurses-5.9/
    
    CC=arm-none-linux-gnueabi-gcc \
    CXX=arm-none-linux-gnueabi-g++ \
    ./configure arm-linux --host=arm-none-linux-gnueabi --with-shared --without-ada --with-build-cc=gcc --with-build-cpp=arm-none-linux-gnueabi-g++ --enable-termcap  --prefix=/home/alang/ARM_Cross-Compile/build_opt/ncurses
    
    make
    make install
    

    Cross-Compile Astrisk

    for Asterisk 1.8.x

    cd /home/alang/ARM_Cross-Compile/build_start/asterisk-1.8.10.1
    
    CC=arm-none-linux-gnueabi-gcc \
    AR=arm-none-linux-gnueabi-ar \
    CXX=arm-none-linux-gnueabi-g++ \
    CPPFLAGS="-I/home/alang/ARM_Cross-Compile/build_opt/ncurses/include/ncurses/" \
    LDFLAGS="-L/home/alang/ARM_Cross-Compile/build_opt/ncurses/lib" \
    RANLIB=arm-none-linux-gnueabi-ranlib \
    ./configure --build=i386-pc-linux-gnu --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --without-pwlib --without-curl --with-ncurses=/home/alang/ARM_Cross-Compile/build_opt/ncurses --disable-xmldoc --prefix=/home/alang/ARM_Cross-Compile/build_opt/asterisk18_arm
    
    make menuselect
    make
    make install
    make samples
    

    for Asterisk 10.x
    註:Asterisk 10 已經將內建的 AST DB 改成 SQLite3,所以必須先編譯 SQLite3。

    cd /home/alang/ARM_Cross-Compile/build_start/asterisk-1.8.10.1
    
    ./configure \
    CC=arm-none-linux-gnueabi-gcc \
    AR=arm-none-linux-gnueabi-ar \
    CXX=arm-none-linux-gnueabi-g++ \
    CPPFLAGS="-I/home/alang/ARM_Cross-Compile/build_opt/ncurses/include/ncurses/" \
    LDFLAGS="-L/home/alang/ARM_Cross-Compile/build_opt/ncurses/lib" \
    RANLIB=arm-none-linux-gnueabi-ranlib \
    --build=i386-pc-linux-gnu --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --without-pwlib --without-curl --with-ncurses=/home/alang/ARM_Cross-Compile/build_opt/ncurses --with-sqlite3=/home/alang/ARM_Cross-Compile/build_opt/sqlite3 --disable-xmldoc 
    

    TIPs

    CPPFLAGS 用法是 -I<非標準的 include 目錄>

    LDFLAGS 用法是 -L<非標準的 library 目錄>

    Powered by MindTouch Core