首先用第一个方法确定需要的软件是否包括在已包含的layer内。
然后通过在openembedded网站搜索看layer的名称用第二中方式增加layer。
另外yocto还支持类似ubuntu apt的安装软件方式
在yocto使用包管理系统 / yocto how to use package management system
。
软件位于已包含的layer中
在BSP环境中搜索软件是否已被编译进BSP
bitbake -s | grep [software]
% bitbake -s | grep nfs-utils
nfs-utils :1.3.4-r0
在build/conf/local.conf添加软件包
# file build/conf/local.conf
IMAGE_INSTALL_append = " nfs-utils" (nfs-utils前面有个空格)
然后编译即可。
软件位于其他未包含的layer
在openembedded网站搜索recipe openjdk8,可以搜到这个页面
https://layers.openembedded.org/layerindex/recipe/66213/
其中说明了这个recipe是包括在 meta-java中的,则需要用这个方法来先增加layer,再添加软件。
以下操作为添加meta-java这一层为例,增加其他layers可参考以下操作。
1、进入bsp包的sources目录下,添加meta-java这一层。
git clone git://git.yoctoproject.org/meta-java
2、下载好meta-jave层后,进入meta-java的目录下,切换分支,请按照yocto的版本来切换对应的分支,yocto的版本可以在BSP的releasenote中看到,如
ftp://ftp.phytec.cn/AM335x/BSP-Yocto-AM335x-PD16.2.0/ReleaseNotes
以下以krogoth版本的yocoto为例。
cd meta-java
git checkout origin/krogoth <- 注意版本
3、打开README文件,查看要修改的配置
注意下面的内容是krogoth版本readme,其他版本可能不同。
Usage instructions
------------------
You should define at least the following variables in a distro include file or local.conf
# Possible provider: cacao-initial-native and jamvm-initial-native
PREFERRED_PROVIDER_virtual/java-initial-native = "cacao-initial-native"
# Possible provider: cacao-native and jamvm-native
PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
# Optional since there is only one provider for now
PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
Simply rely on openjdk-7-jre, openjdk-7, openjdk-8 or openjre-8.
For conf/bblayers.conf you have to add
BBLAYERS ?= " \
path_to_source/meta-openembedded/meta-oe \
path_to_source/sources/meta-java \
4、根据README的指导修改build/conf/local.conf文件,在local.conf增加以下几行,注意下面的内容是krogoth版本操作,其他版本可能不同,请参考readme文件。
# Possible provider: cacao-initial-native and jamvm-initial-native
PREFERRED_PROVIDER_virtual/java-initial-native = "cacao-initial-native"
# Possible provider: cacao-native and jamvm-native
PREFERRED_PROVIDER_virtual/java-native = "cacao-native"
# Optional since there is only one provider for now
PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
5、根据README,修改bbplayers.conf文件的BBLAYERS,增加meta-java这一层,注意下面的内容是krogoth版本操作,其他版本可能不同,请参考readme文件。
BBLAYERS ?= " \
${OEROOT}/meta \
${OEROOT}/meta-poky \
${OEROOT}/../meta-phytec \
${OEROOT}/../meta-yogurt \
${OEROOT}/../meta-openembedded/meta-oe \
${OEROOT}/../meta-openembedded/meta-networking \
${OEROOT}/../meta-openembedded/meta-python \
${OEROOT}/../meta-openembedded/meta-multimedia \
${OEROOT}/../meta-qt5 \
${OEROOT}/../meta-java \
${OEROOT}/../meta-openembedded/meta-ruby \
6、修改build/conf/local.conf文件,增加openjdk-8软件,注意下面的内容是krogoth版本操作,其他版本可能不同,请参考readme文件。
IMAGE_INSTALL_append = " openjdk-8"
7、重新编译镜像即可。
为已包含的软件增加额外的库,如python, perl, qt等。
修改build/conf/local.conf文件中的下面这个选项,然后增加额外的包。
IMAGE_INSTALL_append = " \
perl \
perl-module-base \
perl-module-findbin"
具体有哪些包可以增加,可以在 build/tmp/work/cortex..../perl/5.2..../packages-split/ 中查找。
有一些是需要修改对应软件的config,比如以下配置,同样在local.conf中,具体有哪些可以配置可以参考qtbase.bb文件:
PACKAGECONFIG_append_pn-qtbase = " sql-sqlite"
为QT增加sqllite支持。
怎样删除在镜像中的软件包
在build/conf/local.conf中增加
PACKAGE_EXCLUDE = "package_name package_name package_name ..."
来删除软件。
如果是移除packagegroup则
IMAGE_INSTALL_remove = "packagegroup-name ..."
可以通过
yocto查询各类信息方法指南-查找各个软件包在文件系统中的大小
来查找文件系统中已经安装的软件。
同时通过
yocto查询各类信息方法指南-查找包之间的依赖关系
。
可以通过buildhistory/images/machine_name/glibc/image_name/image-info.txt来查看安装的packagegroup名称。
其中包的顶层控制是 packagegroup- 开头的,删除他们就可以将整个功能都删掉。