在 debian(sarge) 中準備好 cross compiling 的環境

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

在 debian(sarge) 中準備好 cross compiling 的環境

文章louie » 週二 2月 15, 2005 6:09 pm

緣起:
由於最近有人拿了一台 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 !!!! ^_^
louie
快樂的大學生
快樂的大學生
 
文章: 593
註冊時間: 週一 9月 09, 2002 7:58 pm

文章flybird » 週一 7月 10, 2006 4:01 pm

http://people.debian.org/~debacle/cross/

I had a problem with building gcc with autoconf version 2.54 ("configure.in:2118: /usr/bin/m4: ERROR: Recursion limit of 1024 exceeded, use -L<N> to change it"), so I recommend to:

# apt-get install autoconf2.13


louie 寫:apt-get install amd64-libs-dev autoconf2.13 automake1.7 libtool dejagnu expect


第一個方法:
# tpkg-install mips-linux
從頭到尾只要一個步驟。於第一個方法中間遇到些問題。

請問您們是遇到相同的問題嗎?


------------------------------------------------------------
下面的套件關係,似乎也在暗示這種狀況!
Package: toolchain-source
Version: 3.4-5
Depends: dpkg-awk, dpkg-cross (>=1.17), m4, devscripts, wget
Recommends: tar ( >= 1.13.18 ), autoconf2.13, autoconf, automake1.4, automake1.7, libtool, autotools-dev, gawk, dejagnu (>= 1.4.3), expect (>= 5.38.0), debhelper (>= 4.1), bison (>= 1:1.875a-1), flex, gettext, texinfo (>= 4.3), zlib1g-dev, xlibs-dev, libncurses5-dev, libgmp3-dev, bzip2, gperf (>= 2.7-3), doxygen, sharutils, dpatch, tetex-bin, libreadline4-dev (>= 4.2a-1), gobjc, cdbs (>= 0.4.17), quilt (>= 0.30-1)
Suggests: gcc-3.2, binutils (>=2.13.90.0.4)
Filename: pool/main/t/toolchain-source/toolchain-source_3.4-5_all.deb
最後由 flybird 於 週一 7月 10, 2006 6:12 pm 編輯,總共編輯了 1 次。
車同軌、書同文,國方成!
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT

文章flybird » 週一 7月 10, 2006 5:35 pm

http://packages.debian.org/changelogs/p ... /changelog

toolchain-source (3.3-1) unstable; urgency=low

* Update binutils to 2.14.90.0.7
* Binutils package now dpatch based (closes: #238521)
* Updated gcc to 3.3.3
* Now recommends autoconf2.13 and automake1.4
* Applied pacth from John Zaitseff <J.Zaitseff@zap.org.au>
(closes: #222562, #222219)
+ Adds linux-kernel-headers to default libs
+ This patch downloads all packages to a user-defined
location, by default /tmp/tpkg-install-libc. This makes
it easier to clean up the temporary directory :-)
* Now includes a patched version of dpkg-cross with the patches from
bugs #222168 and #229241 apllied (closes: #219362)
* tpkg-install-libc now have more restrictive patternmatching on the
arch (closes: #205088, #223994)
* toolchain-source-gdb now recomends libncurses5-dev (closes: #205233)
* Updated manpage to reflect chancges (closes: #219355)
* Applied patch from Peter Chubb <peter@chubb.wattle.id.au> fixing bug
when multiple packages are matched (closes: #219357)
* Removed error message when toolchain-source-gdb not installed
(closes: #224003)
* Updaded gdb to 6.0

-- Hakan Ardo <hakan@debian.org> Fri, 2 Apr 2004 17:26:26 +0200
車同軌、書同文,國方成!
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客