Customizing the Openmoko Distribution/zh tw
From Openmoko
(→變更 classes/ 下的檔案) |
m (-Guides, +System Developers) |
||
(18 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|Customizing the Openmoko Distribution}} | ||
+ | |||
+ | |||
+ | |||
== 目標 == | == 目標 == | ||
− | + | 本頁內容主要是教您如何將自行撰寫的應用程式程式碼(或者範例程式)涵蓋到你的rootf。這篇文章屬於綜合性的文章。這篇文章的內容是綜合了[[MokoMakefile]]、[[User:CesarB/Using a local overlay|Using a local overlay]]、[[Building a hello world application|建立Hello World 應用程式]]及[[Create a package from existing sources|自目前的原始碼中建立]]。 | |
因此,你可以看到本篇文章的目地是做一個最通透的介紹,它會為你帶來應用程式的概念。 | 因此,你可以看到本篇文章的目地是做一個最通透的介紹,它會為你帶來應用程式的概念。 | ||
Line 16: | Line 20: | ||
== 架構設定== | == 架構設定== | ||
− | + | 如果你想要設定一個本機的架構,這表示你必須進行下列的工作。首先,你必須有在Openmoko平台下開發程式的想法。第二:你必須執行正確的工作,並且你不會做出任何像是將Openmoko套件包含在本身目錄下的蠢事,最後讓它自我覆藝掉,或者,你只暸解到它是一個不良的示範。 | |
如果你並不暸解本機的架構,那就讓我花一點時間來解釋。本機架構指的就是身為程式開發人員,將你的本機檔案放在OE style安裝下,讓你可以能輕鬆的將更新的程式放進你的樹狀目錄下。你可以將你的架構樹(overlay tree)放進bitbake 安裝,這樣就可以在你呼叫bitbake時,它將會在進入OE或者是Openmoko樹時,先行置入。這樣可以讓事情都保持組織完整及運做,並且允許使用[[MokoMakefile]]在你的應用程式中建立/rebuild/。 | 如果你並不暸解本機的架構,那就讓我花一點時間來解釋。本機架構指的就是身為程式開發人員,將你的本機檔案放在OE style安裝下,讓你可以能輕鬆的將更新的程式放進你的樹狀目錄下。你可以將你的架構樹(overlay tree)放進bitbake 安裝,這樣就可以在你呼叫bitbake時,它將會在進入OE或者是Openmoko樹時,先行置入。這樣可以讓事情都保持組織完整及運做,並且允許使用[[MokoMakefile]]在你的應用程式中建立/rebuild/。 | ||
Line 54: | Line 58: | ||
請確認在名為BBFILE_COLLECTIONS內有BBFILE_PRIORITY_* 及BBFILE_PATTERN_* f。舉個例子來說,你只定義了上列的內容,即會減少 BBFILE_COLLECTIONS 到架構中。 | 請確認在名為BBFILE_COLLECTIONS內有BBFILE_PRIORITY_* 及BBFILE_PATTERN_* f。舉個例子來說,你只定義了上列的內容,即會減少 BBFILE_COLLECTIONS 到架構中。 | ||
− | * | + | *變更 <code>BBPATH</code> 環境變數,加入新的架構樹到<code>setup-env</code> 檔案前。 Bitbake看起來只會使用它找到的第一個 site.conf 檔案。 <code>setup-env</code> 是由 [[MokoMakefile]] 自動建立的。而它位於 <code>${OMDIR}</code> 目錄下。 |
− | + | 滙出 BBPATH="${OMDIR}/local:${OMDIR}/build:${OMDIR}/oe:${OMDIR}/openembedded" | |
== 使用本機架構 == | == 使用本機架構 == | ||
Line 68: | Line 72: | ||
要變更classes/,請將檔案複製到架構樹下,並且編輯它。 | 要變更classes/,請將檔案複製到架構樹下,並且編輯它。 | ||
− | === | + | === 變更套件 === |
− | + | 變更套件有點小小的複雜。你必須將它複製起來 (or symlink) 而不是只針對套件複製.bb的檔案,同時也必須複製 ''所有'' <code>require</code>及<code>FILESDIR</code> 目錄。(所有對應到 <code>FILESDIR</code>下的目錄,通常被命名為 ''package''-''version'' 或者是or <code>files</code>)。如果你忘記了他們其中的一個,build 會給你錯誤訊息(這也會發生在傳送<code>FILESDIR</code>時,或者當你試著建立 <code>FILESDIR</code> 目錄時發生)。 | |
− | === | + | === 加入新套裝軟體 === |
− | + | 你可以藉由在架構中建立它來加入新的套裝軟體 ( 或者為新版的套裝軟體加入 recipe )。 | |
− | === | + | === 建立自己的影像檔 === |
− | + | 要建立你自己的映像檔的話,我們會使用 openmoko .bb 檔案,並且修改它。當你看到 ''scaredycat'' 用其它的東西取代掉它,以驗證你自己的映像檔。 | |
− | + | 編輯local/packages/images/scaredycat-openmoko-devel-image.bb 並且貼入如下的內容: | |
<pre> | <pre> | ||
Line 89: | Line 93: | ||
</pre> | </pre> | ||
− | + | 然後編輯local/packages/images/scaredycat-openmoko-image.bb | |
<pre> | <pre> | ||
#------------------------------------------------------ | #------------------------------------------------------ | ||
− | # | + | # Openmoko Image Recipe |
#------------------------------------------------------ | #------------------------------------------------------ | ||
Line 120: | Line 124: | ||
− | + | 編輯 local/packages/tasks/task-openmoko-scaredycat.bb - 這裡是我們想要在映像檔中放入想要的東西的目錄位置。這個範例包括了 '''[http://wiki.openmoko.org/wiki/Scummvm scummvm]'''及 '''[http://www.handhelds.org/moin/moin.cgi/kbdd kbdd]'''。如果你修改了這個檔案,請確定你藉由每次增加它的次數的方法,更新 '''PR''' 。 | |
<pre> | <pre> | ||
− | DESCRIPTION = " | + | DESCRIPTION = "Openmoko: Scaredycat Additions" |
SECTION = "openmoko/base" | SECTION = "openmoko/base" | ||
LICENSE = "original" | LICENSE = "original" | ||
Line 137: | Line 141: | ||
</pre> | </pre> | ||
− | ==== | + | ====實際的建立映像檔 ==== |
To build you image, which will be located with your other images, do the following: | To build you image, which will be located with your other images, do the following: | ||
Line 143: | Line 147: | ||
# cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image | # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image | ||
− | == | + | == 你的第一支程式 == |
− | + | 我知道我己經說過我有一支 GDK 程式,但是,我希望能讓這個課程完成,並且讓各位可以先著手開始寫程式,而不是看著我如何寫程式。 | |
− | + | 這是一支很簡單的 CLI hello world。 | |
− | === | + | === 在我們開始撰寫程式之前 === |
− | + | 一個好的程式人員在寫程式時,是會有明確的想法,並且知道自己是朝向對的開發方向。 | |
+ | 現在將目錄變更到<code>local/packages</code> ,下方的指令會希望你是在這個目錄下執行: | ||
+ | 你會希望用你的程式名稱做為目錄名稱,及使用檔案名稱做為子目錄的名稱。 | ||
− | |||
− | |||
− | |||
mkdir myhelloworld myhelloworld/files | mkdir myhelloworld myhelloworld/files | ||
− | + | ||
+ | 現在,你會想要在<code>files</code> 目錄下建立兩個檔案。 | ||
+ | |||
touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c | touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c | ||
− | + | ||
+ | 最後,你會想要建立一個bitbake file。 | ||
+ | |||
touch myhelloworld/myhelloworld.bb | touch myhelloworld/myhelloworld.bb | ||
− | + | 好了,現在必要的檔案都建立完成了,讓我們速度快點。 | |
<pre> | <pre> | ||
$HOME | $HOME | ||
Line 175: | Line 182: | ||
</pre> | </pre> | ||
− | + | 你的目錄結構會像上述結構,如果你的目錄樹並沒有如上的型態,請修復你的目錄樹。 | |
− | === | + | ===填入檔案 === |
− | + | 所以,現在你己經放好了所有的檔案,現在讓我們實際的來做出一些東西。 | |
myhelloworld.c | myhelloworld.c | ||
Line 228: | Line 235: | ||
</pre> | </pre> | ||
− | === | + | === 第一次執行編譯=== |
+ | |||
+ | [[MokoMakefile]]現在已經很容易操作了,現在切換到 ${OMDIR} 目錄下,你會看到 <code>Makefile</code> 放置的地方。 | ||
− | |||
make build-package-myhelloworld | make build-package-myhelloworld | ||
− | ( | + | (請確定你在建立你的軟體前至少執行了make openmoko-devel-image 一次。) |
− | + | 在沒有出現錯誤訊息的狀況下,最後會顯示出如下的訊息。 | |
<pre> | <pre> | ||
NOTE: package myhelloworld-1.0: completed | NOTE: package myhelloworld-1.0: completed | ||
Line 243: | Line 251: | ||
</pre> | </pre> | ||
− | + | 若沒有出現任何錯誤訊息的話,就大功告成囉! | |
− | == | + | == 將開發的程式加入映像檔 == |
− | + | 現在,我們建立好了開發環境,也架構好了架構,更架設好了目錄樹,你現在要將程式放在映像檔裡,並且完成編譯後,現在你要做的事就是,將你開發的程式放到映像檔中。 | |
− | + | 現在讓我們來看看要如何處理。首先,我們需要修改 <code>${OMDIR}/build/conf/local.conf</code>。將它加入變數,<code>DISTRO_EXTRA_RDEPENDS</code>,並且將它的值加入 <code>myhelloworld</code>。如果你想要在你自己的架構中或者是OM的架構下加入軟體,請將它們以空白分隔的方式加入。在將軟體變成套件(即Openmoko)的附加物後,現在我們必須重新建立 task-base 套裝軟體。它必須產生一個ipk檔案,能"整合裝置及套件選項來建立一個基本的套裝軟體。" 對於套件是否能運作良好,它會建立一個列有會被安裝的內容的安裝檔案。所以,接著你必須歷經製作 <code>openmoko-devel-image(映像檔)、 build-qemu(建立QUEM)、在本機上更新QUEM( flash-qemu-local)、並執行</code><code>qemu</code>。然後標準化你的觸控筆與螢幕的感度,並執行你的應用程式。 | |
+ | |||
+ | |||
+ | === 修改local.conf === | ||
+ | 現在,切換到設定檔目錄下<code>${OMDIR}/build/conf/</code> ,並且編輯<code>local.conf</code> | ||
+ | 將下列內容放入你的 <code>local.conf</code>檔案中 | ||
− | |||
− | |||
− | |||
DISTRO_EXTRA_RDEPENDS += "myhelloworld" | DISTRO_EXTRA_RDEPENDS += "myhelloworld" | ||
− | + | ||
+ | 在加入這行程式後,你也可以從OE目錄下將其它應用程式涵括到這裡。舉個例子來說,我的 <code>local.conf</code> 檔案內容如下: | ||
<pre> | <pre> | ||
MACHINE = "fic-gta01" | MACHINE = "fic-gta01" | ||
Line 264: | Line 275: | ||
</pre> | </pre> | ||
− | + | 現在,你可以修改你的 <code>local.conf</code> 檔案。現在,你可以開始進行將你的應用程式包裝到映像檔的必要的工作了。 | |
− | === | + | === 建立映像檔 === |
− | + | 現在回到 [[MokoMakefile]]。 | |
make rebuild-package-task-base | make rebuild-package-task-base | ||
Line 274: | Line 285: | ||
make flash-qemu-local | make flash-qemu-local | ||
− | + | 現在,你必須執行的是 qemu。 | |
make run-qemu | make run-qemu | ||
− | + | 在你調整好你的觸控筆之後,你可以按下右上方的選單,點擊終端設備,並執行你的應用程式。 | |
<pre> | <pre> | ||
root@fic-gta02:/$ myhelloworld | root@fic-gta02:/$ myhelloworld | ||
Line 283: | Line 294: | ||
</pre> | </pre> | ||
− | == | + | ==加入Python scripts做為執行的應用程式== |
− | + | 這節是講解如何加入 [[python]] scripts/軟體 到你目前使用的映像檔當中。 | |
− | === | + | |
− | + | ===第一步=== | |
+ | 首先,你必須依上述的方法修改 <code>local.conf</code> 檔案。你必須將 | ||
DISTRO_EXTRA_RDEPENDS += "myhelloworld" | DISTRO_EXTRA_RDEPENDS += "myhelloworld" | ||
− | + | 改為 | |
DISTRO_EXTRA_RDEPENDS += "myhelloworld python" | DISTRO_EXTRA_RDEPENDS += "myhelloworld python" | ||
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += "pyhelloworld python" instead since the package we create below is pyhelloworld.. | --[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += "pyhelloworld python" instead since the package we create below is pyhelloworld.. | ||
− | + | 這是因為python並不會被包含到預設的Openmoko映像檔中。或者,你也可以使用 <code>python-pygtk2</code>。 | |
− | + | ||
− | + | ||
+ | 接下來,你必須執行在<code>$OMDIR/local</code> 目錄下執行下列步驟。 | ||
mkdir packages/pyhelloworld packages/pyhelloworld/files | mkdir packages/pyhelloworld packages/pyhelloworld/files | ||
Line 303: | Line 314: | ||
touch packages/pyhelloworld/pyhelloworld.bb | touch packages/pyhelloworld/pyhelloworld.bb | ||
− | === | + | ===填入以下檔案=== |
− | + | 現在,編輯 <code>packages/pyhelloworld/files/pyhello</code>目錄,讓它包含: | |
+ | |||
<pre> | <pre> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Line 312: | Line 324: | ||
</pre> | </pre> | ||
− | + | 接著,編輯<code>packages/pyhelloworld/files/README.txt</code> 寫入以下的說明: | |
This is the most awesome helloworld application ever. Know why? It has SNAKES! | This is the most awesome helloworld application ever. Know why? It has SNAKES! | ||
Line 345: | Line 357: | ||
</pre> | </pre> | ||
− | + | 我會在這裡講解每一個操作部份,做為未來參考之用。 | |
− | ==== | + | ====.bb 檔案內參數的涵意==== |
$WORKDIR = $OMDIR/local/packages/<application directory> | $WORKDIR = $OMDIR/local/packages/<application directory> | ||
Line 354: | Line 366: | ||
$D = $OMDIR/build/ | $D = $OMDIR/build/ | ||
− | ==== | + | ====最後的收尾動作==== |
− | + | 完成從<code>DISTRO_EXTRA_RDEPENDS</code>開始的所有操作動作。 | |
− | + | ||
− | + | ||
− | [[Category: | + | [[Category:Application Developer/zh tw]] |
− | [[Category: | + | [[Category:System Developers/zh tw]] |
− | + | ||
− | + |
Latest revision as of 00:03, 13 September 2008
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |
Contents |
[edit] 目標
本頁內容主要是教您如何將自行撰寫的應用程式程式碼(或者範例程式)涵蓋到你的rootf。這篇文章屬於綜合性的文章。這篇文章的內容是綜合了MokoMakefile、Using a local overlay、建立Hello World 應用程式及自目前的原始碼中建立。 因此,你可以看到本篇文章的目地是做一個最通透的介紹,它會為你帶來應用程式的概念。
[edit] 設定Openmoko環境
*如果你已經設定好了程式開發環境,那你必須進行的工作就是更新你的Makefile。你可以利用下面的指令進行更新:
make update-makefile |
本份文件的內容相當的基本,我相當的喜愛MokoMakefile--它實在是很奇妙的工具。它的發明者目前仍為它進行很多維護的工作。我找不到任何一個不使用它的原因。我把我的Openmoko 開發環境目錄放在 /home/bryce/mokodev/ 目錄下,它目前運做的也相當良好。你也可以使用相同的方式,或者是你可以將它放在任何你喜歡的使用者目錄之下(或者是系統下的任何地方)。
要讓你的環境建置完戶,請依照MokoMakefile設定它。然而,如果你已經手動建立了一個開發環境,你必須確定你目前所進行的進度,並且繼續接下來的工作。
[edit] 架構設定
如果你想要設定一個本機的架構,這表示你必須進行下列的工作。首先,你必須有在Openmoko平台下開發程式的想法。第二:你必須執行正確的工作,並且你不會做出任何像是將Openmoko套件包含在本身目錄下的蠢事,最後讓它自我覆藝掉,或者,你只暸解到它是一個不良的示範。
如果你並不暸解本機的架構,那就讓我花一點時間來解釋。本機架構指的就是身為程式開發人員,將你的本機檔案放在OE style安裝下,讓你可以能輕鬆的將更新的程式放進你的樹狀目錄下。你可以將你的架構樹(overlay tree)放進bitbake 安裝,這樣就可以在你呼叫bitbake時,它將會在進入OE或者是Openmoko樹時,先行置入。這樣可以讓事情都保持組織完整及運做,並且允許使用MokoMakefile在你的應用程式中建立/rebuild/。 感謝User:CesarB針對本頁的付出。
要建立本機架構:
- 建立一個 "本機" 目錄,及它的子目錄,(在你的root moko 目錄下,會出現$OMDIR 指示)
mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks -p
- 從openmoko樹狀目錄下複製
site.conf
到local/conf
路徑。
cp build/conf/site.conf local/conf/site.conf
- 編輯你複製檔案的local/conf/site.conf 路徑,並且為bitbake recipes建立一源碼目錄。
NOTE: 我必須編輯 build/conf/site.conf 檔案,以避免 "no provider of build target" 錄誤發生。
我想它會產生一個 export BBPATH的問題,在接下來的操作中-Flerchjj |
將目前的BBFILES
修改為如下內容:
BBFILES := "${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb"
將BBFILE_COLLECTIONS
這行內容修改為如下內容:
BBFILE_COLLECTIONS = "upstream local overlay"
加入以下內容:
BBFILE_PATTERN_overlay = "^${OMDIR}/local/"
加入以下內容:
BBFILE_PRIORITY_overlay = "20"
BBFILE_PRIORITY
參數必須在檔案中較其它的參數為重要。
should be greater than all the other BBFILE_PRIORITY
。
請確認在名為BBFILE_COLLECTIONS內有BBFILE_PRIORITY_* 及BBFILE_PATTERN_* f。舉個例子來說,你只定義了上列的內容,即會減少 BBFILE_COLLECTIONS 到架構中。
- 變更
BBPATH
環境變數,加入新的架構樹到setup-env
檔案前。 Bitbake看起來只會使用它找到的第一個 site.conf 檔案。setup-env
是由 MokoMakefile 自動建立的。而它位於${OMDIR}
目錄下。
滙出 BBPATH="${OMDIR}/local:${OMDIR}/build:${OMDIR}/oe:${OMDIR}/openembedded"
[edit] 使用本機架構
[edit] 變更 conf/ 檔案
要變更 conf/ 中的檔案,只要將檔案複製到架構目錄中(保留目錄結構) 並且編輯它。
[edit] 變更 classes/ 下的檔案
要變更classes/,請將檔案複製到架構樹下,並且編輯它。
[edit] 變更套件
變更套件有點小小的複雜。你必須將它複製起來 (or symlink) 而不是只針對套件複製.bb的檔案,同時也必須複製 所有 require
及FILESDIR
目錄。(所有對應到 FILESDIR
下的目錄,通常被命名為 package-version 或者是or files
)。如果你忘記了他們其中的一個,build 會給你錯誤訊息(這也會發生在傳送FILESDIR
時,或者當你試著建立 FILESDIR
目錄時發生)。
[edit] 加入新套裝軟體
你可以藉由在架構中建立它來加入新的套裝軟體 ( 或者為新版的套裝軟體加入 recipe )。
[edit] 建立自己的影像檔
要建立你自己的映像檔的話,我們會使用 openmoko .bb 檔案,並且修改它。當你看到 scaredycat 用其它的東西取代掉它,以驗證你自己的映像檔。
編輯local/packages/images/scaredycat-openmoko-devel-image.bb 並且貼入如下的內容:
require scaredycat-openmoko-image.bb IMAGE_INSTALL += "task-openmoko-debug"
然後編輯local/packages/images/scaredycat-openmoko-image.bb
#------------------------------------------------------ # Openmoko Image Recipe #------------------------------------------------------ export IMAGE_BASENAME = "${PN}" export IMAGE_LINGUAS = "" export IMAGE_INSTALL = "\ ${MACHINE_TASK_PROVIDER} \ task-openmoko-linux \ task-openmoko-net \ task-openmoko-ui \ task-openmoko-base \ task-openmoko-phone \ task-openmoko-games \ task-openmoko-pim \ task-openmoko-scaredycat \ " inherit image LICENSE = MIT ROOTFS_POSTPROCESS_COMMAND += 'date "+%m%d%H%M%Y" >${IMAGE_ROOTFS}/etc/timestamp'
編輯 local/packages/tasks/task-openmoko-scaredycat.bb - 這裡是我們想要在映像檔中放入想要的東西的目錄位置。這個範例包括了 scummvm及 kbdd。如果你修改了這個檔案,請確定你藉由每次增加它的次數的方法,更新 PR 。
DESCRIPTION = "Openmoko: Scaredycat Additions" SECTION = "openmoko/base" LICENSE = "original" PR = "r2" inherit task RDEPENDS_task-openmoko-scaredycat = "\ scummvm \ kbdd \ "
[edit] 實際的建立映像檔
To build you image, which will be located with your other images, do the following:
# cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image
[edit] 你的第一支程式
我知道我己經說過我有一支 GDK 程式,但是,我希望能讓這個課程完成,並且讓各位可以先著手開始寫程式,而不是看著我如何寫程式。
這是一支很簡單的 CLI hello world。
[edit] 在我們開始撰寫程式之前
一個好的程式人員在寫程式時,是會有明確的想法,並且知道自己是朝向對的開發方向。
現在將目錄變更到local/packages
,下方的指令會希望你是在這個目錄下執行:
你會希望用你的程式名稱做為目錄名稱,及使用檔案名稱做為子目錄的名稱。
mkdir myhelloworld myhelloworld/files
現在,你會想要在files
目錄下建立兩個檔案。
touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c
最後,你會想要建立一個bitbake file。
touch myhelloworld/myhelloworld.bb
好了,現在必要的檔案都建立完成了,讓我們速度快點。
$HOME +- $OMDIR (contains the official openmoko tree) | +- local/ | +- packages/ | +- myhelloworld/ | +- myhelloworld.bb | +- files/ | +- myhelloworld.c | +- README.txt
你的目錄結構會像上述結構,如果你的目錄樹並沒有如上的型態,請修復你的目錄樹。
[edit] 填入檔案
所以,現在你己經放好了所有的檔案,現在讓我們實際的來做出一些東西。
myhelloworld.c
#include <stdio.h> int main(int argc, char** argv) { printf("Ello Poppet!\n"); return 0; }
README.txt
This is a command line application. It prints a simple Hello World! To stdout.
myhelloworld.bb
DESCRIPTION = "A killer hello world application" AUTHOR = "Bryce Leo" HOMEPAGE = "" SECTION = "console/applications" PRIORITY = "optional" LICENSE = "MIT" #DEPENDS = "" #RDEPENDS = "" #RRECOMMENDS = "" #RCONFLICTS = "" #SRCDATE = "20070729" #PV = "0.1" #PR = "r0" SRC_URI = "file://myhelloworld.c \ file://README.txt " S = "${WORKDIR}/myhelloworld/" do_compile() { ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld } do_install() { install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld install -m 0755 ${S}/myhelloworld ${D}${bindir} install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld }
[edit] 第一次執行編譯
MokoMakefile現在已經很容易操作了,現在切換到 ${OMDIR} 目錄下,你會看到 Makefile
放置的地方。
make build-package-myhelloworld
(請確定你在建立你的軟體前至少執行了make openmoko-devel-image 一次。)
在沒有出現錯誤訊息的狀況下,最後會顯示出如下的訊息。
NOTE: package myhelloworld-1.0: completed NOTE: build 200707291926: completed Build statistics: Attempted builds: 1
若沒有出現任何錯誤訊息的話,就大功告成囉!
[edit] 將開發的程式加入映像檔
現在,我們建立好了開發環境,也架構好了架構,更架設好了目錄樹,你現在要將程式放在映像檔裡,並且完成編譯後,現在你要做的事就是,將你開發的程式放到映像檔中。
現在讓我們來看看要如何處理。首先,我們需要修改 ${OMDIR}/build/conf/local.conf
。將它加入變數,DISTRO_EXTRA_RDEPENDS
,並且將它的值加入 myhelloworld
。如果你想要在你自己的架構中或者是OM的架構下加入軟體,請將它們以空白分隔的方式加入。在將軟體變成套件(即Openmoko)的附加物後,現在我們必須重新建立 task-base 套裝軟體。它必須產生一個ipk檔案,能"整合裝置及套件選項來建立一個基本的套裝軟體。" 對於套件是否能運作良好,它會建立一個列有會被安裝的內容的安裝檔案。所以,接著你必須歷經製作 openmoko-devel-image(映像檔)、 build-qemu(建立QUEM)、在本機上更新QUEM( flash-qemu-local)、並執行
qemu
。然後標準化你的觸控筆與螢幕的感度,並執行你的應用程式。
[edit] 修改local.conf
現在,切換到設定檔目錄下${OMDIR}/build/conf/
,並且編輯local.conf
將下列內容放入你的 local.conf
檔案中
DISTRO_EXTRA_RDEPENDS += "myhelloworld"
在加入這行程式後,你也可以從OE目錄下將其它應用程式涵括到這裡。舉個例子來說,我的 local.conf
檔案內容如下:
MACHINE = "fic-gta01" DISTRO = "openmoko" BUILD_ARCH = "i686" SRCDATE_eds-dbus = "now" DISTRO_EXTRA_RDEPENDS += "lua dillo myhelloworld"
現在,你可以修改你的 local.conf
檔案。現在,你可以開始進行將你的應用程式包裝到映像檔的必要的工作了。
[edit] 建立映像檔
現在回到 MokoMakefile。
make rebuild-package-task-base make openmoko-devel-image make build-qemu make flash-qemu-local
現在,你必須執行的是 qemu。
make run-qemu
在你調整好你的觸控筆之後,你可以按下右上方的選單,點擊終端設備,並執行你的應用程式。
root@fic-gta02:/$ myhelloworld Ello Poppet!
[edit] 加入Python scripts做為執行的應用程式
這節是講解如何加入 python scripts/軟體 到你目前使用的映像檔當中。
[edit] 第一步
首先,你必須依上述的方法修改 local.conf
檔案。你必須將
DISTRO_EXTRA_RDEPENDS += "myhelloworld"
改為
DISTRO_EXTRA_RDEPENDS += "myhelloworld python"
--xkr47 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += "pyhelloworld python" instead since the package we create below is pyhelloworld..
這是因為python並不會被包含到預設的Openmoko映像檔中。或者,你也可以使用 python-pygtk2
。
接下來,你必須執行在$OMDIR/local
目錄下執行下列步驟。
mkdir packages/pyhelloworld packages/pyhelloworld/files
touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt
touch packages/pyhelloworld/pyhelloworld.bb
[edit] 填入以下檔案
現在,編輯 packages/pyhelloworld/files/pyhello
目錄,讓它包含:
#!/usr/bin/python print "hello world!" print "shutting down now. Farewell oh cruel, cruel world!"
接著,編輯packages/pyhelloworld/files/README.txt
寫入以下的說明:
This is the most awesome helloworld application ever. Know why? It has SNAKES!
Kidding aside, next is the all important packages/pyhelloworld/pyhelloworld.bb:
DESCRIPTION = "A pythonic hello world application" AUTHOR = "Tyler Laing" HOMEPAGE = "" SECTION = "console/applications" PRIORITY = "optional" LICENSE = "MIT" #DEPENDS = "" #RDEPENDS = "" #RRECOMMENDS = "" #RCONFLICTS = "" #SRCDATE = "20070729" #PV = "0.1" #PR = "r0" SRC_URI = "file://pyhello \ file://README.txt " S = "${WORKDIR}/pyhelloworld/" do_install() { install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld install -m 0755 ${WORKDIR}/pyhello ${D}${bindir} install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld }
我會在這裡講解每一個操作部份,做為未來參考之用。
[edit] .bb 檔案內參數的涵意
$WORKDIR = $OMDIR/local/packages/<application directory> $bindir = $OMDIR/build/tmp/work/armv4t-linux/<application directory>/image/usr/bin $docir = $OMDIR/build/tmp/work/armv4t-linux/<application directory>/image/usr/share/doc $D = $OMDIR/build/
[edit] 最後的收尾動作
完成從DISTRO_EXTRA_RDEPENDS
開始的所有操作動作。