OpenEmbedded是一些脚本(shell和python脚本)和数据构成的自动构建系统。     脚本实现构建过程,包括下载(fetch)、解包(unpack)、打补丁(patch)、configure、编译(compile)、安装(install)、打包(package)、staging、做安装包(package_write_ipk)、构建文件系统等。 1、OE编译顺序:

do_setscene
do_fetch
do_unpack
do_patch
do_configure
do_qa_configure
do_compile
do_stage
do_install
do_package
do_populate_staging
do_package_write_deb
do_package_write
do_distribute_sources
do_qa_staging
do_build
do_rebuild
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2、每个do都可以添加_append,_prepare操作:

do_configure_prepend ()
do_compile_prepend ()
python do_compile_prepend ()
do_stage_prepend()
do_install_prepend()
do_package_prepend()
python populate_packages_prepend ()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

带有python的函数,其函数内容是使用python定义的,否则使用shell 语法定义。 do_compile这些函数都是在openembedded的classes中定义的,在bitbake中没有对这些进行定义。这说明,bitbake只是oe更底层的一个工具,oe是基于bitbake架构来完成的。

文件系统里的OpenEmbedded    OE环境中最重要的目录有3个:放工具的bitbake目录、放元数据的目录、和执行构建的build目录。 bitbake目录   这个目录里是我们的烹饪工具:bitbake。我们使用它,但通常不需要访问它 元数据目录   在poky中元数据目录是meta。Openmoko中元数据目录是openembedded。在元数据目录中,有3个目录里是真正的元数据。它们是:classes、conf和packages。 packages目录     所有的配方(recipes)文件(以.bb为后缀名)都放在package目录。每个相对独立的软件包或构建任务在package目录下都有自己的子目录。在一个子目录中可以有多个配方(recipes)文件。它们可能是同一个软件包的不同版本。也可能描述了基于同一个软件包的不同构建目标。       有的配方(recipes)简单,有的配方(recipes)复杂。简单的配方(recipes)仅描述一个软件包的构建。最复杂的配方(recipes)就是要求构建文件系统的配方(recipes),这个配方(recipes)文件本身并不长,甚至还很短,但它通过依赖关系将几百个甚至几千个其它配方(recipes)件卷入了构建过程。 packages目录的images子目录下就是这些要求构建文件系统的配方(recipes)。 classes目录     这个目录放的是配方(recipes)的类文件(以.bbclass为后缀名)。类文件包含了一些bitbake任务的定义,例如怎么配置、怎么安装。配方(recipes)文件继承类文件,就继承了这些任务的定义。例如:我们如果增加一个使用autotool的软件包,只要在配方(recipes)文件中继承autotools.bbclass: inherit autotools    bitbake就知道怎样使用autotool工具配置、编译、安装了。所有的配方(recipes)文件都自动继承了base.bbclass。 base.bbclass提供了大部分bitbake任务的默认实现。     一个配方(recipes)文件可以继承多个类文件。以后的文章会介绍bitbake的任务,届时会更详细地讨论bitbake的继承。目前,我们只要知道继承类文件是一种构建过程的复用方式就可以了。 conf目录 conf目录包含编译系统的配置文件(以.conf为后缀名)。bitbake在启动时会执行bitbake.conf。 bitbake.conf会装载用户提供的local.conf。然后根据用户在local.conf中定义的硬件平台(MACHINE)和发布目标(DISTRO)装载machine子目录和distro子目录的配置文件。machine子目录里是硬件平台相关的配置文件。distro子目录里是与发布目标相关的配置文件。配置文件负责设置bitbake内部使用的环境变量。这些变量会影响整个构建过程 build目录 build是我们烹饪嵌入式系统的大厨房。整个构建过程就是在build目录的tmp子目录完成的。 build目录的conf子目录里是用户的配置文件local.conf。 tmp目录有7个子目录:cache、cross、rootfs、staging、work、deploy和stamps目录。其中cache是bitbake内部使用的缓存目录。cross是构建过程中产生的交互编译器。所谓交互编译器就是在主机平台运行,用于编译目标平台代码的编译器。  rootfs是制作文件系统映像前临时建立的根文件系统。我们在工作中通常不需要访问这3个目录。我们访问比较多的是其它4个目录:staging、work、deploy和stamps目录。 1. staging目录 软件包B在构建时可能依赖软件包A提供的头文件、库文件,也可能要使用软件包C生成的工具。 staging目录就是放这些输出文件的地方。 我们必须在配方(recipes)文件中用“DEPENDS”变量声明构建时的依赖关系。bitbake就会在构建软件包B前先构建软件包A和软件包C,并将软件包B需要的头文件、库文件、和工具放在staging目录。这样,在构建软件包, 时就可以从staging目录得到需要的头文件、库文件、和工具。 2. work目录     所有软件包的解包、打补丁、配置、编译、安装等工作都是在work目录进行的。所以work目录包含了整个嵌入式系统的完整源代码。 work目录下按照硬件平台、发行人、目标平台的不同又分了几个子目录。所有软件包都被放在对应子目录中。每个软件包都有一个独立的目录。因为软件包总是 根据一个配方(recipes)文件构建的,所以软件包所在的目录就是对应配方(recipes)文件的工作目录。在讨论bitbake和配方(recipes)文件时我们还会回来,更仔细地观察配方(recipes)文件的工作 3 deploy目录     这是保存输出成果的目录。其中images目录保存构建成功后产生的文件系统映像、内核映像。 ipk目录保存每个软件包的安装包。我们在修改、构建软件包后,可以在目标平台手工安装ipk目录下的对应安装包。确认没有问题后,再制作文件系统映像。 4 stamps目录    和work目录类似,stamps目录也按照硬件平台、发行人、目标平台的不同又分了几个子目录。软件包在完成每个bitbake任务后都会在对应子目录里touch一个对应任务的时间戳。有时我们会手工删除某个软件包的时间戳,强制bitbake重新构建这个软件包。 5 sources目录 OE环境的sources目录是一个储藏间,用来放从网上下载的源代码包。 fetch任务负责下载代码,放到sources目录。


