MokoMakefile/zh tw

From Openmoko

Jump to: navigation, search


MokoMakefile 是在設立Openmoko Build 環境時儲存所有工作的Makefile。藉由自動化安裝新的Openmoko build 環境的過程,它提供所有的開發人員相同的設定環境。

透過設定新的Openmoko build 環境設定過程,它提供現有的開發人員相同的設定,但一般較喜歡透過手動或個別的設定程序設定。

它會為BUILD 環境產物提供相同的重覆性,並且可以像BitBake script放入OpenEmbedded 般輕鬆維護,並且提供建立OpenEmbedded的標準化過程。

它不像是在Building Openmoko from scratch中所提到的手動設定過程。MokoMakefile並不會安裝任何程式到你的系統裡(即使是一般的使用者也可以使用)。

MokoMakefile是一個可以將所有東西包裝起來,讓開發人員能透過Openmoko設定指引的過程,完成編譯,並且在開發環境下,它易於設定及維護。

MokoMakefile是由Rod Whitby 所開發--它並不是一個Openmoko正式的產品。 若它與official Openmoko build instructions及MokoMakefile有差異之處,你應該考慮用正式的操作來修正它。 MokoMakefile 可以建立OM-2007.1 或OM-2007.2 影像檔。核心團隊選擇預設值,但是你可以選擇Makefile中的一些工具來使用。

MokoMakefile也可以建立 QEMU-based Neo1973 模擬器,將它視為安裝及執行Openmoko映像檔的目標裝置。這些指令也可以在沒有下載整個Openmoko OpenEmbedded套件的狀況下下載及建立映像檔。你可以在Using QEMU with MokoMakefile中找到這個部份的說明。

Contents

建置Openmoko的需求

不論單獨或者是使用客製化的方法使用MokoMakefile來安裝Openmoko 環境,你必須符合某些需求,讓Openmoko build 可以成功運做:

  • RAM:build host 必須擁有至少512MB的RAM,及與它相同大小的swap空間。有一些套件像是busybox由OpenEmbedded建立,它是藉由先編譯所有的來源檔案,使它成為二進位檔,它會讓 gcc 增加為超過 300MB 的大小,因此,會導致沒有記憶體可以用做swap之用,造成無法預期編譯時間的狀況。

對於busybox,這個可以關閉它,但關閉它並不會表示它能被gcc最佳化。

  • 磁碟空間:你必須擁有12GB的可用硬碟空間,供給Openmoko build 使用(你可以參考下面的章節暸解怎麼減少所需磁碟空間用量)。
  • 時間:initial build 會花費至少5小時的時間 (在沒有最佳化的多處理器的 2GHz core2duo 硬體環境下)且,在更慢速度的環境下,它可能會花費更長的時間。

需求軟體

OpenEmbedded 用來控制系統的版本是monotone,它並不是由MokoMakefile下載及安裝的。如果你的套件並沒有提供套裝軟體,你可以從http://monotone.ca 下載並安裝穩定的二進位檔。


在http://www.openembedded.org/wiki/OEandYourDistro 中,你可以看到有一些套件特別隱喻指出要準備給OpenEmbedded使用的build host,但它可能有點老舊,不完整,並且不包含Openmoko需要的內容。

the section on build host prerequisites in Building Openmoko from scratch是很好的導引文章。

如果你忘記了OE本身所必須使用的東西,OE將會在你開始build 時出現提示,但是它並不會查看Openmoko的BUILD獨立性,所以,你必須在開始前先安裝它,或者在build失敗之後安裝它們。OpenEmbedded 會在你上次中斷build的地方重新開始。

依套件而衍生的套裝軟體需求

你的套件必須能提供以下的指令,以便於OpenEmbedded開始建立build:

subversion texi2html texinfo help2man

Openmoko須要開發套件(搭配header檔案、開發程式庫及工具) 以利於完成BUILD:

ncurses zlib (or libz) OpenSSL GTK++

因為在與QEMU及GCC-4互動時產生問題,你也必須安裝gcc-3.x 。


Debian / Ubuntu

apt-get install subversion monotone build-essential help2man diffstat texi2html texinfo cvs gawk cogito

apt-get install libncurses5-dev zlib1g-dev libssl-dev libgtk2.0-dev

  1. To prevent errors in host validation

