yocto---学习0-汇总
1.参考文档
翻译文档---->https://github.com/KimChan2013/Yocto_Document_EN_CN/tree/master/dev-manual/2.7
//git -翻译中文
https://www.zhihu.com/column/c_1216023762614960128
//use
https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#dev-manual-start
//bitbike
https://www.yoctoproject.org/docs/2.7/bitbake-user-manual/bitbake-user-manual.html
//
https://www.yoctoproject.org/docs/2.7/bitbake-user-manual/bitbake-user-manual.html
//内核开发手册
https://www.yoctoproject.org/docs/2.7/kernel-dev/kernel-dev.html#using-traditional-kernel-development-to-patch-the-kernel
2.OE共享层索引
http://layers.openembedded.org/layerindex/branch/master/layers/
3.知乎在线学习
https://zhuanlan.zhihu.com/p/82217693
参考---->https://zhuanlan.zhihu.com/p/82217693
4.code
仓库代码---->http://git.yoctoproject.org
oe layer index代码---->http://layers.openembedded.org/layerindex/branch/master/layers/
第一二章
Bitbake: bitbake是任务的执行者和调度者,是OE构建系统的核心
meta-poky: poky相关的metadata
meta-poky-bsp: 针对yocto项目BSP的metadata
OE-CORE metadata: 包含了共享的配置,全局变量,类(class),包和配方(recipes)。类定义了构建逻辑的封装和继承。配方是构建软件和映像的逻辑单元(就是具体方法)。
配置文件: 这些文件包含了一些变量,用户自定义变量或者硬件信息的全局定义,这些文件让OE构建系统知道需要构建什么,构建中需要包含什么来支持一个特定的平台(针对Target硬件)。
可扩展的软件开发套件(eSDK):这是一个适用于应用开发者的自定义开发套件。这个套件可以让开发者往linux映像中添加库和一些应用。关于eSDK的详细信息可以参考这个手册,手册太大,后期会进行翻译,因为SDK对开发者来说还是非常重要的。
层(layer):相关配方的一个集合,layers能让你合并相关元数据metadata来自定义你的构建,layers也能隔离为多个不同体系结构(arm, x86, MIPS等)构建linux映像时使用的信息。之前说过,yocto可以同时为多个体系结构构建linux映像。layer之间能有层次性的去覆盖之前的说明和赋值,比如说你可以在你的layer里指定包含一些其他的层,然后把你的层加在他们后面,并做一些自定义的改动,你就可以生成你自己的构建了(比如说软件或者linux映像)。这里翻译的有点绕,大白话说就是你能以别人的layer为基础,然后作出你想要的改动,制作一个你自己的layer,如果你改动了某个变量,那它原先在其他layer的值就会被你的改动覆盖掉。比如说你以meta-A((层的命名约定俗成是以meta-开头)这一layer为基础,你的layer是meta-B,它包含了meta-A, 在meta-A中原本指定了构建的软件的上游仓库地址为htts://aaaa, 你可以在你的meta-B中改变这个上游仓库的地址,指向你想要的仓库https://bbbb。关于layer更详细的信息可以参考这个手册。关于BSP的layers,可以参考这个手册。
元数据(metadata):yocto的一个关键元素就是metadata。OE的构建系统会解析metadata文件来构建linux。大致上,metadata包括了配方(recipes), 配置文件(就是上述的配置文件),和构建指令相关的信息,以及用来控制构建内容和构建效果的数据。metadata也包括了一些命令和数据来指定软件的版本,从哪里获取软件,补丁等用来修复bug或者自定义软件的文件。OpenEmbedded-Core(poky下的meta文件夹,也是一个layer)是一个非常重要的经过验证的metadata集合。
OpenEmbedded构建系统: yocto中的bitabke和构建系统有时候用来指代OpenEmbedded构建系统。Bitbake是一个任务调度程序,同时也是个引擎用来解析配方中的指令一些配置数据。在解析完成后,bitbake会创建一个依赖树(dependency tree)来决定编译顺序,然后开始编译linux。Bitbake和make很像. 在构建过程中,构建系统会跟踪依赖关系然后执行本地或者交叉编译.在交叉构建的刚开始时,构建系统会尝试制作一个适合目标平台(目标硬件)的交叉编译工具链(也就是可扩展的SDK,E-SDK)
OpenEmbedded-Core (OE-Core): OE-Core是有基本的配方,类和相关文件组成的, 许多OE-Core的衍生项目(比如说yocto)都有这些配方,类和文件。OE-Core是原来Open Embedded社区开发项目的一个子集,现在已经被削减为一个更小更核心的的配方集合(这些配方都是被不断验证维护的),所以OE-Core里面的配方是被严格控制并且有质量保证的。在yocto的git仓库中,poky目录下的meta文件夹就是OE-Core。这里建议大家clone一下poky仓库然后看看。
packages(包):在yocto项目的语境中,包是指配方经由bitbake解析运行后产生的文件。一个包通常是一个从配方编译而来的二进制文件(bitbake解析配方之后编译)。yocto中烘焙(bake)某个东西意思就是说你在使用bitbake解析和运行某个配方(比如说 bake openssh, uboot)。值得注意的是包也有一些微妙的含义,比如说在在yocto参考手册中的“开发主机所需包”的章节中, 包就是指一些给你的开发主机中的linux发行版添加功能的一些二进制包(或者说程序)。另一个值得一提的就是过去一段时间在yocto项目中配方被认为是包,所以你能在一下配方中看到一些容易让人误解的bitbake变量,比如说PV,PR 和PE,他们是package version, package revision的缩写,但是表达的含义是之recipe version和recipe revision.
Poky: Poky是一个参考的linux发行版,poky提供了如下使用方法:
使用poky作为一个基本的Linux发行版来演示如何配置和自定义一个linux发行版
使用poky来测试你的yocto组件,这里没看懂,因为不知道具体含义,怎么测试
可以用poky来下载yocto项目
注意: poky是基于OE-Core的一个层(layer)
recipe(配方):元数据中最常见的一种,一个配方通常包含了一些设置参数,任务用于编译和产生用于构建linux映像的包。一个配方会告诉你去哪里得到源代码,打哪个补丁。配方中也能形容库文件或者其他配方的依赖关系,当然也描述了一些编译选项和设置。相关的配方会被放到同一层中(比如说meta-wuyuer层,层约定以meta-开头)。
第三章
git使用
git init: 初始化一个空的Git仓库。你只有有了Git仓库你才能使用其他的Git命令。
git clone: 创建一个上游Git仓库的本地副本。
git add: 将本地更改的文件放到暂存区,Git会创建索引用来追踪这些更改。在你提交这些更改前你必须把他们放在暂存区。
git commit: 创建一个本地提交来记录你所做的更改。只有在暂存区的文件才能被提交。提交是用来追踪历史的,也能让项目的维护者来决定是否接受你此次的提交并且把你的更改放到上游仓库中。
git status: 显示所有可能需要暂存的文件,并且让你知道跟上游仓库比起来你当前处在什么状况中。
git checkout branch-name: 在分支存在的情况下,切换到特定分支,这个命令类似于cd进入到特定文件夹
git checkout -b working-branch upstream branch: 在本地机器上创建分支并且切换到此分支。本地分支能追踪上游分支,你可以把你的更改和工作保留在本地分支而不会影响到其他分支。当你想添加一些功能时,创建一个本地分支是很好的选择,你可以在这个本地分支上进行各种测试,如果你对这个分支不满意的话你也可以删除它。
git branch: 显示所有的本地分支,你当前所在的分支会有星号标记
git branch -D branch-name: 删除本地分支,当你删除的时候的确保你当前不是在你想删除的分支上。
git pull --rebase:得到上游仓库的信息,并且存放到本地仓库中。您使用此命令来确保您与更改的仓库同步(比如说 master分支),在你根据主分支创建了本地分支后,可能有人在主分支做了更新, git pull就能把主分支中的更新拖到本地分支中来。--rebase选项能避免你的git pull产生一个没有意义的merge commit。可以参考这篇文章。
git push repo-name local-branch:upstream-branch:把你指定的本地分支中所有的本地提交(commits)发送到这个分支所追踪的上游分支。上游仓库的维护者可以从上游分支中提取你push的更新,然后合并到合适的分支中(比如主分支)。
git merge: 把本地仓库中的某个分支中的更改合并到你仓库中的另一个分支上。当你创建一个本地仓库时,默认的一个分支是主分支(master branch)。一个典型的工作流程是基于主分支创建一个临时分支来把你即将做的更改和主分支隔离开来(就是你在这个临时分支上做的更改不会影响主分支)。你将会在这个临时分支上做出更改,并将更改添加到缓存(git add)然后做出本地提交(commits), 之后切换到主分支(或者其他分支),然后使用git merge指令来把你临时分支上的更改合并到你的主分支(或者其他分支)。在合并结束后,如果你在临时分支上的开发工作已经完成的话,你可以完全的删除这个临时分时。
git cherry-pick commits: 选择某个分支上特定的提交(commits)然后合并到另一个分支上,就是把某个分支上的一个特定的更改(提交),合并到另一个分支上。有时您可能无法将一个分支中的所有更改与另一个分支合并,但你可以选择某些更改并且将他们合并到另一个分支。
gitk: 提供一个GUI试图来查看你仓库中的所有分支或者你所做出的更改。使用这个命令也可以以图形化的的方法来查看什么时候产生的分支,什么时候进行的合并。
你需要安装gitk包来使用这个命令
git log: 生成一个报告,显示了你在这个仓库中的提交历史(commit history)。这个报告列出了你当前分支中所有的提交,不管你是否已经把它们推送(push)到了上游分支。
git diff: 一行行的显示本地工作文件和git理解的同一文件的差异(默认显示上一个提交时的文件File_A和当前文件File_A的区别)。这个命令能很方便的查看你在某个文件上所做的更改。
第四章
一、3种类型的源文件构建需要改动的文件
1.本地项目 Local Projects---->local.conf文件
MACHINE: 目标开发板的架构或者板子型号
DL_DIR: 下载路径
SSTATE_DIR: 共享状态目录
TMPDIR: 构建结果的输出路径
DISTRO: 发行版策略,
PACKAGE_CLASSES: 包格式,就是使用哪些包管理工具来生成你的包或者SDK,可以是ipk, rpm,deb或者tar(tar不建议使用,不会管理依赖关系)
SDKMACHINE: 用来表示是为什么架构的目标板构建。
EXTRA_IMAGE_FEATURES: 增加一些额外的工具或者特点,
2.上游项目的发行包---->配方文件,bbappend文件
SRC_URI变量来指出源文件的位置
DL_DIR变量可以当作缓存来保存之前下载的源文件
3.使用了版本控制工具来进行管理的项目,SCMs
BitBake中的do_fetch任务使用SRC_URI变量和参数前缀来确定正确的抓取模器。
BB_GENERATE_MIRROR_TARBALLS变量
二、提供软件包---->poky/meta/classes目录下
PACKAGE_CLASSES变量来指定使用那个类(class)文件。
DEPLOY_DIR: 定义为build目录下的tmp/deploy
DEPLOY_DIR_*: 取决于使用的包管理器,这个变量可以是 DEPLOY_DIR_RPM, DEPLOY_DIR_IPK, DEPLOY_DIR_DEB, 或者 DEPLOY_DIRTAR(译者注:这几个变量一般是DEPLOY_DIR目录的子目录,比如说DEPLOY_DIR_DEB=xxx/poky/build/tmp/deb)
PACKAGEARCH: 定义了架构相关的子目录。比如说有些软件包是用于i586或者qemux86体系结构的,就会被放在特定的子目录中。(译者注:取决于你是否进行交叉编译,这个变量一般是被设置为TUNE_PKGARCH或者BUILD_ARCH)。
三、源镜像
有两种镜像存在,前镜像和常规镜像,PREMIRRORS和MIRRORS变量分别指向这两种镜像。
四、Bitbake
1.构建目录(build diretory)
TMPDIR: OpenEmbedded构建系统在构建期间执行其所有工作的基本目录。默认的基本目录是tmp目录 (译者注: 就是 poky/build/tmp目录)。
PACKAGE_ARCH: 被构建好的包的架构。取决于包的最后被存放的地址(也就是目标板架构,用于构建的主机,或者特定的目标板比如说mpc8315e-rdb)这个变量也会变化。可以查看这个变量的说明得到详细信息。
译者注:通常这个PACKAGE_ARCH是被设置为TUNE_PKGARCH(当你交叉编译的时候使用这个变量)或者BUILD_ARCH(当你做本地编译的时候使用这个变量),当你为SDK构建时就会把PACKAGEARCH这个变量设置为${SDK_ARCH}-${SDKPKGSUFFIX}的组合值
TARGET_OS: 目标板的操作系统。这个变量的常见值是linux(比如说: qemux86-poky-linux)。
PN: 用于构建软件包的配方名。这个变量可以有多个含义。但是当这个变量在下载源代码的语境中使用时,代表了配方名。
WORKDIR_DIR: OE构建系统构建软件的地方(也就是创建软件包的地方)
PV: 用于构建此软件的配方版本
PR: 用于构建此软件的修订版本
s: 指定了某个配方存放解压缩源代码的地址。
BPN: 用于构建此软件的配方名。这个变量是PN的另一个版本,移除了PN变量值中的一些前缀和后缀(比如说nativesdk-, -cross, -native和lib64-等前缀或者后缀)
PV: 用于构建此软件的配方版本
2.打补丁
do_patch任务使用配方的SRC_URI和URI和FILESPATH变量来定位可以使用的补丁文件。
3. 配置,编译和暂存
4.打包分割
PKGD: 包文件在被分割之前存放的地址。
PKGDESTWORK: do_package用来存放生成的软件包元数据的临时地址。
PKGDEST: 软件包被拆分后存放地址的父目录
PKGDATA_DIR: 这是个全局共享的目录,用于存放打包过程中产生的元数据, 打包过程中,这些元数据会从PKGDESTWORK被拷贝到这个目录中,到达这个目录后,这些元数据就会被全局共享。
STAGING_DIR_HOST: 交叉编译时sysroot的路径(也就是目录recipe-sysroot).
STAGING_DIR_NATIVE: 本地构建时的sysroot路径(也就是目录recipe-sysroot-native)
STAGING_DIR_TARGET: 这个sysroot路径用于构建能在目标机器上上运行的的程序,并且这个程序在在目标机器上生成一个适合在其他机器上运行的程序(比如说cross-canadian配方)
5.镜像生成
IMAGE_INSTALL: 列出来自软件包提供区域并且即将安装的软件包集合
PACKAGE_EXCLUDE: 这个变量指出不应该安装在镜像种的软件
IMAGE_FEATURES: 这个变量列出了包含到镜像种的一些特性,大部分这些特性大多数和安装额外的软件包有关(译者注: 这里列出了一些常见的特性)
PACKAGE_CLASSES: 这个变量指定了使用的包管理工具,从而帮助在包提供区域定位软件包的位置。
PACKAGE_LINGUAS: 指定了被安装的软件所需要的语言。系统会根据这个变量安装相关的语言文件(比如说德语)。
PACKAGE_INSTALL: 最后传递给包管理工具的安装软件列表。
使用IMAGE_ROOTFS变量指定了正在构建中的文件系统所处的位置,并使用PACKAGE_INSTALL变量提供即将安装的软件列表,根文件系统就能被创建了。(译者注: IMAGE_ROOTFS变量的值不能被修改,不要尝试手动修改这个变量的值)。
本公司成本价甩卖工控主板,欢迎大家选购:
PCIE总线转八串口卡,PCIE总线转IO卡,瑞芯微3568板卡,寒武纪CE3226摄像头板卡,龙芯CPCI板卡,龙芯3A4000工控板卡,龙芯3A5000工控板卡,海光3250工控板卡,飞腾FT-2000/4板卡
联系方式:
电话、微信:15918785568 罗生
Email:13279654@qq.com
公众号:开发之美