緣起:
由於最近有人拿了一台 tivo 來玩,在了解原來 tivo 也是用 linux 為 OS 後,興起了在上面裝上一般 debian 中有的 app 的衝動。在到處搜尋了資料後,找到一些別人編譯好的 binary,但是發現有些根本找不到,或找到了但是無法在這台 tivo 上用,於是想說既然是 linux,應該能自行 compile 出 binary,才有這篇的產生。
在經過幾天的奮鬥後,終於在 debian(sarge) 中 compile 出第一個 tivo 用的 mips binary,這樣子就不用每次都得找人家 compile 好的 binary,而是自己要什麼,就 compile 什麼來用。
先決條件: (要預先裝好的 packages)
以下的東東大部份都是在過程中會用到的,因此就先裝起來,以免編到一半又要裝上重新編一遍。
apt-get install toolchain-source
apt-get install toolchain-source-gdb gcc-3.4-base
apt-get install build-essential dpatch fakeroot
apt-get install amd64-libs-dev autoconf2.13 automake1.7 libtool dejagnu expect
apt-get install gperf bison flex libgc-dev xlibs-dev gnat libgmp3-dev help2man
apt-get install libart-2.0-dev g77-3.3 gobjc-3.3 realpath doxygen
apt-get install gnupg(可有可無,用來簽署 debian package 用的)
以下指令中提示符號為 # 表示要 root 權限,$ 則為一般 user 即可。
先將這篇的主角 toolchain-source 給裝起來
# apt-get install toolchain-source
cross compiling 環境有二個方法來安裝:
第一個方法:
# tpkg-install mips-linux
從頭到尾只要一個步驟。
第二個方法:由於第一個方法中間遇到些問題,因此採用此方法,將步驟分解成幾個小步驟,各個擊破。
$ cd /usr/src/
$ EMAIL='you@there.org' tpkg-make mips-linux
會在目前目錄下準備好 binutils-mips-linux-2.15, gcc-mips-linux-3.4.3, and gdb-mips-linux-6.1
安裝 binutils:
將 binutils 從 source 編譯並做成 .deb 檔
$ cd binutils-mips-linux-2.13.90.x.y/
$ debuild
安裝新編好的 binutils
# debi
安裝 libc:
#tpkg-install-libc mips-linux
內定是用 ftp.debian.org 為 mirror 來抓檔案,也可用以下指令來改位置:
# TPKG_SERVER=os.nchc.org.tw tpkg-install-libc mips-linux
安裝 gcc:
$ cd gcc-mips-linux-3.2.z/
$ debuild
# debi
這時可檢查看看裝了那些 package:
$ COLUMNS=100 dpkg --list|grep mips
ii binutils-mips-linux 2.15-5 Binary utilities for cross-developing for mips-linux
ii cpp-3.4-mips-linux 3.4.3-1 The GNU C preprocessor
ii g++-3.4-mips-linux 3.4.3-1 The GNU C++ compiler
ii gcc-3.4-mips-linux 3.4.3-1 The GNU C compiler
ii gdb-mips-linux 6.1-1 The GNU Debugger for mips-linux
ii libc6-dev-mips-cros 2.3.2.ds1-20 GNU C Library: Development Libraries and Header Files
ii libc6-mips-cross 2.3.2.ds1-20 GNU C Library: Shared libraries and Timezone data (for
ii libdb1-compat-mips- 2.1.3-7 The Berkeley database routines [glibc 2.0/2.1 compatib
ii libgcc1-mips-cross 3.4.3-1 GCC support library
ii libstdc++6-dbg-mips 3.4.3-1 The GNU Standard C++ Library v3 (debugging files)
ii libstdc++6-dev-mips 3.4.3-1 The GNU Standard C++ Library v3 (development files)
ii libstdc++6-mips-cro 3.4.3-1 The GNU Standard C++ Library v3
ii libstdc++6-pic-mips 3.4.3-1 The GNU Standard C++ Library v3 (shared library subset
做個測試:拿個最著名的小程式來試試 hello
You may test the newly installed environment by unpacking a simple, but famous program: hello
$ cd /usr/src/
$ apt-get source hello
$ cd hello-2.1.1
$ CC=/usr/bin/mips-linux-gcc ./configure --host=mips-linux
$ make -k
$ file ./src/hello
./src/hello: ELF 32-bit MSB MIPS-I executable, MIPS, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), not stripped
但是上面產生的 binary 為 dynamically linked,將 binary 拿到 tivo 中執行,會說找不到 shared library,因此我們要將 binary 弄成 statically linked 才行
but above is for dynamically linked, if you want to use statically linked version, must change to follow:
$ CC=/usr/bin/mips-linux-gcc LDFLAGS="-static" ./configure --host=mips-linux
$ make -k
$ file ./src/hello
./src/hello: ELF 32-bit MSB MIPS-I executable, MIPS, version 1 (SYSV), for GNU/Linux 2.4.0, statically linked, not stripped
將檔案用 ftp 上傳至 tivo 中並執行看看
upload binary to the destination and run
bash-2.02# ./hello
Hello, world!
Yah, it works !!!! ^_^