(二)Yocto编译前的准备

本文详细介绍如何在Ubuntu环境下安装配置Yocto项目,并下载目标板BSP进行简易发行版的基础配置,最后执行编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、主机环境

       Ubuntu 16.04 64位,Windows主机上的VMware14虚拟机。

       目标板:ZC702 

二、下载安装Yocto

1、虚拟机基本条件

  • 最少 4-6 GB 内存
  • 最新版的 Ubuntu 系统(本文使用了 16.04 LTS)
  • 磁盘剩余空间至少 60-80 GB

2、安装Yocto所需依赖

执行如下命令:  

apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop

3、下载安装Poky(note:切换到个人用户下执行,否则需要各种改权限,很麻烦!!!)

执行如下命令:

git clone -b morty git://git.yoctoproject.org/poky.git

4、下载完成之后在Poky文件夹目录下由如下内容:

下面我们来简单说以下这些目录里面都是些什么东西。

三、Poky目录结构介绍

1、Bitbake目录:

此目录包含BitBake的副本,以方便使用。该副本通常与BitBake项目中当前稳定的BitBake版本匹配。BitBake是一种元数据(Metadata)解释器,它读取Yocto项目元数据并运行由该数据定义的任务。失败通常来自元数据,而不是来自BitBake本身。因此,大多数用户不需要担心BitBake。

运行该bitbake命令时,将bitbake/bin/启动驻留在目录中的主BitBake可执行文件 。获取环境设置脚本(即 oe-init-build-env)将scripts和 bitbake/bin目录(按此顺序)放入shell的PATH环境变量中。执行bitbake其实就是执行bitbake/bin下的东西。

2、build目录

 此目录是构建输出目录,输出的内核镜像、根文件系统等通过bitbake编译出来的东西都会在次目录下,此目录在下载完poky之后刚开始是没有的,在编译之前需要初始化环境变量(即 source oe-init-build-env),如果不指定输出目录,则系统会自动生成一个build目录,在 系统默认生成的目录下会有conf配置目录,在conf/local.conf中配置机型信息,在conf/bblayers.conf中写入编译所需要的层的路径,这些内容在上一篇博客中有所介绍,就不多说了。

3、documentation目录

此目录包含Yocto项目文档的源代码以及手册的PDF和HTML版本的模板和工具。每个手册都包含在子文件夹中。

4、meta目录

该目录包含OpenEmbedded-Core元数据。该目录包含模拟目标(qemux86, qemuarm等等)的配方,公共类和机器配置。

5、meta-poky目录

 poky发行版本的配置数据(这个具体是些什么内容,手册上还没翻到,之后再补充吧)。比如:构建系统使用模板配置文件,默认情况下,在meta-poky/conf

6、meta-yocto-bsp目录

yocto工程包含的一些参考的BSP配置,通常厂商自己会增加自己的bsp目录(比如meta-xilinx)。

7、meta-selftest目录

 OE自测的recipes和append 文件,此目录添加其他配方并附加OpenEmbedded selftests使用的文件,以验证构建系统的行为。

bblayers.conf除非要运行自我测试,否则 不必将此图层添加到 文件中。

8、meta-skeleton目录

该目录包含BSP和内核开发的模板配方。

9、scripts目录

脚本文件,用来提供一些特性的功能。该路径会被添加到环境变量中。

10、oe-init-build-env

此脚本设置OpenEmbedded构建环境。source使用shell中的命令运行此脚本会PATH根据当前工作目录更改并设置其他核心BitBake变量。需要在运行BitBake命令之前运行环境设置脚本。该脚本使用scripts目录中的其他脚本 来完成大部分工作。

运行此脚本时,将设置Yocto Project环境, 创建输出目录,工作目录将成为Build Directory,并显示常见BitBake目标列表。比如这样

该脚本从conf-notes.txt文件中获取其默认的公共目标列表,meta-poky。如果有自定义poky,则可以修改此配置文件以包含自己的分发目标。详细信息,可以参阅Yocto项目开发任务手册中的“ 创建自定义模板配置目录 ”部分。

默认情况下,在没有BuildDirectory参数的情况下运行此脚本会build在当前工作目录中创建该目录。如果source在脚本时提供Build Directory参数 ,则指示OpenEmbedded构建系统创建您选择的构建目录。例如,以下命令创建一个名为mybuilds“ 源目录”之外的 构建目录:


  
  1. <span style="color:#333333"> $ source oe-init-build-env~ / mybuilds
  2. </span>

