yocto-poky下目录结构分析


yocto由许多的文件,目录或子目录组成,了解这些文件的意义和作用有助于我们快速的理解yocto项目

poky目录下的核心组件

bitbake目录

ubuntu:/media/C/Learn/poky/bitbake$  ls
AUTHORS    contrib  LICENSE               README
bin        doc      LICENSE.GPL-2.0-only  toaster-requirements.txt
ChangeLog  lib      LICENSE.MIT

bitbake是一个独立的项目,这里的poky/bitbake目录下就放了这个bitbake项目的副本,我们在使用的bitbake命令的其实就是这里的bitbake,而不是你的环境系统里面的。
bitbake是用来读取和解析meta目录中的数据,并创建相应的任务来处理,其他的目录基本上都是被bitbake使用的,用来按照相应的规则编译某个项目。
当我们source环境(source oe-init-build-env)的时候,会将scripts和bitbake/bin这两个目录的路径添加到PATH环境变量中:
在这里插入图片描述

build目录

一开始git clone下载的干净的poky目录下是没有这个build目录的,是我们source的过程中才开始创建的这个目录(可以参考oe-init-build-env和poky/scripts/oe-setup-builddir)
这个poky/build目录中包含有用户配置文件和OpenEmbedded构建系统在其标准配置中生成的输出,其中下载和解压后的源代码与编译输出的结果都在这个里面。
build目录也可以不固定放在poky目录下,或者名字也可以不固定,只要在source的时候带上参数即可:
. ./oe-init-build-env

meta目录

meta目录包含最小的,底层的OpenEmbedded核心元数据,保存着可以运行的虚拟目标,比如qemux86、qemuarm等的recipes,公共的class类和machine机器的配置。

ubuntu:/media/C/Learn/poky/meta$ ls
classes  files   recipes-connectivity  recipes-extended  recipes-kernel recipes-sato  site
conf  lib  recipes-core   recipes-gnome   recipes-multimedia  recipes-support
COPYING.MIT recipes-bsp recipes-devtools recipes-graphics recipes-rt          recipes.txt

meta-poky目录

该目录用来添加足够的元数据来定义poky reference distribution,是基于meta目录之上的扩展。build目录中的conf目录就是从meta-poky/conf中演变过来的,如local.conf和bblayer模板就是在这里

ubuntu:/media/C/Learn/poky/meta-poky$ tree
.
├── classes
│   └── poky-sanity.bbclass
├── conf
│   ├── bblayers.conf.sample
│   ├── conf-notes.txt
│   ├── distro
│   │   ├── include
│   │   │   ├── poky-distro-alt-test-config.inc
│   │   │   ├── poky-floating-revisions.inc
│   │   │   └── poky-world-exclude.inc
│   │   ├── poky-altcfg.conf
│   │   ├── poky-bleeding.conf
│   │   ├── poky.conf
│   │   └── poky-tiny.conf
│   ├── layer.conf
│   ├── local.conf.sample
│   ├── local.conf.sample.extended
│   └── site.conf.sample
├── README.poky
└── recipes-core
    ├── busybox
    │   ├── busybox
    │   │   └── poky-tiny
    │   │       └── defconfig
    │   └── busybox_%.bbappend
    ├── psplash
    │   ├── files
    │   │   └── psplash-poky-img.h
    │   └── psplash_git.bbappend
    └── tiny-init
        ├── files
        │   ├── init
        │   └── rc.local.sample
        └── tiny-init.bb

12 directories, 22 files

meta-yocto-bsp目录

这个目录下yocto官方为了方便bsp开发人员在开发和添加自己的bsp layer时,提供了3种目前主流体系架构的硬件平台bsp模板用于参考。比如这个目录下就有arm架构对应的beaglebone平台,mips对应的edgerouter平台,x86对应的genericx86平台等等。这里可以看到如何给这些平台增加相应的内核,bootLoader和其他的BSP配置。