apt-get install ca-certificates

  1. For Openmoko 2007.2 using BitBake-1.8.8:

apt-get install python-pysqlite2 sqlite3 sqlite3-doc python-pysqlite2-dbg

  1. For building faster

apt-get install quilt python-psyco ccache

  1. For qemu, install a second compiler for bug avoidance; MokoMakefile knows to look for it.

apt-get install gcc-3.4 g++-3.4 libsdl1.2-dev lynx netpbm dosfstools

SuSE

要在10.3上建立Openmoko,你必須要使用:

gcc-c++ ncurses-devel zlib-devel libopenssl-devel gtk2-devel subversion diffstat texinfo help2man and monotone

為了讓MokoMakefile不要在編譯QUMU-USER時失敗,你必須使用gcc33:

wget download.opensuse.org/repositories/devel:/tools:/gcc/openSUSE_Factory/i586/{cpp,gcc}33-3.3.3-41.8.i586.rpm rpm -Uhv {cpp,gcc}33-3.3.3-41.8.i586.rpm

你可以在Talk page on Building on SuSE Linux 10.3-AMD64中找到它的內容。

10.1 及 10.2: 它與10.3套件相同,但是會安裝 openssl-devel 而不是libopenssl-devel。針對monotone,請使用10.2 or 10.1

針對所有的套件

如QEMU-based neo1973 模擬器也可以像由MokoMakefils開始建立映像檔的其中一部份,所以,你需要gcc-3.3及其它的軟體套件來建立QEMU安裝。你可以參考在在MokoMakefile中使用UEMU中的 建立映像檔基本需求 中所提到需求軟體訊息。

在編譯 QEMU 的過程若你有任何問題,或者是你不需要用到它,你可以藉由在build/conf/local.conf 檔案中加入下列的指令,來停用QEMU。

ENABLE_BINARY_LOCALE_GENERATION = "0"

使用MokoMakefile建立Openmoko套件

