Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21449
  • 博文数量: 10
  • 博客积分: 1401
  • 博客等级: 上尉
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-17 13:34
文章分类

全部博文(10)

文章存档

2009年(10)

我的朋友

分类:

2009-12-17 14:58:08

OpenEmbedded 入门 (二):编译Openmoko的3个版本 收藏
Openmoko目前主要有OM2007.2、ASU和FSO三个版本。我在 “Android能用Linux打败Linux手机吗?” 的第3节对这3个版本做过简单介绍。最近我编译过这3个版本,本文是编译过程的简单记录。我在freerunner样机上测试构建的映像,所以构建时硬件平台都选择了om-gta02。

1 准备环境
1.1 安装需要的软件
我的工作环境是WinXP+VMWare+Ubuntu7.10。我去年在这个虚拟机上编译过Openmoko,后来又编译过Poky、Android。我记不清为编译安装过哪些软件。只能根据Openmoko的wiki,列出以下需要安装的软件:

sudo apt-get install subversion build-essential help2man diffstat texi2html texinfo cvs gawk zip unzip \
cogito bzip2 libncurses5-dev zlib1g-dev libssl-dev libgtk2.0-dev ca-certificates python-pysqlite2 \
sqlite3 sqlite3-doc python-pysqlite2-dbg quilt python-psyco ccache gcc-3.4 g++-3.4 libsdl1.2-dev lynx \
git-core libxtst-dev
我的虚拟机上确实已经安装过这些软件。

1.2 使用bash
Ubuntu7.10的shell默认是dash。无论是编译内核还是OE,黑客都会建议我们改用bash。可以先用ls查看当前使用的shell:

$ ls -l /bin/sh
如果指向dash,可以改成bash:

$ sudo rm -f /bin/sh
$ sudo ln -s /bin/bash /bin/sh
1.3 资源需求
OE对内存、硬盘的要求都比较高。我的虚拟机设置了1G内存。

我将OE环境的储藏间sources目录单独放在一个20G的虚拟硬盘上。每个OE环境也使用一个20G的虚拟硬盘。在编译成功后,不含sources目录的OE环境大约占用12G左右硬盘。我在编译过Openmoko的3个版本后,sources目录硬盘使用情况如下:

文件系统           1K-块        已用     可用 已用% 挂载点
/dev/sdb1             20635700   3669312  15918152  19% /oe
sources目录目前占用3.5G。我的所有OE环境都用这个sources目录。

第一次编译需要快速的网络连接。如果把sources目录保存下来,重新编译一般不需要网络连接。我曾经在没有网络连接的情况下,完整地编译过Poky。

2 编译FSO
FSO提供了Makefile,按照官方说法,只要下载Makefile,make一下就可以了:

wget
make fso-testing-image
通过阅读Makefile,可以了解构建的流程。我没有直接执行“make fso-testing-image”,而是一边看Makefile,一边逐步执行,以了解发生的事情。我执行的流程如下。

2.1 流程
2.1.1 建立目录下载Makefile
执行:

mkdir -p /poky/fso
cd /poky/fso
wget
2.1.2 通过git更新makefile
执行:

make setup-common
目标setup-common的任务如下:

setup-common common/.git/config:
 [ -e common/.git/config ] || \
 ( git clone git://git.freesmartphone.org/fso-makefile.git common && \
   rm -f Makefile && \
   ln -s common/Makefile Makefile )
 touch common/.git/config
从git仓库下载了最新的makefile,放到了./common目录,并在当前目录建立common/Makefile的链接。

2.1.3 通过svn得到bitbake
执行:

make setup-bitbake
目标setup-bitbake的任务如下:

setup-bitbake bitbake/.svn/entries:
 [ -e bitbake/.svn/entries ] || \
 ( svn co svn://svn.berlios.de/bitbake/${BITBAKE_VERSION} bitbake )
 touch bitbake/.svn/entries
从svn仓库签出指定版本的bitbake,放在./bitbake目录。

2.1.4 通过git得到OpenEmbedded
执行:

make setup-openembedded
目标setup-openembedded的任务如下:

setup-openembedded openembedded/.git/config:
 [ -e openembedded/.git/config ] || \
 ( git clone git://git.openembedded.net/openembedded openembedded ; \
   cd openembedded ; \
   git config --add remote.origin.fetch '+refs/heads/*:refs/remotes/*' )
 ( cd openembedded && \
   ( git branch | egrep -e ' org.openembedded.dev$$' > /dev/null || \
     git checkout -b org.openembedded.dev --track origin/org.openembedded.dev ))
 ( cd openembedded && git checkout org.openembedded.dev )
 touch openembedded/.git/config
通过git得到OpenEmbedded元数据,放到./openembedded目录。

2.1.5 准备fso-testing目录
执行:

make setup-fso-testing
目标setup-fso-testing的任务如下:

so-%/.configured: common/.git/config bitbake/.svn/entries openembedded/.git/config
 [ -d fso-$* ] || ( mkdir -p fso-$* )
 [ -e downloads ] || ( mkdir -p downloads )
 [ -e fso-$*/Makefile ] || ( cd fso-$* ; ln -sf ../common/openembedded.mk Makefile )
 [ -e fso-$*/setup-env ] || ( cd fso-$* ; ln -sf ../common/setup-env . )
 [ -e fso-$*/downloads ] || ( cd fso-$* ; ln -sf ../downloads . )
 [ -e fso-$*/bitbake ] || ( cd fso-$* ; ln -sf ../bitbake . )
 [ -e fso-$*/openembedded ] || ( cd fso-$* ; ln -sf ../openembedded . )
 [ -d fso-$*/conf ] || ( mkdir -p fso-$*/conf )
 [ -e fso-$*/conf/site.conf ] || ( cd fso-$*/conf ; ln -sf ../../common/conf/site.conf . )
 [ -e fso-$*/conf/auto.conf ] || ( \
  echo "DISTRO = \"openmoko\"" > fso-$*/conf/auto.conf ; \
  echo "MACHINE = \"om-gta02\"" >> fso-$*/conf/auto.conf ; \
  echo "IMAGE_TARGET = \"fso-image\"" >> fso-$*/conf/auto.conf ; \
  echo "DISTRO_TARGET = \"openmoko-feed\"" >> fso-$*/conf/auto.conf ; \
  echo "INHERIT += \"rm_work\"" >> fso-$*/conf/auto.conf ; \
 )
 [ -e fso-$*/conf/local.conf ] || ( \
  echo "# require conf/distro/include/moko-autorev.inc" > fso-$*/conf/local.conf ; \
  echo "# require conf/distro/include/fso-autorev.inc" >> fso-$*/conf/local.conf ; \
 )
 rm -rf fso-$*/tmp/cache
 touch fso-$*/.configured
这个目标的任务比较长,但很简单。阅读时将“$*”换成“testing”。这个目标建立了./fso-testing和./download目录。在./fso-testing目录,建立以下链接:

lrwxrwxrwx  1 lvjie lvjie   25 2008-11-13 13:11 Makefile -> ../common/openembedded.mk
lrwxrwxrwx  1 lvjie lvjie   19 2008-11-13 13:11 setup-env -> ../common/setup-env
lrwxrwxrwx  1 lvjie lvjie   12 2008-11-13 13:11 downloads -> ../downloads
lrwxrwxrwx  1 lvjie lvjie   10 2008-11-13 13:11 bitbake -> ../bitbake
lrwxrwxrwx  1 lvjie lvjie   15 2008-11-13 13:11 openembedded -> ../openembedded
建立./fso-testing/conf目录。建立链接site.conf,创建文件auto.conf和local.conf。

2.1.6 检查fso-testing目录
下面开始执行./common/openembedded.mk里的目标。执行:

cd fso-testing
make setup-image-fso-image
make setup-machine-om-gta02
make create-topdir
make downloads
make bitbake
make openembedded
这些目标的任务如下:

BUILD_DIRS = downloads
REQUIRED_DIRS = bitbake openembedded

setup-image-%:
 ( grep "IMAGE_TARGET = \"$*\"" conf/auto.conf > /dev/null ) || \
 sed -i -e 's/^IMAGE_TARGET[[:space:]]*=[[:space:]]*\".*\"/IMAGE_TARGET = \"$*\"/' conf/auto.conf
setup-machine-%:
 ( grep "MACHINE = \"$*\"" conf/auto.conf > /dev/null ) || \
 sed -i -e 's/^MACHINE[[:space:]]*=[[:space:]]*\".*\"/MACHINE = \"$*\"/' conf/auto.conf
create-topdir: conf/topdir.conf
 . conf/topdir.conf && test "`pwd`" = "$$TOPDIR" || echo "TOPDIR='`pwd`'" > conf/topdir.conf
conf/topdir.conf:
 echo "TOPDIR='`pwd`'" >$@
$(BUILD_DIRS):
 test -d $@ || if test -d ../$@; then ln -s ../$@ .; else mkdir $@; fi
$(REQUIRED_DIRS):
 test -d $@ || if test -d ../$@; then ln -s ../$@ .; else exit 1; fi
setup-image-fso-image保证conf/auto.conf中的IMAGE_TARGET是fso-image。setup-machine-om-gta02保证conf/auto.conf中的MACHINE是om-gta02。 create-topdir检查topdir.conf内容是否是上一层目录。downloads、bitbake和openembedded保证这些链接已经建立。

如果直接make映像,下面就要bitbake了。不过,在bitbake前我还想做两点改动。

2.1.7 让download指向自己的代码仓库
执行:

cd ..
rm -f downloads
ln -s /oe/sources downloads
cd fso-testing
我让downloads指向我的代码仓库,这样可以避免重复下载。

2.1.8 去掉rm_work
执行:

sed -i -e /rm_work/d conf/auto.conf
这个命令删除掉conf/auto.conf中包含rm_work的行。读者当然可以用vi直接编辑删除。为了便于表述,我写了一行sed命令。 -i参数表示修改当前文件。-e后面是要执行的脚本。模式/rm_work/定位要操作的行,d命令就是删除。

rm_work命令在每个包编译完成后自动删除工作目录中除temp目录外的其它目录,包括源代码目录。 temp目录里只有构建脚本和日志记录。我编译的目的就是修改、利用源代码,当然要去掉这个命令。

2.1.9 开始bitbake
通过前面的步骤,我们已经建立好构建环境。以后要构建任何东西,只要进入fso-testing目录,source一下脚本setup-env,然后bitbake需要的东西就可以了。例如:我们现在可以执行:

. setup-env
bitbake fso-image
就开始构建fso映像了。

2.2 意外
如果不出意外,我们只要等十几个到几十个小时,就可以构建成功了。不过,有时会遇到一些小问题。我在构建FSO映像时就碰到执行qemu-native_svn.bb时do_compile失败。其实,我没打算用qemu仿真。

我删除掉./openembedded/packages/qemu/qemu-native_svn.bb文件,这样bitbake会自动使用qemu-native_0.9.1.bb。编译就可以通过了。最后成功构建了映像。映像在tmp/deploy/glibc/images/neo1973目录。 bitbake在你执行它的目录建立tmp目录。

2.3 运行
刷机、运行,截了几幅图:

 

 

 

 

图1是zhone的界面,当前zhone的主要功能都是灰的,不能用。图3是我自己安装的FBReader,我可以在路上看看英文文档。图4是待机后解锁的画面,依次按1234解锁。

3 编译ASU
3.1 流程
3.1.1 建立目录下载Makefile
执行:

mkdir -p /poky/moko
cd /poky/moko
wget
3.1.2 建立构建环境
执行:

make setup
make setup-machine-om-gta02
用“make setup”可以建立构建环境。setup-machine-om-gta02将local.conf中的MACHINE设为om-gta02:

setup-machine-%: setup-config
 ( grep "MACHINE = \"$*\"" build/conf/local.conf > /dev/null ) || \
 sed -i -e 's/^MACHINE[[:space:]]*=[[:space:]]*\".*\"/MACHINE = \"$*\"/' \
  build/conf/local.conf
3.1.3 让sources指向自己的代码仓库
执行:

ln -s /oe/sources sources
让./sources指向自己的代码仓库,可以避免重复下载。

3.1.4 去掉rm_work
执行:

sed -i -e /rm_work/d build/conf/local.conf
去掉local.conf中的rm_work,保留源代码。

3.1.5 开始bitbake
通过前面的步骤,已经建立好构建环境。以后要构建任何东西,只要source一下脚本setup-env,然后在./build目录bitbake需要的东西就可以了。例如:我们现在可以执行:

. setup-env
cd build
bitbake openmoko-asu-image
就开始构建asu映像。

3.2 意外
又遇到一个小问题。执行illume_svn.bb时do_fetch失败,找不到版本35818。我修改./openembedded/conf/distro/include/sane-srcrevs.inc,将EFL_SRCREV从35818改成36540。FSO映像使用了版本36540。编译就可以通过了。最后成功构建了映像。

3.3 运行
刷机、运行,截了几幅图:

 

 

 

 

4 编译OM2007.2
4.1 流程
我在构建asu的目录构建OM2007.2版本。环境是现成的,只要执行:

cd /poky/moko
. setup-env
cd build
bitbake openmoko-devel-image
就可以了。因为构建asu时已经构建了工具链和很多软件包,所以这次构建只用了2.5小时,就成功构建了映像,没有发生什么意外。在刚构建过asu时,这块虚拟硬盘用了12G;构建完OM2007.2后,这块虚拟硬盘用了15G。

4.2 运行
刷机、运行,又截了几幅图:

 

 

 

 

5 结束语
OpenMoko目前的3个版本确实都算不上可用的方案。但通过构建这3个方案,我们可以看到大量已构建的开源方案,也可以从OpenMoko的方案中学习经验或吸取教训。在这3个方案中我最期待的就是FSO方案中用D-Bus封装的手机API了。相对于OpenMoko环境,我更喜欢Poky环境的简洁。我编译过一个freerunner版本的Poky,加上FSO方案的API,就可以得到一个干净的手机开发环境。只要有时间,我就可以在这个环境上制作自己的手机软件。

发表于 @ 2008年11月27日 23:42:00 | 评论( 10 ) | 编辑| 举报| 收藏

旧一篇:VC调试:两个有个性的bug | 新一篇:RPG能感动你吗?
相关文章
Linux From Scratch 构建临时编译环境(一)SUSE程序开发二:linux下版本控制软件的选择版本管理 RCS CVS SVN Gitgit vs svn手机流媒体学习笔记(一)--x264编译过程搭建Android环境[转]Git和Repo扫盲——如何取得Android源代码android下载编译以及文件系统提取总结calrole 发表于2008年12月8日 21:33:48  IP:举报删除
请教博主:
我目前的项目是用openembbeded angstom AT91sam9263平台。现在准备在busybox中添加新命令,但我发现我根本不知道这个tmp/rootfs是怎么生成的?我发现无论我怎么改busybox,最终都好像不是我编译的那个。甚至我删除了busybox,都照样生成rootfs ,都晕了,请问怎么才能在busybox中添加命令呢?
第二个问题, 由于上述问题,我尝试自己手动生成rootfs.jffs2,我是这样: 找出cmd_jffs2的命令,然后直接命令行对tmp/rootfs 生成jffs2 image。rootfs保持不变 就可以正常mount,但一旦我在rootfs中加了自己的东西,生产的jffs2 就mount不上了,老报错,到底怎么才能定制自己的rootfs啊, 好不容易 找到博主这个好地方,望博主帮助我,老板催的紧,谢谢啊!!!

fmddlmyy 发表于2008年12月8日 23:14:43  IP:举报删除
Re calrole: tmp/rootfs是OE用fakeroot作映像时留下的临时文件。直接用tmp/rootfs作映像肯定有问题,里面的设备文件肯定不对。既然用了OE就应该按照OE的方式bitbake映像。

修改tmp/work目录找到要修改的工程目录(例如tmp/work/armv4t-angstrom-linux-gnueabi/busybox-1.11.3-r0),修改文件后用temp目录的脚本编译,或者用bitbake编译:
bitbake busybox -c compile -f
-c compile -f表示强制执行do_compile任务。然后再
bitbake busybox
会自动执行后面的任务。然后bitbake映像,自然会用新产生的busybox安装文件。

你既然修改了busybox,其实可以修改对应的bb文件,把源文件改成本地文件,例如:
SRC_URI = " \
将修改过的软件包放在对应元数据目录的files目录下。这样就可以把tmp/stamps里的busybox的时间戳全部删掉,从头构建busybox。fetch的也是你改过的文件。

当然更文明的做法是SRC_URI中加一个补丁。calrole 发表于2008年12月9日 10:13:14  IP:举报删除
busybox按照博主的方法成功了!! 太感谢您了!本来只是报着试下的心态给博主发帖求教,没想到博主这么热心,太感动了!

那rootfs里怎么添加自己的应用程序包括库呢。现在是这样,我们项目用到minigui,我已经能独立编译出应用程序(包括库),copy到目标板上执行。现在就想把它直接加入到rootfs image里,该怎么入手呢。我在网上找了很久,尝试了先用helloworld小程序做了测试:
1. create source files for "HelloWorld" app
2. cd stuff/org.openembedded.dev/packages //enter packages dir
3. mkdir -p HelloWorld/files && cd HelloWorld //Create HelloWorld dir
4. cat > HelloWorld.c
5. #include

7. int main(int argc, char** argv)
8. {
9. printf("Hello world!\n");
10. return 0;
11. }
12. ^D
13. cat > README.txt
14. Readme file for myhelloworld.
15. ^D

16. add recipe for "HelloWorld" app
17. cat > HelloWord_0.1.bb
18. DESCRIPTION = "Hello world"
19. PR = "r0"
20.
21. SRC_URI = " \
22. "
23.
24. do_compile() {
25. ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/HelloWorld.c -o HelloWorld
26. }
27.
28. do_install() {
29. install -m 0755 -d ${D}${bindir} ${D}${docdir}/HelloWorld
30. install -m 0644 ${S}/HelloWorld ${D}${bindir}
31. install -m 0644 ${WORKDIR}/README.txt calrole 发表于2008年12月9日 10:16:00  IP:举报删除
不好意思,多发了一份。我再继续。
(续)
31. install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/HelloWorld.c
32. }
33. ^D


34. Then build

o For manually build

o cd stuff //must enter stuff dir first

o bitbake -b org.openembedded.dev/packages/myhelloworld/HelloWord_0.1.bb
到了这里能够编译通过,并且发现在tmp/work/armv5te..../下生成了ds-app-r0 目录。

但后来我尝试build in default OE rootfs 通过以下方法:
在org.openembedded.dev/packages/images/angstrom-minimal-image.bb(我用的是minimal模式)中找到这行
ANGSTROM_EXTRA_INSTALL ?=""加入“hello_world”
再再RDEPENDS 里加入$(ANGSTROM_EXTRA_INSTALL )
保存,bitbake angstrom-minimal-image 此时就报“No providers of runtime build target Hello_world......”错误,请问博主,我以上方法对么? 如果我的应用程序还要装相应的库文件,我应该怎么编译才行?

希望博主不嫌麻烦 指点一下?万分感激!!!calrole 发表于2008年12月9日 10:24:19  IP:举报删除
"到了这里能够编译通过,并且发现在tmp/work/armv5te..../下生成了ds-app-r0 目录。"
这里错了 是生产hello 目录
fmddlmyy 发表于2008年12月9日 12:33:30  IP:举报删除
Re calrole: 你的bb文件的名字是HelloWord_0.1.bb
那么这个package的名字就是HelloWord
你加在ANGSTROM_EXTRA_INSTAL里的package名就应该是HelloWord,而不是hello_world

这个例子太简单了。复杂点的程序还是用autotool比较好。
如果用了autotool,在提供库文件的软件包里只要加上
do_stage() {
autotools_stage_all
}
就可以把输出文件放到tmp/staging目录。其它程序就可以使用了,当然要正确编写Makefile.amcalrole 发表于2008年12月9日 13:23:49  IP:举报删除
谢谢博主回复,说来惭愧,我连这个最简单的例子都编译不过,关于名字 应该不是这里产生问题的。因为方便博主理解,我把ds_app 这个名字用HelloWorld代替的,在ANGSTROM_EXTRA_INSTAL里是手误,我实际添得是“ds_app”,与ds_app_0.1.bb 一致的。但产生了如下错误:
NOTE: Handling BitBake files: | (4651/4651) [100 %]
NOTE: Parsing finished. 4430 cached, 1 parsed, 220 skipped, 0 masked.
NOTE: build 200812092114: started

OE Build Configuration:
BB_VERSION = "1.8.6"
OE_REVISION = "aa44d626baaae40ee498aea453176a8aea90d9fc"
TARGET_ARCH = "arm"
TARGET_OS = "linux-gnueabi"
MACHINE = "at91sam9263ek"
DISTRO = "angstrom"
DISTRO_VERSION = "at91-20081209"
TARGET_FPU = "soft"

NOTE: Resolving missing task queue dependencies
ERROR: No providers of runtime build target ds_app (for ['/home/calrole/project/hp/stuff/org.openembedded.dev/packages/images/angstrom-minimal-image.bb'])
NOTE: Removing failed runtime build target ds_app
ERROR: No buildable providers available for required build target angstrom-minimal-image
请教博主,我这样做有问题么?或者我在这个例子里应该怎么加比较好? 真是麻烦您了!我现在bitbake都把我弄晕了。fmddlmyy 发表于2008年12月9日 15:55:54  IP:举报删除
Re calrole: 你确定已经把ds_app_0.1.bb 放到org.openembedded.dev/packages下的一个子目录(例如hello)了吧。放到这里,bitbake才能找到。

另外ds_app_0.1.bb这个名字可能不符合package的命名约定。package的命名是
package名称_版本号.bb
在package名称中应该避免使用“_”calrole 发表于2008年12月9日 15:44:54  IP:举报删除
博主:
不好意思又来打扰,我现在面临的问题是这样:
1. 添加Busybox命令
这个在您的指点下已经完成了。
2.在生成的Jffs2 image里加入自己的程序
自己的程序分两种:应用程序 和 应用程序需要的库

现在的状态:
应用程序目录 和 库 目录
应用程序 已经可以编译生成(在自己搭的交叉编译环境下)
库 已经可以编译生成(在自己搭的交叉编译环境下)
应用程序 和 库 拷贝到目标板上可以正常工作。

要达到的目的:
用bitbake 环境编译出rootfs,在rootfs里面有自己的应用程序 和 相应库。

请问吕工 如何做呢?
这个项目马上要求提交测试了,以前就关心应用程序的实现了,现在才发现这个bitbake编译环境很是搞不懂(第一次用),时间又很急,望吕工再次指点!!
万分感谢!fmddlmyy 发表于2008年12月9日 16:02:15  IP:举报删除
Re calrole: 我用的OE数据是openmoko和poky定制过的,没有angstrom-minimal-image.bb这个文件。所以我不能准确说出这个映像应该怎么加package。
其实你可以找一个已经安装的应用,看看它是怎么被引用的。我就是这么做的。

其实我们通常修改的是packages/tasks里的一个描述任务的bb文件。
你可以通过
bitbake -g angstrom-minimal-image
生成映像的依赖关系。然后在生成的depends.dot中找到映像依赖packages/tasks目录的哪些bb文件。然后在这些bb文件中找一个合适的位置加入ds_app。

假设映像依赖task-base.bb,你只要在task-base.bb中的
RDEPENDS_task-base = "\
下增加一行ds_app就可以了。
当然最好找一个与要增加的package比较相近的bb文件和任务。例如在poky中我在task-poky.bb
RDEPENDS_task-poky-apps-x11-core = "\
中增加我的package。

假设你修改了task-base.bb,只要在tmp/stamps中删掉它的时间戳,重新bitbake 这个bb文件再bitbake 映像就可以了。calrole 发表于2008年12月9日 15:48:23  IP:举报删除
对不起,我这里网有问题,发了几次不成功,一成功就把以前的一起发了,不是有意刷贴,请博主原谅.fmddlmyy 发表于2008年12月9日 16:04:06  IP:举报删除
Re calrole: bitbake只是一些简化操作的脚本,不算太复杂。不过刚开始用,总需要一些时间熟悉leslielg 发表于2009年1月20日 16:27:44  IP:举报删除
吕先生你好:
我在使用oe编译gnash 0.8.4的时候遇到个很奇怪的问题,您能帮我看看么:
gnash 0.8.4的configure文件有几个bug,我下载了gnash-0.8.4.tar.bz2用oe编译一次后出现编译失败,于是我到oe/tmp/downloads/下,解开gansh-0.8.4.tar.bz2,手动修改了configure文件,然后再打包成gnash-0.8.4.tar.bz2,拷贝到USERBRANCH/packages/gnash/files下,然后修改里面的gnash_0.8.4.bb,把SRC_URL改为,然后执行bitbake -c rebuild gnash,bitbake正确的找到了gnash-0.8.4.tar.bz2,并unpack,但是编译还是失败了,我到oe/tmp/work/armXXXXXXX/gnash-0.8.4-rc5/gnash-0.8.4目录下,发现configure文件仍然是没有修改过的那个!请问这是怎么回事,是不是bitbake有什么cache之类的?

我的mail: , msn: ,期待您的帮助。fmddlmyy 发表于2009年1月20日 16:49:43  IP:举报删除
Re leslielg: 我不知道
bitbake -c rebuild gnash
是什么意思。因为bitbake默认没有do_rebuild任务。你可以试试:
bitbake gnash -c fetch -f
bitbake gnash -c unpack -f
bitbake gnash
执行过unpack后可以看看工作目录的configure文件是否是你所期待的。用本地软件包肯定是可以的,我也多次这样做过。leslielg 发表于2009年1月20日 17:20:15  IP:举报删除
谢谢您的回复。
bitbake -c rebuild 会删除已生成的所有文件,然后把build过程重来一遍,在bitbake的一个论坛上看到的,等同于bitbake -c clean package && bitbake package。
我发现在unpack后configure文件是我修改过的,但是在我运行temp/run.do_configure后,configure文件先被删除,然后又重新生成,并且生成的是我修改前的!run.do_configure为什么会去做这样的事情?而且那个修改前的configure它是从哪里找到的?我在oe的irc上问这个问题也没人回。很困惑...fmddlmyy 发表于2009年1月20日 22:12:48  IP:举报删除
Re leslielg: configure文件是自动生成的,脚本和log中应该写得很清楚,例如调用了autoreconf。你不应该直接改configure,而是应该修改configure.ac,生成configure。或者在bb文件中重载do_configure,直接调用./configure:
do_configure() {
./configure 选项
}leslielg 发表于2009年2月19日 16:01:30  IP:举报删除
我删掉configure.ac后就好了,另外请教一个问题:
我已经成功编译好gnash,并且在tmp/deploy中生成了ipk及其依赖库的ipk,但是没有在rootfs中自动安装,请问如何才能在bitbake 时自动把gnash及其依赖库安装到rootfs中去呢?fmddlmyy 发表于2009年2月19日 17:03:44  IP:举报删除
Re leslielg: 你可以找一个已经安装的应用,看看它是怎么被引用的。

通常修改的是packages/tasks里的一个描述任务的bb文件。
你可以通过
bitbake -g 映像名称
生成映像的依赖关系。然后在生成的depends.dot中找到映像依赖packages/tasks目录的哪些bb文件。然后在这些bb文件中找一个合适的位置加入your_bb。

假设映像依赖task-base.bb,你只要在task-base.bb中的
RDEPENDS_task-base = "\
下增加一行your_bb就可以了。
当然最好找一个与要增加的package比较相近的bb文件和任务。例如在poky中我在task-poky.bb
RDEPENDS_task-poky-apps-x11-core = "\
中增加我的package。

假设你修改了task-base.bb,只要重新bitbake 这个bb文件再bitbake 映像就可以了。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fmddlmyy/archive/2008/11/27/3396756.aspx

阅读(1544) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~