ubuntu:/media/C/Learn/poky/meta-yocto-bsp$ tree
.
├── conf
│   ├── layer.conf
│   └── machine
│       ├── beaglebone-yocto.conf
│       ├── edgerouter.conf
│       ├── genericx86-64.conf
│       ├── genericx86.conf
│       └── include
│           └── genericx86-common.inc
├── lib
│   └── oeqa
│       ├── controllers
│       │   ├── beaglebonetarget.py
│       │   ├── edgeroutertarget.py
│       │   ├── grubtarget.py
│       │   └── __init__.py
│       └── selftest
│           └── cases
│               └── systemd_boot.py
├── README.hardware
├── recipes-bsp
│   ├── formfactor
│   │   ├── formfactor
│   │   │   ├── beaglebone-yocto
│   │   │   │   └── machconfig
│   │   │   ├── genericx86
│   │   │   │   └── machconfig
│   │   │   └── genericx86-64
│   │   │       └── machconfig
│   │   └── formfactor_0.0.bbappend
│   └── gma500-gfx-check
│       ├── gma500-gfx-check
│       │   ├── gma500-gfx-check.conf
│       │   └── gma500-gfx-check.sh
│       └── gma500-gfx-check_1.0.bb
├── recipes-graphics
│   └── xorg-xserver
│       ├── xserver-xf86-config
│       │   ├── beaglebone-yocto
│       │   │   └── xorg.conf
│       │   ├── genericx86
│       │   │   └── xorg.conf
│       │   └── genericx86-64
│       │       └── xorg.conf
│       └── xserver-xf86-config_0.1.bbappend
├── recipes-kernel
│   └── linux
│       ├── linux-yocto_5.4.bbappend
│       ├── linux-yocto_5.8.bbappend
│       └── linux-yocto-dev.bbappend
└── wic
    ├── beaglebone-yocto.wks
    ├── edgerouter.wks
    └── genericx86.wks.in

25 directories, 29 files

meta-selftest目录

这个目录存放自己的测试代码的配置,基本不用

meta-skeleton目录

skeleton英文意思是骨架,这个目录就是提供bsp和内核相关开发的模板,比如这里面就有一个hello-mod驱动模块的实例,系统层的服务程序,添加多个用户账户。

ubuntu:/media/C/Learn/poky$ tree meta-skeleton/
meta-skeleton/
├── conf
│   ├── layer.conf
│   ├── multilib-example2.conf
│   └── multilib-example.conf
├── recipes-baremetal
│   └── baremetal-examples
│       └── baremetal-helloworld_git.bb
├── recipes-core
│   └── busybox
│       ├── busybox
│       │   └── no_rfkill.cfg
│       └── busybox_%.bbappend
├── recipes-kernel
│   ├── hello-mod
│   │   ├── files
│   │   │   ├── COPYING
│   │   │   ├── hello.c
│   │   │   └── Makefile
│   │   └── hello-mod_0.1.bb
│   └── linux
│       ├── linux-yocto-custom
│       │   ├── 0001-linux-version-tweak.patch
│       │   ├── feature.scc
│       │   └── smp.cfg
│       └── linux-yocto-custom.bb
├── recipes-multilib
│   └── images
│       └── core-image-multilib-example.bb
└── recipes-skeleton
    ├── service
    │   ├── service
    │   │   ├── COPYRIGHT
    │   │   ├── skeleton
    │   │   └── skeleton_test.c
    │   └── service_0.1.bb
    └── useradd
        ├── useradd-example
        │   ├── file1
        │   ├── file2
        │   ├── file3
        │   └── file4
        └── useradd-example.bb

18 directories, 24 files

以下是meta-skeleton中的几个recipes,可以根据提示详细的分析

  • 1、recipes-baremetal
    这个目录里面是一个不跑系统的裸机程序演示,感兴趣的可以看下这个:
    https://github.com/aehs29/baremetal-helloqemu/blob/master/hello_baremetal_arm.c
  • 2、recipes-kernel
    教我们怎么给Linux内核添加patch补丁和config配置,怎么在源码树之外添加驱动模块实例
  • 3、recipes-skeleton
    教我们怎么添加一个应用层的service,而且还给了一个启动脚本
    同时还演示了如何在bb文件中安装启动脚本内容
  • 4、recipes-skeleton/useradd
    默认/home目录下通常只用一个root用户,这里就是我们可以往下面新增用户

已有硬件层的实例目录

这些目录了解需要我们根据yocto中的重要概念区分,找到对应的目录,后期我们将按照我们对这些目录的理解,去修改对应的文件或者增加对应的文件,解决自己目标需求。

metadara元数据

metadata中包括共享的配置(比如qemux86-64.conf机器配置),全局变量定义(如使用的kernel是什么版本,机器镜像有哪些功能等,比如x11,screen、alsa等等),共享的class类(如meta/classes),包装(meta/lib)和recipes配方。metadata和layers通常可以理解为一个东西,就是下面这些

poky]$ ls | grep "^meta"
meta #yocto基础的layer
meta-freescale #飞思卡尔的layer
meta-poky #yocto的poky发行版本layer
meta-qcom #这个是高通的layer
meta-qt5 #Qt5的layer
meta-selftest #自我测试的layer
meta-skeleton #骨架,很多例子
meta-yocto-bsp #yocto官方提供的参考bsp layer

classes

classes类定义了构建具有逻辑的封装和继承,有些Linux的bb文件就继承了Linux相关的一些class类,继承这些类的kernelrecipe bb文件,就不需要我们为内核的下载,config配置编译和安装等任务做太多事情,Linux的类有