1 - 建立你的 $OMDIR 目錄 (請注意你可以將 ~/moko 目錄修改為任何你喜歡的目錄。如果你已經從不同的檔案系統掛載了 ~moko 目錄,請確認你有編輯 /etc/mtab目錄,為檔案系統加入'執行'權限,否則 bitbake則會出現錯誤訊息:

mkdir ~/moko ; cd ~/moko 2 - 取得MokoMakefile:

wget http://www.rwhitby.net/files/openmoko/Makefile

如果它無法使用的話,請試著使用下面的指令:

wget http://svn.projects.openmoko.org/svnroot/mokomakefile/trunk/Makefile

note: 如果你想要從舊版的 2007.1 開始編譯,而不是使用新版的內容編譯Makefile,請從如下的內容開始編輯: OPENMOKO_GENERATION = 2007.1

  1. OPENMOKO_GENERATION = 2007.2
NOTE: 為了要建立2007.2,MokoMakefile使用的BitBake 1.8.8必須使用需要python-sqlite2 及 sqlite-3.3或之後的版本。SUSE Linux 10.1的使用者可以從 這裡更新openSUSE 10.2


3 - 設定環境: make setup 4 - 開始building。在程序開始之前,請查看Tips一節,取得Make multicore aware。你可能想要修改build/conf/local.conf 檔案到你的目的地 (emulation/chroot) 環境:

make openmoko-devel-image

Hint: 使用這個指令建立的映像檔可以在下面的路徑下找到{$OMDIR}/build/tmp/deploy/images/neo1973

它將會設定在從scratch中建立Openmoko建議的路徑結構,它會下載所有需要的檔案(從正確的地方取得正確的版本),它將會立刻開始建立影像檔。

一旦你做好了它,你可以選擇繼續使用MokoMakefile來啟始你拉下來的build,或者你可以進入build 目錄,並且手動執行bitbake指令。你可以自行選擇自己要的方法。

更新環境

為了要更為容易的維護你所建立的環境,下面的指令是很有用的。

1 - 將MokoMakefile更新到最近的版本:

make update-makefile

2 - 確認建立的目錄架構是否有任何新的變更:

make setup

3 - 要更新放置Openmoko原始碼及檔案的儲存位置及MokoMakefile patches到最近的版本:

make update

以最後變更的項目來重建新映像檔的最快方法:

make update-makefile && make setup update openmoko-devel-image

與製作映像檔相關的問題

首先,確認在執行下面指令後,問題是可以重新製作:

make update-makefile && make setup && make update

之後,執行:

make clean-package-<foo>

( <foo> 替代為失敗的軟體名稱)

最後,

make openmoko-devel-image

如果好運的話--你應該會在 $omdir/build/tmp/deploy/glibc/images/neo1973/ 目錄下找到映像檔。 接著,你可以參考 |Flashing openmoko更新這些內容

若是沒有找到映像檔的話,你可以在執行此一系列的命令列(包含更新及安裝操作)之後得到約三次的錯誤訊息,之後就可以將報告放到IRC中。

已知的MokoMakefile錯誤

從OM-2007.1 更新到 OM-2007.2,你會歷經下列過程:

Patch bitbake-1.6.6-om3.patch does not apply (enforce with -f)

然後,鍵入 "make clobber-patches" 修復它。若在MokoMakefile中有BUG的話,它可能會進行約24小時。一旦patches遭到破壞,他們將會重新下載,並且這個問題就不會再發生。

如果你看到下列訊息:

ERROR: No providers of build target u-boot-openmoko (for [])

查看日誌記錄來查看你是否遇到了與建立openmoko-devel-image 相同的錯誤,上面的錯誤是MokoMakefile的邏輯性的邊際效應,只要將"uboot-openmoko" 重新以 "u-boot-openmoko"命名即可。

修正套件/特定環境或獨立性問題

暫時性或獨立的問題時,都可以在討論頁中找到相關的內容。當他們被修復之後,他們將會從那個頁面中被移除。

Tips

  • 你可以藉由下列指令,減少消耗的磁碟空間:

INHERIT += "rm_work"

將這行指令加到 local.conf (e.g. ~/moko/build/conf/local.conf)。 在相對應的軟體套件正確建立後,它將會移除T每一個映像檔中的/tmp/work/*/<package> 目錄。在10/16/07中,預設的情況下,它會出現在local.conf中。

  • 如果你在monotone中遇到了如下的錯誤:

mtn: misuse: database /home/username/moko/OE.mtn is laid out according to an old schema

接著,你須要昇級OE.mtn。在~/moko中使用以下的內容:

  1. mtn --db OE.mtn db migrate
  • 如果特定的套裝軟體,因為下載中斷或者是試圖移動原始碼及重建它而沒有進行建立映像檔的工作:

rm sources/<package>* cd build . ../setup-env bitbake -crebuild <package>

之後,你的BUILD可能必須重新運作一次。

  • 針對擁有多個CPU的使用者(或者dual-core)而言,這個小的patch對於加速建立映像檔的工作,會有些作用。

編輯local.conf 並且加入下列指令列: PARALLEL_MAKE = "-j 4" BB_NUMBER_THREADS = "4"

變更PARALLEL_MAKE 及 BB_NUMBER_THREADS 值,以配合裝置。

  • 針對amd64 主機的使用者,你必須從http://bugs.openembedded.org/show_bug.cgi?id=1765 修補到db3-native
  • 如果遇到與 qemu-native 軟體相關的錯誤,並且沒有從qemu編譯,你可以編輯 build/conf/local.conf 檔案,並且啟用ENABLE_BINARY_LOCALE_GENERATION = "0" 指令列來避免這個錯誤。
  • 要避免locales過大,在local.conf中加入以下的指令:

GLIBC_GENERATE_LOCALES = "en_US.UTF-8 nl_NL.UTF-8"

  • 為了不要建立二位元的locale,請加入以下的內容到local.conf:

ENABLE_BINARY_LOCALE_GENERATION = "0"

  • 若你想要重建軟體的索引 (如,在編譯新版的軟體時)而不要建立 openmoko-devel-image,請執行run make build-package-package-index

User:Wurp 將會更新它,讓它變為易於理解的,但也許它同時也可以幫忙很多人。

  • 如果MokoMakefile經常在zlib的部份失敗,請找出它的二位元檔案,將它下載或手動加到原始的目錄下(有必要的話,建立.md5),並且重試。

好用的指令列

以下是MokoMakefile中較有用的指令清單(actually make targets) 及針對這些指令的一些簡單的介紹。它應該在$OMDIR 中執行。

make openmoko-devel-image :建立完整的開發映像檔。
make openmoko-devel-tools :建立靜態連結的dfu-utilopenocd二位元檔
make openmoko-toolchain : 建立toolchain
make qemu:建立qemu,從正式的下載點下載更新映像檔,更新qemu模擬的Neo1973並且執行模擬器(請參考Openmoko under QEMU)。
make qemu-local :與make qemu,但是使用本機建立的映像檔,而不是官方的映像檔。
make run-qemu : 使用usb 鍵盤執行qemu(note: qemu 必須先建立好!)。它主要是啟動預先定義選項的模擬器。如果你需要以其它的選項(如enable、telnet)來啟動它的話,請參考QEMU_command_line
make build-package-<package name> 
建立 <package name> 套件
make update-makefile 
更新MokoMakefile
make clean-package-<foo>
清除 "<foo>" 套件
make setup 
確認目錄結構中任何最近的更新是否被套用。
make update 
要更新Openmoko repository checkout and the MokoMakefile patches to the latest version

使用MokoMakefile開發程式

NOTE: 如果將MokoMakefile用在OM2007.2上,並且參考$OMDIR/openmoko,它應該用$OMDIR/openembedded取代與置換。Also references to tmp/work/armv4t-linux should be replaced with tmp/work/fic-gta01-angstrom-linux-gnueabi


針對下列的解釋 $OMDIR 是Makefile放置所有東西的位置。

要讓in-tree 變更,並且讓它們可以被qemu使用:

cd $OMDIR/openmoko quilt new descriptive-patch-name.patch quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify ...make the changes... quilt refresh # this creates a file in $OMDIR/patches/openmoko-HEAD/ and updates the quilt series file there

Note: DoNOT absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!

要建立變更內容,並且 讓他們可以被qemu使用:

make build-qemu make flash-qemu-local make run-qemu

如果你想要修改應用程式,而不是Openmoko toolchain,它是你必須做的工作(如:openmoko-messages):

cd $OMDIR/build . ../setup-env bitbake -c unpack openmoko-messages cd tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/ ...make the changes... cd - bitbake openmoko-messages

然後,繼續使用MokoMakefile。

如果你想要在Openmoko套件中加入應用程式,請進行下列工作: 所有的檔案編輯都應該使用quilt。這樣patch就可以輕鬆的送到openmoko專案當中。 首先,建立一個與套件相對應的路徑,並且編輯這個路徑下的 .bb 檔案。 cd $OMDIR/openmoko/ quilt new mycoolpackage.patch mkdir trunk/oe/packages/mycoolpackage quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb

這個檔案應該有下面的內容:

DESCRIPTION = "This is a cool package" SECTION = "username/mycoolpackage" PV = "1"

inherit autotools

SRC_URI = "http://www.example.com/download/mycoolpackage-1.tar.gz"

Explanation:

  • DESCRIPTION - 解釋套件用途的簡短說明。
  • SECTION - 現在,我會使用username/mycoolpackage
  • PV - 套件版本
  • inherit autotools - 這個套件可以被'./configure && make && make install' 編譯,所以我們可以讓MokoMakefile用這個方法運作。
  • SRC_URI = ... - 這是軟體下載的位置,tar.gz包含了名為packagename-packageversion的目錄,(在這個案例中,為 mycoolpackage-1),因此MokoMakefile可以自動找到它,或者這個build會失敗。

這並不是全部,我們也會需要告訴MokoMakfile它需要被建立,並且在映像檔中包含軟體套件。要完成這個工作,請執行下面的指令:

$OMDIR/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb

在這裡,在讀入# update-alternatives \. 程式行前,加入 PRmycoolpackage \ (使用\符號)

現在,執行

quilt refresh cd .. make update openmoko-devel-image

如果每一件事都順利的話,你應該建立好了可以更新到手機的Openmoko映像檔,並且可以在qemu 執行。

Hello World 應用程式範例

Hello World範例程式!手冊可以在這裡下載。

感謝狀

MokoMakefile被#openmoko開發人員所推崇: "因為某些原因,我無法手動安裝每個套件,讓(bb 抱怨我的 bbpath ) ... 但是使用你的makefile,它可以順利的運作。 " "MokoMakefile rocks!" "Wow this build system is nice - it just seems more polished than my gumstix toolchain buildroot system", and "make openmoko-devel-image :) - no magic there".

專案網頁: http://mokomakefile.projects.openmoko.org/

Personal tools