Customizing the Openmoko Distribution/zh cn
From Openmoko
m (Cateogry changes: -Openmoko/zh cn, -Application/zh cn, +Application Developer/zh cn) |
m (-Guides, +System Developers) |
||
Line 368: | Line 368: | ||
[[Category:Application Developer/zh cn]] | [[Category:Application Developer/zh cn]] | ||
− | [[Category: | + | [[Category:System Developers/zh cn]] |
Latest revision as of 00:02, 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
开始的所有操作动作。