关于Recipe

Yocto中的菜谱Recipes描述了如何获取,配置,编译,安装各种包。在Poky,meta-openembedded等定义了许多Recipes,但默认地它们并不编译。镜像菜谱(Image Recipes)定义了一个这些可用Recipes的子集,以包含到你的rootfs镜像中。默认预编译镜像dey-image-qt,这个Recipe其实是在meta-digi这个layer下定义的。如果仔细检查路径,发现它在DEY安装路径下sources/meta-digi/meta-digi-dey/recipes-core/dey-image-qt.bb。

用项目配置文件添加软件包

在项目所在的配置目录conf下,有几个文件,其中bblayers.conf定义了默认项目用到的一些layer,大量的包其实就在这些layer里定义,我们可以很简单地通过local.conf来添加一些包。Yocto不同版本中的语法有些变化,请根据版本来选择:

  • 添加一个新的包

编辑<project-dir>/conf/local.conf:

DEY3.2和之前的版本,用:
    IMAGE_INSTALL_append = "mtd-utils"
DEY4.0开始的版本,用  
    IMAGE_INSTALL:append = "mtd-utils"
 
  • 移除一个包

编辑<project-dir>/conf/local.conf:

	
DEY3.2和之前的版本,用:
    IMAGE_INSTALL_remove = "alsa-utils-speakertest"
DEY4.0开始的版本,用  
    IMAGE_INSTALL:remove = "alsa-utils-speakertest"

编译image镜像

	
    # bitbake dey-image-qt

当然项目配置的layer中,支持哪些包,可以用下面命令查询:

# bitbake-layers show-recipes

因为不同版本的包名,甚至嵌入式和桌面不同发行版有时包名会有此差异,因此可以按上面方法找到正确的包名。比如要安装pyserial,你可能不知道包名,会直接尝试pyserial这个名称,编译出错时,你应该用上面方法找到正确的包名:

# bitbake-layers show-recipes |grep pyserial
这样就会搜索出带有pyserial的包名,我们发现正确的包名其实是:python-pyserial

在另外一些场景,你所要添加到包并不在DEY项目默认镜像配置用到的layer中,但它也是DEY layer的一部分,也同样可以通过配置来添加到rootfs中。 举个例子,我们想添加mpg123(一个命令行的mp3播放器),需要这么做:

  • 添加recipe对应的layer到项目的bblayers.conf中去

在<project-dir>/conf/bblayers.conf中,添加下面内容

  <DEY-INSTALLDIR>/sources/meta-openembedded/meta-multimedia
  • 添加要安装的包到项目的local.conf中去
DEY3.2和之前的版本,用:
    IMAGE_INSTALL_append = "mpg123"
DEY4.0开始的版本,用  
    IMAGE_INSTALL:append = "mpg123"
  • 编译image镜像
  # bitbake dey-image-qt

如果你要添加的内容比较特别,没有包含在DEY的默认安装中,在自己动手写一个Recipe之前,还有一个机会是: 到Openembedded Layer Index中检索一下,是否有您要找的内容: http://layers.openembedded.org/layerindex/branch/master/layers/

如果找到相关内容,把包含您需要的Recipe的layer拷贝到DEY安装目录<DEY-installation>/sources/下,然后就和上面一样操作,把相应的layer或包名添加到项目配置文件中,再编译镜像。

用项目配置文件添加软件包集

这个在local.conf中是这样配置的

EXTRA_IMAGE_FEATURES = "<feature-name>"

选项包括:

    dey-audio: Adds audio support to a platform.
    dey-gstreamer: Adds the gstreamer framework to a platform.
    dey-network: Adds network applications and tools.
    dey-wireless: Includes wireless applications and drivers.
    dey-bluetooth: Adds Bluetooth support.
    dey-debug: Adds DEY debugging applications as memwatch and fbtest.
    dey-examples: Adds DEY example applications.
    dey-qt: Adds QT support.

可以在meta-digi中找到相关的定义,比如常用的dey-examples,实际上位于:meta-digi/meta-digi-dey/recipes-digi/dey-examples

文件系统的高级定制

更进一步的高级定制,您可以创建一个meta-custom的layer,它可以:

  • 包含新的recipes,比如添加新的应用程序或是新的文件到文件系统当中
  • 通过添加一个.bbappend的recips来修改已经存在的recipes,通常用这种方法修改文件系统中已经存在的文件,像配置文件之类的。
  • 创建一个新的目标镜像
  • 创建新的机器配置
  • 为新平台提供默认的内核配置或是增加配置等

深入学习,请参考英文教材: embedded_linux_projects_using_yocto_project_cookbook.pdf