yocto项目将编译目标安装到rootfs的过程

流程简单说明:
xxx.bb,是一个普通的bb文件,控制一个功能模块的编译。
FILES_${PN}_TODO,是一系列的yocto变量,用来控制不同的package包安装哪些文件。
$(PN)是包名,这里就是xxx.bb中的那个xxx。
(一个文件只能被安装到一个package里面,如果将一个文件安装到多个package里,会选择第一次出现的安装动作,后面的安装会失败)

yyy-image.bb,是一个image bb文件,控制生成的rootfs。
IMAGE_INSTALL,是一个yocto变量,用来控制当前image生成的rootfs选择安装哪些包。



 

bitbake recipe执行流程

bitbake变量

PN: package name

DL_DIR: 下载目录
BB_CURRENTTASK: 当前task名称,do_fetch, do_unpack, do_configure, do_install, do_populate_sysroot等
BASE_WORKDIR: 一般为${TMPDIR}/work
WORKDIR:package工作目录,一般为${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
RECIPE_SYSROOT: "${WORKDIR}/recipe-sysroot"
RECIPE_SYSROOT_NATIVE:"${WORKDIR}/recipe-sysroot-native"
S:package源码目录
B:package build目录
T:package temp目录
D:package install目录
SYSROOT_DESTDIR: populate_sysroot的目标目录
STAMPS_DIR:存放PN:taskname的操作记录,每次重新构建的时候判断是否需要执行
  • do_fetch
    从指定位置下载package的文件到${DL_DIR}

  • do_unpack
    将下载的package文件释放到目录${WORKDIR}

  • do_prepare_recipe_sysroot
    准备package依赖的各种文件
    'BB_TASKDEPDATA'中保存了PN:BB_CURRENTTASK依赖的其他PN:taskname
    bitbake会检测依赖关系,遍历依赖的PN:taskname列表,到${SSTATE_MANIFESTS}目录找对应的manifest-{pkgarch}-{PN}.populate_sysroot
    将manifest文件中记录的文件,复制到RECIPE_SYSROOT或RECIPE_SYSROOT_NATIVE中
    staging_processfixme会将复制的文件中的FIXMExxx字符修改为符合当前package要求的路径
    manifest中存放的文件路径一般在${COMPONENTS_DIR}中

native相关的放到recipe-sysroot-native目录下
target相关的放到recipe-sysroot目录下
复制方式为先尝试hard link,如果失败则copy
后续package执行的环境变量PATH会包含RECIPE_SYSROOT/RECIPE_SYSROOT_NATIVE

  • do_patch
    打补丁

  • do_generate_toolchain_file/do_write_config, 可选
    根据package的编译方式,生成编译文件
    如果工程是meson的,执行do_write_config
    如果工程是cmake的,执行do_generate_toolchain_file

  • do_configure
    执行各类工程中的'config'动作
    automake的,执行configure
    meson:执行meson ...
    cmake的,执行cmake..

  • do_compile
    编译文件

  • do_install
    在${B}执行'make install',安装文件到${D}

  • do_populate_sysroot
    将需要输出的文件放到¥{SYSROOT_DESTDIR}, 并在其下的sysroot-providers中创建${PROVIDES}文件,写入${PN}

  • do_package
    打包package文件

  • do_package_write_ipk/do_package_write_rpm
    根据${PACKAGE_CLASSES}指定的打包格式,将package文件打包成.rpm或.ipk,将package信息写入${PKGDATA_DIR}

sstate_installpkgdir作为一些task的postfuncs执行,将相关文件安装到${COMPONENTS_DIR}目录,将文件中与工程相关的绝对路径,替换为FIXME变量
以供后续其他package 执行populate_sysroot的时候修改

https://github.com/pswarfound

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安装imx6 Yocto交叉编译环境需要以下步骤: 1. 下载并安装交叉编译工具链,可以从官方网站或第三方网站下载。 2. 下载并解压imx6 Yocto源代码,可以从官方网站下载。 3. 进入源代码目录,执行“source setup-environment <build_dir>”命令来设置编译环境变量。 4. 配置编译选项,在conf文件中进行修改。 5. 执行“bitbake core-image-minimal”命令来开始编译。 6. 等待编译完成,将生成的镜像烧写到imx6设备上即可。 ### 回答2: IMX6 Yocto是一种基于Linux的嵌入式操作系统,它可以在各种嵌入式设备中运行,包括智能手机、平板电脑和其他嵌入式设备。IMX6 Yocto需要交叉编译才能在设备上运行,因此需要设置IMX6 Yocto交叉编译环境。 在安装IMX6 Yocto交叉编译环境之前,需要准备以下事项: 1. 一台运行Linux或Mac OS X的计算机; 2. 安装交叉编译工具链; 3. 安装Git; 4. 安装文本编辑器,如Vim或Nano。 接下来,我们将逐步介绍如何在Linux或Mac OS X上安装IMX6 Yocto交叉编译环境。 第一步:安装交叉编译工具链 IMX6 Yocto需要使用交叉编译工具链,可从官方网站下载。可以选择下载解压后放在/usr/local/目录下。然后将/bin/i686-pc-linux-gnu-路径添加到$PATH环境变量中,例如,在~/.bashrc文件中添加以下行: export PATH=$PATH:/usr/local/gcc-arm-none-eabi-10-2020-q4-major/bin/ 然后运行source ~/.bashrc或重新打开终端窗口以应用更改。 第二步:安装Git $ sudo apt-get update $ sudo apt-get install git 第三步:创建工作目录 创建一个新目录,例如imx6-yocto,并进入该目录: $ mkdir ~/imx6-yocto $ cd ~/imx6-yocto 第四步:下载IMX6 Yocto源码 使用Git从GitHub上克隆IMX6 Yocto存储库。你需要安装Git,假设下载地址为git@github.com:xxx/imx6-yocto.git: $ git clone git@github.com:xxx/imx6-yocto.git 等待下载过程结束。 第五步:配置Yocto Build Environment 进入imx6-yocto目录并执行以下命令: $ source setup-environment build 它将为您创建一个build目录和一些配置文件。如果在运行此命令时出现任何问题,请确保已正确安装所有依赖项,例如安装了python、perl、help2man等软件包。 第六步:构建Image文件 输入以下命令执行Image文件的构建: $ bitbake core-image-minimal 进程可能需要一段时间才能完成。执行成功将会在/tmp/deploy/images/imx6/中产生core-image-minimal-imx6qdl.sdcard.bz2压缩文件,即镜像文件。可以将镜像文件下载到SD卡中进行运行。 到此,IMX6 Yocto交叉编译环境的安装就完成了。如果出现错误,请检查依赖项是否正确安装,或在官方网站或社区论坛上查找解决方案。 ### 回答3: imx6是一款性能强大的嵌入式处理器,使用yocto构建嵌入式系统,可以有效优化系统性能,提高开发效率。而交叉编译则是嵌入式开发中必不可少的一环,可以在一台主机上编译出适用于目标平台的二进制文件。因此,安装imx6 yocto交叉编译环境是非常重要的。 安装imx6 yocto交叉编译环境的步骤如下: 1. 准备工作 在安装环境之前,需要准备以下环境: a. 一台可运行Linux系统的主机,推荐使用Ubuntu 16.04以上版本。 b. 下载并安装ARM架构交叉编译器,比如arm-linux-gnueabihf。 c. 下载并安装支持imx6的交叉编译工具,比如imx6q-poky-linux-gcc。 d. 下载并安装yocto-sdk环境,这是一个类似于开发工具包的软件,提供了一些模块和库供开发者使用。 2. 安装库文件 在主机上安装所需要的库文件,这些文件包括g++,make,findutils和python。 sudo apt-get install g++ make findutils python 3. 配置环境变量 在主机上配置环境变量,以允许主机寻找交叉编译器和yocto-sdk环境。 export CROSS_COMPILE=arm-linux-gnueabihf export SDKTARGETSYSROOT=/path/to/sdk/sysroot 4. 配置yocto源码 下载并配置yocto源码,以便使用yocto构建嵌入式系统。 git clone git://git.yoctoproject.org/poky cd poky git checkout -b imx6 origin/imx6 5. 构建yocto环境 配置和构建yocto环境,以便构建所需的软件包。 source oe-init-build-env bitbake core-image-minimal 6. 交叉编译应用程序 使用交叉编译工具来交叉编译应用程序,以便在imx6上运行。 arm-poky-linux-gnueabi-gcc -o hello_world hello_world.c 7. 部署应用程序 将交叉编译生成的可执行文件部署到目标设备上,以便在设备上运行。 scp hello_world user@device:/path/to/hello_world 总之,以上就是安装imx6 yocto交叉编译环境的大致步骤。在实际开发中,可能会遇到各种问题,需要仔细检查每一个步骤,找出问题并解决。通过使用yocto构建嵌入式系统,可以大大提高开发效率,减少开发周期,让嵌入式开发更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值