ubuntu:/media/C/Learn/poky$ ls meta/classes/kernel*
meta/classes/kernel-arch.bbclass
meta/classes/kernel-artifact-names.bbclass
meta/classes/kernel.bbclass
meta/classes/kernel-devicetree.bbclass
meta/classes/kernel-fitimage.bbclass
meta/classes/kernel-grub.bbclass
meta/classes/kernel-module-split.bbclass
meta/classes/kernelsrc.bbclass
meta/classes/kernel-uboot.bbclass
meta/classes/kernel-uimage.bbclass
meta/classes/kernel-yocto.bbclass

第三方应用项目也有许多的class类,比如有些项目是cmake构建的,可以继承/meta/classes/cmake.bbclass,你就可以省去cmake项目应该怎么构建的烦恼。
Linux类和cmake类怎么继承,看例子:

#poky/meta/recipes-kernel/linux/linux-yocto.inc
inherit kernel 
inherit kernel-yocto
...
#poky/meta/recipes-support/libical/libical_3.0.8.bb
inherit cmake pkgconfig
...

使用到了inherit关键字

recipes

recipes配方是构建的软件和镜像的逻辑单元,它是构建一个项目的基本,通常应该包含若干个bb文件,包括bbappend文件。recipes通常是放在metadata layers目录中,会继承上面提及的一些class类,大致如下:

meta-xxx/recipes-abc/abc.bb

如果想知道自己yocto有哪些recipes,可以通过下面的命令查看:

build]$ bitbake-layers show-recipes

我们简单的看下/poky/meta/recipes.txt中内容

1 recipes-bsp          - Anything with links to specific hardware or hardware configuration information
2 recipes-connectivity - Libraries and applications related to communication with other devices
3 recipes-core         - What's needed to build a basic working Linux image including commonly used dependencies
4 recipes-devtools     - Tools primarily used by the build system (but can also be used on targets)
5 recipes-extended     - Applications which whilst not essential add features compared to the alternatives in
6                        core. May be needed for full tool functionality.
7 recipes-gnome        - All things related to the GTK+ application framework
8 recipes-graphics     - X and other graphically related system libraries
9 recipes-kernel       - The kernel and generic applications/libraries with strong kernel dependencies
10 recipes-multimedia   - Codecs and support utilties for audio, images and video
11 recipes-rt           - Provides package and image recipes for using and testing the PREEMPT_RT kernel
12 recipes-sato         - The Sato demo/reference UI/UX, its associated apps and configuration
13 recipes-support      - Recipes used by other recipes but that are not directly included in images

翻译:

recipes-bsp—任何带有特定硬件或硬件配置信息链接的内容
recip- connectivity -与其他设备通信相关的库和应用程序
recipes-core—构建包括常用依赖项在内的基本工作Linux映像所需要的内容
recipes-devtools——主要用于构建系统的工具(但也可以用于目标)
recipes-extended -与内核中的替代方案相比,这些应用程序虽然不是必不可少的,但却可以添加一些特性。可能需要完整的工具功能。
所有与GTK+应用程序框架相关的内容
recipes-graphics ---X和其他图形相关的系统库
recipes-kernel—具与内核有强依赖性的通用应用程序或者库
recipes-multimedia --音频、图像和视频的编解码器和支持应用程序
recipes-rt——提供用于使用和测试PREEMPT_RT内核的包和映像食谱
recipes-sato  参考UI/UX,相关的应用程序和配置
recipes-support——其他食谱使用的食谱,但没有直接包含在图片中
<think>好的,用户遇到了一个Yocto错误:“Error: TEMPLATECONF value (which is /home/cywu/work/yocto/poky/meta-altera/conf) must point to meta-some-layer/conf/templates/template-name”。首先,我需要理解这个错误的原因。 这个错误通常发生在设置TEMPLATECONF环境变量时,路径没有指向正确的模板目录结构Yocto期望TEMPLATECONF指向一个包含特定模板的路径,通常是meta-layer/conf/templates/template-name这样的结构。用户当前的路径是meta-altera/conf,可能缺少templates目录或者模板名称。 接下来,我需要考虑用户可能的操作步骤。用户可能在配置构建环境时,比如运行source oe-init-build-env,或者在修改local.conf或bblayers.conf时设置了TEMPLATECONF。可能用户直接指向了meta-altera的conf目录,而没有包含templates下的具体模板。 然后,我需要分析可能的原因。首先,检查路径是否正确,确认是否确实存在templates目录。其次,用户可能在自定义层时没有正确设置模板结构。或者,可能在使用某个特定的模板名称,而路径中没有对应的template-name。 解决方案方面,首先应该验证TEMPLATECONF的路径是否存在,并确保路径包含templates/template-name。然后,可能需要指导用户如何正确设置这个变量,例如使用已有的模板,或者创建自己的模板结构。另外,检查是否有拼写错误或路径错误,比如meta-altera是否应该包含templates目录。 还需要考虑用户的环境配置是否正确,比如是否在正确的目录下运行命令,或者是否在source oe-init-build-env之后才设置变量。如果用户是从文档或教程中复制的命令,可能路径与实际项目结构不符。 另外,可能需要提醒用户关于Yocto模板的使用方法,比如模板的作用是提供默认配置,用户需要确保模板路径符合Yocto的要求。如果用户没有使用模板,可能需要取消设置TEMPLATECONF变量,让Yocto使用默认配置。 最后,可能需要提供具体的命令示例,让用户能够检查和修正路径,或者重新配置环境变量。同时,提醒用户检查相关层的文档,确认正确的模板路径。</think>这个错误表明你在使用 Yocto 时,环境变量 `TEMPLATECONF` 的路径设置不符合预期格式。Yocto 要求 `TEMPLATECONF` 必须指向一个模板目录,其路径格式应为: **`<meta-layer>/conf/templates/<template-name>`** 而你的当前路径是 `/home/cywu/work/yocto/poky/meta-altera/conf`,缺少了 `templates/<template-name>` 部分。以下是详细解释和解决方法: --- ### **1. 错误原因** - **TEMPLATECONF 的作用**: `TEMPLATECONF` 是 Yocto 用于指定构建模板的路径的环境变量。模板通常包含默认配置文件(如 `local.conf` 和 `bblayers.conf`),在初始化构建目录(`oe-init-build-env`)时会被自动复制到 `build/conf/` 目录- **路径格式要求**: 路径必须指向一个具体的模板子目录,例如: ```bash TEMPLATECONF=/path/to/meta-custom-layer/conf/templates/my-template ``` 你的路径 `/meta-altera/conf` 缺少了 `templates/<template-name>` 部分,导致 Yocto 无法识别模板。 --- ### **2. 解决方法** #### **步骤 1:检查模板目录是否存在** 确认 `meta-altera` 层中是否包含模板目录: ```bash ls /home/cywu/work/yocto/poky/meta-altera/conf/templates/ ``` - 如果存在模板目录(如 `default` 或 `custom-template`),修正路径为: ```bash TEMPLATECONF=/home/cywu/work/yocto/poky/meta-altera/conf/templates/<template-name> ``` - 如果不存在 `templates` 目录,说明该层未提供模板,需改用其他方式初始化构建环境。 --- #### **步骤 2:使用标准模板(若无自定义需求)** 如果不需要自定义模板,可以不设置 `TEMPLATECONF`,直接让 Yocto 使用默认配置: ```bash unset TEMPLATECONF source oe-init-build-env ``` --- #### **步骤 3:创建自定义模板(可选)** 若需自定义模板,需在层目录中创建符合要求的模板结构: ```bash # 在 meta-altera 层中创建模板目录 mkdir -p meta-altera/conf/templates/my-template # 添加模板文件(例如默认的 local.conf 和 bblayers.conf) cp <your-config-files> meta-altera/conf/templates/my-template/ # 设置环境变量 export TEMPLATECONF=/home/cywu/work/yocto/poky/meta-altera/conf/templates/my-template ``` --- #### **步骤 4:重新初始化构建环境** 确保在初始化构建环境前已正确设置 `TEMPLATECONF`: ```bash # 清除旧的构建目录(可选) rm -rf build/ # 初始化构建环境 source oe-init-build-env ``` --- ### **3. 常见问题排查** #### **(1) 路径拼写错误** 检查路径是否包含以下内容: - 确认 `meta-altera` 层路径是否正确(是否存在拼写错误?是否在正确位置?)。 - 确认模板名称(`<template-name>`)是否与目录实际名称一致。 #### **(2) 权限问题** 确保当前用户对模板目录有读取权限: ```bash chmod -R 755 meta-altera/conf/templates/ ``` #### **(3) 环境变量残留** 如果之前设置过 `TEMPLATECONF`,可能导致残留配置冲突。清理环境变量后重试: ```bash unset TEMPLATECONF ``` --- ### **4. 示例:正确流程** 假设你的自定义模板路径为 `meta-altera/conf/templates/my-board`: ```bash # 设置环境变量 export TEMPLATECONF=/home/cywu/work/yocto/poky/meta-altera/conf/templates/my-board # 初始化构建环境 source oe-init-build-env build # 验证配置 cat build/conf/local.conf # 应包含模板中的配置 ``` --- ### **5. 附注** - **Yocto 默认模板**: Yocto 的默认模板位于 `poky/meta-poky/conf/templates/default`,可参考其结构创建自定义模板。 - **文档参考**: 查阅 Yocto 官方文档的 [TEMPLATECONF 说明](https://docs.yoctoproject.org/ref-manual/variables.html#term-TEMPLATECONF)。 通过以上步骤修正路径后,错误应被解决。如果问题仍存在,请检查模板目录的完整性和文件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值