OE的主要功能是为各种工程项目的需要编译源码。不管是什么工程,以下任务都是要作的: 1. 下载源码包,还有其他的系统支持文件(比如初始化脚本); 2. 解压源码包,然后打上需要的补丁; 3. 如果需要的话就进行软件包配置(比如运行configure脚本); 4. 编译所有的东西; 5. 把所有编译好的文件打成各种格式的包,然后准备安装。

其实这些并没有什么非常不寻常的。困难的是: 1. 交叉编译:交叉编译是困难的,大部分软件包根本不支持交叉编译,OE里包含的都是支持交叉     编译的。 2. 目标系统和主机是不同的: 这意味着你不能编译一个程序就直接运行它—那是给在目标板上     运行的。有很多的软件包在编译的时候会编译并且运行一些帮助或者测试程序,这在交叉编译的时     候会导致失败。 3.工具链总是很难编译的。交叉工具链更是如此。通常情况下你可能会选择去下载一个别人做好的,     但是使用OE你就不需要如此。在OE里整个工具链在编译系统的时候都会被创建。OE的这种方式或许     在开始的时候会带来一些困难和不便。但是如果你需要打上补丁或者对工具链做些调整就会很容易。

当然,除了这些之外,oe还有很多的功能,其中包括: * 同时支持glibc和uclibc;     * 只使用oe一个工具你就可以为多种目标机器构建系统; * 自动编译一切构建时和编译时依赖的包; * 直接创建各种可以在目标机器上直接运行的镜像(包括jffs2,ext2.gz,squashfs等等); * 支持各种打包格式; * 自动构建交叉工具链; * 支持构建“本地包”。本地包指为了完成编译给主机编译的包,最终不会用到目标板上。 本章以下内容假设你已经掌握了OE的Getting Start guides(新手指南),并且已经能够正确安装和 配置oe,而且你也成功的构建了交叉工具链。

bitbake的常用命令: bitbake -e 显示当前的执行环境,常用于查找当前bitbake的包的源路径和目标路径。 查找包的原路径 bitbake -e hello | grep ^SRC_URI 查找包的安装路径 bitbake -e hello | grep ^S= bitbake -s 用于显示所有可以bitbake的包 例如如果自己在一个Layer下面安装了一个hello.bb,在build目录下面用 bitbake -s | grep hello 查看hello这个package能否被bitbake. bitbake -c 用于执行一个特定的命令 bitbake -g 用于显示一个包在bitbake的时候于其他包的依赖关系 bitbake -v 显示执行过程。 bitbake -b 后面加上.bb文件的路径,可以用bitbake直接执行这个.bb文件。

