[yocto]poky环境搭建和基本概念
poky本地搭建
环境搭建
source oe-init-build-env <builddir>
- 后面的参数可以忽略。该脚本主要用来设置构建环境的目录结构和初始化核心集合的配置文件
- 脚本新增了conf目录,并在conf里面新增了
bblayers.conf
和local.conf
local.conf
: 设置变量以影响bitbake
构建自定义的Linux操作系统
local.conf:
# Machine Selection 目标机器
MACHINE ??= "qemux86-64"
#
# Where to place downloads
## DL_DIR告诉bitbake把源下载到哪里 ${TOPDIR} TOPDIR变量包含到环境变量的完整路径
DL_DIR ?= "${TOPDIR}/downloads"
#
# Where to place shared-state files
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
## 包含到共享状态缓存的路径
#
# Where to place the build output
# The default is a tmp directory under TOPDIR.
#
TMPDIR = "${TOPDIR}/tmp"
启动构建
构建针对移动设备的带有用户界面的根文件系统镜像
bitbake core-image-sato
可以先下载所有源,而不编译
bitbake -c fetchall core-image-sato
- 在下载完成后,可以断开互联网连接,离线构建
Yocto项目术语
append file(追加文件)
: 对现有菜谱进行扩展,追加的变量会覆盖之前的变量bitbake
: 构建引擎,是任务执行器和调度器;输入是元数据(conf
、recipe
)class
: 是提供逻辑封装和基本继承机制,多个菜谱可继承一个class
cross-development toolchain
: 交叉开发工具链layer
: 是组织文件哥目录结构的元数据(conf
、recipe
)集合metadata
: 元数据包包括所有命令bitbake如何执行构建过程的文件recipe
: 类似于makefile文件,告诉bitbake如何获取数据,如何编译
打包
打包
是将软件、二进制文件和辅助文件打包到一起,用于在目标操作系统直接安装- 常见的linux发行包管理系统,
RPM
(RPM,最初是红帽包管理器)和dpkg
(Debian的包管理程序) - 嵌入式系统,itsy包管理(ipkg)。Opkg(从ipkg派生出来的),以c语言编写
- 常见的linux发行包管理系统,
安装
和打包
不一定是连续的步骤,他们都是可选的
元数据
参考,https://gitee.com/lengjingzju/cbuild
配置文件
TOPDIR
目录 : 输出顶层目录- poky/meta/conf/
bitbake.conf
: 默认配置,大多数变量词汇在此定义 - ${TOPDIR}/conf/
local.conf
: 本地配置,可以覆盖默认配置和定义自定义的环境变量 - ${TOPDIR}/conf/
bblayers.conf
: 配置使用的层 提供BitBake关于什么层要包含在构建过程中以及在哪里找到文件路径的信息 - meta-xxx/conf/
layer.conf
: 层配置,可以看到层下的配方文件如何找到- 每个层有自己的名字为layer.conf的配置文件
- 这个文件包含了针对这个层的菜谱文件的路径设置和文件模式
- 文件
layer.conf
可以在层的conf子目录中找到
- meta-xxx/conf/
machine/xxx.conf
配置 : 机器配置,有机器配置的层是BSP层, ${TOPDIR}/conf/local.conf
里面的MACHINE
设置的值的机器配置文件 值.conf
必须存在
配方文件
编写配方文件 (xxx.bb)
- cmd
- recipetool create -o <xxx.bb> <package_src_dir> 创建一个基本配方,例子中手动增加的条目说明如下
- 包依赖
- 包依赖其他包时需要使用 DEPENDS += “package1 package2” 说明
- 链接其它包时 (LDFLAGS += -lname1 -lname2) 需要增加 RDEPENDS:${PN} += “package1 package2” 说明
- 编译继承类
- 使用 menuconfig 需要继承 inherit kconfig
- 如果是 make -f wrapper.mk menuconfig,需要设置 KCONFIG_CONFIG_COMMAND = “-f wrapper.mk menuconfig”
- 如果 .config 输出目录是编译输出目录,需要设置 KCONFIG_CONFIG_PATH = “${OUT_PATH}/.config”
- 使用 Makefile 编译应用继承 inherit sanity,使用 cmake 编译应用继承 inherit cmake
- 编译外部内核模块继承 inherit module
- 编译主机本地工具继承 inherit native
- 安装和打包
- includedir 指 xxx/usr/include
- base_libdir 指 xxx/lib; libdir指 xxx/usr/lib; bindir指 xxx/usr/bin; datadir 指 xxx/usr/share
- 有时候需要精确指定打包的文件而不是目录,防止多个打包的目录有重合导致打包出错
- 更多目录信息参考poky工程的 meta/conf/bitbake.conf 文件
FILES:${PN}-dev = "${includedir}"
FILES:${PN} = "${base_libdir} ${libdir} ${bindir} ${datadir}"
- 继承 inherit sanity 或 inherit cmake 时需要按实际情况指定打包的目录,否则 do_package 任务出错
- 继承 inherit module 不需要指定头文件和模块文件的打包的目录,但如果安装其它文件时,需要指定这个文件的打包目录
- 忽略某些警告和错误
- ALLOW_EMPTY:${PN} = “1” 忽略包安装的文件只有头文件或为空,生成镜像时 do_rootfs 错误
- INSANE_SKIP:${PN} += “dev-so” 忽略安装的文件是符号链接的错误
编写配方附加文件 (xxx.bbappend)
- 配方附加文件作用和配方文件作用相同,但是会覆盖对应配方文件中的相同变量
- EXTERNALSRC: 源码目录,编译会对这个目录做校验决定是否重新编译
- 如果源码不全在 EXTERNALSRC 目录内,我们需要追加文件或目录做校验,追加任务的 file-checksums 标记,否则源码修改后没有重新编译
- 用户可以继承类 extrasrc.bbclass 来做追加,可设置的变量
- EXTRASRC_CONFIGURE: 追加做 do_configure 任务校验的文件或目录
- EXTRASRC_COMPILE: 追加做 do_compile 任务校验的文件或目录
- EXTRASRC_INSTALL: 追加做 do_install 任务校验的文件或目录
- EXTERNALSRC_BUILD: 运行 make 命令的目录,可以和 EXTERNALSRC 不同
tmp目录(编译输出)
buildstats
存储根据构建目标和目标被构建时的日期/时间戳组织的构建统计cache
bitbake
解析元数据所生成的缓存- 只要元数据没有被改变,
bitbake
下次编译就直接从这个文件夹中获取数据信息
- 只要元数据没有被改变,
deploy
针对部署的构建输出,例如目标文件系统镜像、包仓库和许可信息,被包含在deploy子目录中log
由cooker
进程创建的BitBake
日志信息sstate-control
包含用于根据架构/目标和任务组织的共享状态缓存的程序清单文件stamps
BitBake
把针对每个任务、根据架构/目标组织的完成标签和签名数据以及包名放在这个子目录中sysroots
这个子目录包含根据架构/目标组织的根文件系统- 包括针对构建主机的,包含交叉工具链、QEMU和在构建过程中用到的很多工具的根文件系统
work
在这个目录中,BitBake创建根据架构/目标组织的、它在这里构建实际软件包的子目录work-shared
这个子目录和work类似,但是针对共享的软件包
注意
- 构建环境,尤其是tmp目录不可以简单得被迁移,但是
bitbake
本质上可以从共享状态缓存重新创建tmp目录
的所有内容 - 共享状态缓存存储自其输入元数据(例如任务代码、变量等)创建的
签名
所识别的任务的中间输出- 只要输入不变,那么签名就不变,使得
BitBake
使用来自共享状态缓存的输出而不是运行任务
- 只要输入不变,那么签名就不变,使得
[yocto]poky环境搭建和基本概念相关推荐
- Spring的使用——基础环境搭建以及IOC概念理解(持续更新)
spring基础环境搭建 1.添加Spring依赖 2.编写一个Spring的配置文件 3.通过Spring的应用程序应用上下文获取对象 优点:在修改方案时可以不用修改代码,只需修改配置文件的bean ...
- 系统移植(系统移植环境搭建及简单概念)
linux系统 = linux内核 + 根文件系统; 根文件系统 = 库(/lib和/usr/lib) + 命令( /bin和/usr/bin) + 配置文件( /etc) + GUI(图形化界面,如 ...
- yocto中文环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 我所使用的yocto版本是1.5.1,系统默认的locale是en_US,并不包含中文环境.但是在实际编译的过程中不仅仅是中文 ...
- iPad开发环境搭建和基本概念
安装黑苹果 下载东皇的iAntares 10.6.3 v2.2,最简单的安装方法是刻盘安装,如果不想刻盘,可以采用硬盘安装,工具:Leopardhdhelper 0.3.用写入U盘的安装方式安装失败. ...
- rockchip的yocto编译环境的搭建
作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述 嵌入式的朋友们,应该知道Linux驱动开发过程中,需要进行搭建交叉编译工具链环境.移植u-boot ...
- iMX6 yocto平台QT交叉编译环境搭建
1.安装ubuntu上必备的库文件: 如果无法安装请依次执行以下两个命令: apt-get upgrade apt-get update 再安装以上的库文件. 2.搭建JDK开发环境 下载jdk1.6 ...
- 【Java从0到架构师】基本概念 + 环境搭建
基本概念 + 环境搭建 基本概念 网页基础知识.基本HTML标签 Apache Tomcat 环境搭建 启动和关闭 Tomcat Tomcat 乱码问题 Idea 关联 Tomcat 源码 Idea ...
- 从零搭建ES搜索服务(一)基本概念及环境搭建
一.前言 本系列文章最终目标是为了快速搭建一个简易可用的搜索服务.方案并不一定是最优,但实现难度较低. 二.背景 近期公司在重构老系统,需求是要求知识库支持全文检索. 我们知道普通的数据库 like ...
- imx6开发环境搭建之yocto全记录(L4.1.15_2.0.0)
最近才开始玩imx6,本来是不打算搞yocto的,毕竟有官方渠道可以下载uboot和kernel(下面会说到),为什么要干这种吃力不讨好的事情?然而当我玩到了qt5移植的时候,却发现网上各种imx6移 ...
最新文章
- 函数05 - 零基础入门学习C语言36
- LoadRunner Winsock 10053错误的真正原因
- 为什么顶尖高手,都是长期主义者?
- 中国17种稀土有啥军事用途?没它们,美军技术优势将归零
- 协作与大数据构建新型打假模式
- 算法学习之百钱买百鸡
- java range(10)_Java Year range()用法及代码示例
- lua IDE all
- ansible软件部署
- 等额本息excel模板下载_格格技能——巧用EXCEL函数,算清各种收益利率
- python串口模块_Python使用pip安装pySerial串口通讯模块
- 按下什么使物体复位_什么是继电器?继电器如何接线?
- vue axios 接口封装
- acm入门搜索-石油数目
- 关于Oracle RAC基本概念
- 群辉安装linux软件下载,群晖系统Synology DSM安装ipkg包管理和套件安装方法
- word中插入高分辨率图片,并且保存为PDF图片仍然高清的方法
- ZoomIt 屏幕放大 缩小 屏幕画笔 演示 手写笔迹 倒计时 秒变白板 pointofix
- Couldnot load Project The file couldn‘t be opened
- Android 9 功能和 API