1、安装此页面上列出的一些必要的软件包
apt-get install python patch m4 make ccache perl diffstat build-essential wget curl ftp cvs subversion git-core tar bzip2 gzip unzip openjade docbook docbook-utils texinfo texi2html sed bison libc6-dev mktemp sgmltools-lite libpcre++-dev libpcre++0 libpcre3 libpcre3-dev help2man gawk
如果想要编译qemu-native的话,还要安装libsdl1.2-dev
如果要编译Zaurus 2.4 或者任何 collie kernels 的话,还要apt-get install bc
备注:[bc (binary calculator)]
===
安装过程中,我的debian etch上出现libc6_2.7-10_amd64.deb什么xxxxxx的问题,我单独强制安装了这个包dpkg -i --force-overwrite libc6_2.7-10_amd64.deb,因为我用的是testing的源,估计是由于跨版本安装的原因引起的。
===
perl还老提示perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
我export LC_ALL=POSIX解决问题。
====
2、确立好一个工作目录,作为编译openmoko的顶层目录/hpc/moko/,选择一个开发分支,用来建立openmoko,这里选择org.openembedded.dev ,因为openmoko是建立在openembedded之上的,而openembedded有多个开发分支,这里是其他的开发分支。
3.建立目录 mkdir -p /hpc/moko/build/conf
cd /hpc/moko/
4.获取bitbake,因为下一步需要使用OE,而OE需要bitbake来建立,官方建议不要直接安装bitbake到系统目录,下载完bitbake后,将其目录添加进环境变量就可以使用他了(文章后面会讲到)。有好几种获得bitbake的方法:
a、使用为特定linux版本准备的包
c、使用subversion下载源代码树编译,cd /hpc/moko
svn co svn://svn.berlios.de/bitbake/branches/bitbake-1.8/ bitbake
bitbake经常被修订更新,如果目前的bitbake是以前下载的,最好到查看你的bitbake版本是否是最新的。在你的bitbake目录下svn info,可以到目前你的bitbake的版本号。如果已经有了一个新的版本,那么你可以删掉当前的版本,然后svn co svn://svn.berlios.de/bitbake/branches/bitbake版本号/ bitbake的方法重新下载一份,如果不是新的版本,而是相同版本的更新,那么在bitbake目录下可以用svn update命令更新到最新。
如果就想安装到系统目录的话,./setup.py -v install --prefix=/usr/local
或者不加--prefix=/usr/local的话,就安装到/usr/(包括/usr/bin和/usr/lib/python*.*/)目录下去了
5.下载并升级OE
这是一份openembedded的数据库,他包含了所有openembedded的元数据:包括构建分类,配置文件,和软件包。OpenEmbedded数据库是一个monotone数据库,monotone是目前openembedded的源代码管理工具SCM,这是他的主页。
下载一份和第四步中bitbake相同版本号的OE,进入到/hpc/moko/目录,
wget .版本号.bz2
解压bunzip2 -d OE.mtn.bz2 (确保OE版本是0.32及以上,否则可能出现一些问题)
mtn --db=/hpc/moko/OE.mtn pull monotone.openembedded.org org.openembedded.dev
chechout本地的openembedded源代码树
#cd /hpc/moko/
#mtn --db=/hpc/moko/OE.mtn checkout --branch=org.openembedded.dev
6、建立本地配置文件
cd /hpc/moko
cp org.openembedded.dev/conf/local.conf.sample build/conf/local.conf
编辑build/conf/local.conf,因为之前我们使用的是.dev分支,所以至少得添加如下内容
BBFILES = "/hpc/moko/org.openembedded.dev/packages/*/*.bb"
DISTRO = "openmoko"
MACHINE = "om-gta01"
(有时候会提示要TARGET_ARCH = "",我在neo上uname -m的结果是armv4tl,这里可以填这个,也可以填"arm")
因为我们是以local.conf.sample为基础修改,所以还要删掉最后一行。
DISTRO和MACHINE究竟应该设置为哪些值呢,在org.openembedded.dev/conf目录下有DISTRO和MACHINE目录,进去一看便知道了。
7、设置环境变量,可以把一下的内容添加到/etc/profile,也可以是~/.bashrc(推荐用这个)
====如果你安装我之前说的,没有实际的安装bitbake,那么使用以下语句
#export PATH=/hpc/moko/bitbake/bin:$PATH
#export BBPATH=/hpc/moko/build:/hpc/moko/org.openembedded.dev
====如果你已经使用setup.py install安装的bitbake,那么,export BBPATH=/hpc/moko/build/:/hpc/moko/org.openembedded.dev
8,开始编译
编译单个软件包: #bitbake nano (编译nano这个编辑器软件)
编译一个软件套件:#bitbake task-base
编译一组软件包,并把他们部署进rootfs镜像
------a、编译gpe镜像:bitbake gpe-image
------b、编译opie镜像: bitbake opie-image
(分别编译每个镜像大概需要4g空间)
在/hpc/moko/org.openembedded.dev/packages/meta/目录可以找到meta/task和目标镜像。
编译所有的软件包: bitbake world (大概需要35g的编译空间)
绕过冗长的语法,编译单个软件包: #bitbake -b /hpc/moko/org.openembedded.dev/packages/blah/blah.bb
这里是bitbake后面可以跟的一些参数,可以自定义用bitbake编译什么。
其参数的含义如下:
helloworld
编译一个静态可执行文件,此文件的作用是无限的打印出hello world
world
编译所有的东西,这会消耗掉大量的时间,带宽,磁盘空间 ,甚至损坏交叉编译工具链
task-base
编译内核和一些必须的核心包,你甚至还需要自己安装ssh,因为他很可能没有安装
helloworld-image
编译一个镜像,用作rootfs,并产生一个无限打印出hello world的循环程序,这可以用来测试linux是否已经被引导进入用户空间
bootstrap-image
编译一个包含task-base包的镜像
opie-image
编译一个基于opie的镜像
opie-kdepim-image
编译一个基于opie并且包含kde-based pim所有特性的镜像
meta-opie
编译所有与opie有关的包,和一些opie需要使用的包
pivotboot-image
Build image that is necessary to flash a Sharp SL C3000, Zaurus. It pivots after booting from the NAND and finalizes the install to the HD during the first boot.
task-dvb
dvb程序的所有元数据包(DVB = Digital Video Broadcasting).
task-python-everything
关于python的所有东西
twin-image
包含task-base和一对编辑器nano和vim,以及一个邮件阅读器mutt
uml-image
编译用户模式linux下的root镜像,包括task-base,和opie的一部分。
gpe-image
基于gpe的内核和rootfs
meta-gpe
与gpe-image一起发行的基本软件包
package-index
Target to update the "feed" files (Package*) to reflect the current set of .ipk's that exist in the deploy directory. Commonly used after building some packages individually to update the feed and allow them to be installed via a package manager or thie ipkg command line tools.
virtual/kernel
编译适合你设备的内核
============================