OE中的bitbake使用的更多相关文章

  1. OE中admin的内置帐号

    在OE中admin的内置帐号为SUPERUSER_ID,可以用来直接做判断登录用户是否admin from openerp import SUPERUSER_ID if uid == SUPERUSE ...

  2. 四、OE 中添加对供应商名称的唯一限制

    最初的思路是利用sql_constraints 来限制重复的供应商名称,但后来想到在OE中供应商.客户乃至员工都隶属于Partner,sql_constrainst实际上是通过限制partner来限制 ...

  3. [原][osg][osgEarth]关于在OE中使用物理引擎的调研

    关于物理引擎旋转的一些整理 参考文档 http://blog.wolfire.com/2010/03/Comparing-ODE-and-Bullet 介绍ODE和bullet的利弊 http://s ...

  4. [osgearth][原]仿照谷歌,修改oe漫游器中focal(视角切换)功能

    oe中的视角加速感觉好奇怪,就仿照谷歌方式去改了. 先看看oe原来的漫游器改变视角的接口: void CameraManipulator::setViewpoint(const Viewpoint&a ...

  5. 2018.8.23几日重新编译OSG+OE+Qt遇到的问题

    Qt安装多个版本的时候,注意屏蔽掉不使用的Qt,例如OE中的CMakeLists.txt中的# FIND_PACKAGE(Qt4) 使用以前编译好的libcurl.dll现在出现"无法定位序 ...

  6. 三、OPENERP 中的对象关系类型

    OE中的对象关系一共分四种,one2one,one2many,many2one,many2many.他们的意思分别是一对一,一对多,多对一以及多对多. 我们新建一个模块来测试这四种类型 1.one2o ...

  7. Yocto tips (15): Yocto中的包管理器

    使用包管理器 在local.conf中使能就可以: 然后编译后就会有rpm包了: 配置文件server 能够使用ngix和apache.可是我们也能够仅仅用使用python: python -m Si ...

  8. BitBake使用攻略--从HelloWorld讲起

    目录 写在前面 1. 什么是BitBake 2. BitBake的安装 3. 使用BitBake构建一个HelloWorld工程 后续 写在前面 <BitBake使用攻略>系列文章将从今天 ...

  9. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)

    记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...

随机推荐

  1. Iterative Quantization,ITQ

    Abstract 针对大规模的图像检索问题,论文提出了一个高效的ITQ算法.该算法先将中心化后的数据映射到超立方体的顶点上,再通过优化过程寻找一个旋转矩阵,使得数据点经过旋转后,与超立方体的顶点数据具 ...

  2. 八大排序算法的python实现

    # -*- coding: utf-8 -*- # 冒泡排序 def bubble_sort(nums): i = 1 exchanged = True while i < len(nums) ...

  3. Spring+Junit测试用例的使用

    1.[导包]使用Spring测试套件,需要两个jar包:junit-X.X.jar和spring-test-X.X.X.RELEASE.jar,在maven项目下可添加如下依赖: <depend ...

  4. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  5. Oracle 数据库执行 操作系统的命令

    1 Linux环境下面的处理 在sqlplus 里面 添加一个 ! 就可以执行 但是 因为Oracle 必须为非root用户 所以很多命令可能无法执行: 2. Windows 环境执行命令的方式 是在 ...

  6. IIS 下 搭建简单的FTP服务器

    1. 修改用户策略, 创建简单用户密码 命令行输入 gpedit.msc 打开组策略 位置 2. 创建一个FTP使用的用户 net user zhaobsh Test6530 /add 3. 安装II ...

  7. REQUIRES_NEW 如果不在一个事务那么自己创建一个事务 如果在一个事务中 自己在这个大事务里面在创建一个子事务 相当于嵌套事务 双层循环那种

    REQUIRES_NEW   如果不在一个事务那么自己创建一个事务 如果在一个事务中 自己在这个大事务里面在创建一个子事务  相当于嵌套事务 双层循环那种 不管是否存在事务,业务方法总会自己开启一个事 ...

  8. SSH协议详解

    简介 SSH只是一个协议,基于这个协议有不同的实现,这些实现中有开源,也有收费. 原理 普通网络通信一般是明文通信,数据容易被中间人拦截并且解析,而SSH协议则提供了基于内容加密服务. 流程: 第一种 ...

  9. 普通平衡树Treap(含旋转)学习笔记

    浅谈普通平衡树Treap 平衡树,Treap=Tree+heap这是一个很形象的东西 我们要维护一棵树,它满足堆的性质和二叉查找树的性质(BST),这样的二叉树我们叫做平衡树 并且平衡树它的结构是接近 ...

  10. bzoj 1824: [JSOI2010]下棋问题

    考虑每次新放一个棋子会产生多少新的矩形,以及减掉多少旧的矩形. 用第$i$个点的坐标把坐标轴分成4个象限. 显然第一问的答案用四个单调栈就能解决. 而且第二问每个矩形的两个端点一定在1,3或2,4象限 ...