OpenEmbedded构建系统使用模板配置文件,默认情况下,这些 meta-poky/conf文件位于源目录中的目录中。

四、下载目标板的BSP

在如下地址可以下载到:http://git.yoctoproject.org/cgit/cgit.cgi/

此处我们用到-meta-xilinx,所以我们找到它的下载地址,然后切换到poky目录下执行如下命令:

git clone https : / / github .com / Xilinx / meta - xilinx .git

五、配置(简易发行版基础配置)

1、切换分支(十分重要!!!)

cd poky

git checkout morty

确保meta-Xilinx也要和主目录同一分支

cd meta-xilinx

git checkout morty

2、环境初始化

返回poky目录,首先执行    source oe-init-build-env  命令初始化bitbake的环境,并且生成构建输出目录,下一步就是根据自己的需求修改输出目录中conf中的配置文件。

3、在构建输出目录中修改配置文件(poky/build/conf/)

自动进入〜 / poky / build目录。 告诉bitbake关于新的meta-xilinx层:

将meta-xilinx路径加到bblayer.conf中

屏蔽默认的机型,将以下行添加到conf / local.conf文件中:

MACHINE ?? = "zc702-zynq7"

六、执行编译

执行如下命令行开始编译:

bitbake core-image-minimal

此处第一次编译需要等待几个小时,因为会自动下载安装一些必备的软件包,有时会出现网络连接中断退出的情况,不用担心,再次执行同样的命令,它会接着之前下载的继续下载。

### 如何在 Yocto 项目中编译生成静态库 `.a` 文件 #### 修改 `no-static-libs.inc` 为了使 Yocto 支持静态库的构建,需要修改配置文件以允许启用静态库的支持。具体来说,在 `meta/conf/distro/include/no-static-libs.inc` 中取消对静态库禁用选项 `-DISABLE_STATIC ?= " --disable-static"` 的设置[^4]。 ```diff -DISABLE_STATIC ?= " --disable-static" +DISABLE_STATIC ?= "" ``` 此更改使得项目的构建过程不再强制关闭静态库支持,默认情况下会尝试创建静态版本的库文件。 #### 配置 BitBake 构建环境 BitBake 是 Yocto Project 使用的核心工具之一,负责处理各种包管理任务以及自动化软件构建流程。通过继承自定义类或调整现有类中的参数可以控制具体的编译行为。由于所有配方都会自动加载 `base.bbclass` 类,因此无需额外操作即可利用其内置功能来完成大多数常规工作[^3]。 对于特定于某个应用程序或者库的情况,则可以在对应的 recipe 文件里指定更详细的指令集用于指导编译器生成所需的输出形式——在这里就是指`.a`类型的存档文件而不是共享对象(`.so`)。 #### 设置 Makefile 或 CMakeLists.txt 如果目标程序采用的是 Autotools 工具链(如 Autoconf 和 Automake),那么通常只需要确保 configure 脚本接收到合适的命令行开关就可以让它们知道要制作什么类型的产品;而对于基于 CMake 的工程而言,则可能涉及到编辑顶层目录下的 `CMakeLists.txt` 来显式声明希望得到的结果: - 对于使用 GNU make 的项目,可以通过传递 `--enable-static --disable-shared` 参数给 configure 命令来指示只建立静态库; - 如果是 CMake 项目,则应该查找并适当设置变量 `BUILD_SHARED_LIBS` 到 OFF 并确认其他相关属性也指向正确的方向以便最终产出期望格式的目标产物。 #### 编辑 Recipe 文件 最后一步是在对应的应用层面上编写好 bitbake 可识别使用的 recipe 文档。这包括但不限于提供源码下载地址、补丁集合路径以及其他必要的元数据信息。当一切准备就绪之后执行 `bitbake <recipe-name>` 即可触发整个流水线作业直至获得预期成果为止。 例如,假设有一个名为 `mylibrary_1.0.bb` 的 recipie 文件用来描述如何获取和组装第三方依赖项 libDataCollect.a 及其所涉及的一切关联资源。在这个过程中需要注意按照正确次序罗列各个组成部分,并且保证最底层的基础组件最先被引入到链接阶段当中去[^1]。 ```bash SRC_URI += "file://path/to/libDataCollect.patch" do_compile() { oe_runmake 'LDFLAGS=-static' } ``` 上述脚本片段展示了怎样向现有的编译规则追加新的 LDFLAGS 宏定义从而影响链接期间的行为模式,进而促成纯静态进制文件的成功诞生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值