more: Jollen 的 Embedded Linux 教育訓練

« 開放手機:Linux Mobile Phone | Home | 「開放式手機平台論壇」會後手札 »

[教育訓練紀錄] 交叉編譯(cross compile)thttpd

jollen 發表於 March 30, 2008 10:54 AM

本週進行 root filesystem 相關的教育訓練,今天給的課堂練習是 thttpd 的交叉編譯(cross compile)。thttpd 採用標準的 GNU autoconf 來產生 Makefile,因此,交叉編譯 thttpd 的方式是蠻簡單的。配合課堂提供的 cross toolchain(gcc 3.4.1),我們先定義以下有關 cross toolchain 路徑檔檔名的 Makefile 變數:

TOOL_TOP = /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu
CC = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-gcc
AR = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ar
LD = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ld
AS = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-as
STRIP = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-strip
RANLIB = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ranlib
TARGET_ARCH = arm-linux

接著再定義與 thttpd 的 'CFLAGS' 參數:

THTTPD_CFLAGS = -Os -Wall -mtune=arm9tdmi -march=armv4 \
                -fomit-frame-pointer -fsigned-char -fPIC

我們希望能有一個比較彈性以及系統化的做法,因此採用 Makefile 的系統來實作,不考慮編寫 script 的方式。接著,再定義一個 target,用來設定 thttpd 的 autoconf:

configured-thttpd:
        (export CC=$(CC); \
        export AR="$(AR)"; \
        export AS=$(AS); \
        export LD=$(LD); \
        export STRIP=$(STRIP); \
        export RANLIB=$(RANLIB); \
        export CFLAGS="$(THTTPD_CFLAGS)"; \
        ./configure \
                --prefix=/ \
                --host=$(TARGET_ARCH) );

我們想要用 'install' 指令來安裝 thttpd 執行檔到 root filesystem,因此 '--prefix' 參數的定義對我們講並不重要。Makefile 有良好的 dependencies 系統,所以我再撰寫一段 rule 如下:

thttpd: configured-thttpd
        make

接著,將以上的 Makefile 內容存檔,例如存成 thttpd.cross,再將這個檔案放到 thttpd 原始碼根目錄下,執行 make 並引用 thttpd.cross 的 'thttpd' target:

$ make -f thttpd.cross thttpd

一轉眼,我們得到 thttpd 的執行檔了。再將此 thttpd 執行檔加到 root filesystem 裡即可,別忘了,thttpd 需要幾個 shared library,把他們也加到 root filesystem 裡!還有,thttpd 會去讀取 user database(/etc/passwd 等),所以也要把 NSS 的 files 程式庫(libnss_files.so)加到 root filesystem 裡!

利用 Makefile 系統取代直接敲命令(或編寫 script)的麻煩做法,讓整個過程看起來簡單又清楚!

--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://blog.jollen.org/mt-tb.cgi/490

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org