前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yocto | 基于Linux的定制系统跑Qt app(第一集)

yocto | 基于Linux的定制系统跑Qt app(第一集)

原创
作者头像
Qt历险记
发布2024-08-24 15:10:06
80
发布2024-08-24 15:10:06
举报
文章被收录于专栏:Linux高端玩家

点击上方"蓝字"关注我们

01、引言

>>>Yocto 项目是一个开源协作项目,能帮助开发者为不同硬件架构的嵌入式产品,制作基于Linux的定制系统。Yocto Project 提供了灵活的工具集和开发环境,使世界各地的嵌入式设备开发人员通过共享技术、软件堆栈、配置和用于创建这些定制 Linux 映像的最佳实践进行协作。 想要要查看 Yocto 项目社区和参与 Yocto 项目的公司,请参阅https://www.yoctoproject.org/主页上的“社区”和“生态系统”选项卡

02、作用

>>>Yocto项目支持Intel,ARM,MIPS,AMD,PPC等架构。大多数ODM、OSV和芯片供应商都创建并提供支持其硬件的BSP。如果想增加自定义芯片,则可以创建支持该体系结构的BSP。除了大量的架构支持外,Yocto项目还通过Quick EMUlator(QEMU)完全支持各种设备仿真。 与完整的Linux发行版不同,yocto能让你自定义你的映像,你可以决定放哪些功能或者模块到你的映像中,比如说很多设备没有显示屏幕,那么像X11, GTK+, Qt或者SDL之类的组件就能不安装。最终的映像会足够小,而且没有多余的功能。

03、下载默认版本进行仿真

>>>【1】我的系统是ubuntu20.04,执行以下命令安装依赖包。不一定全,编译出错时,缺啥补啥。

代码语言:javascript
复制
sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool

>>>【2】找个空闲的目录下载yocto。 mkdir yocto cd yocto git clone git://git.yoctoproject.org/poky  // 下载特别慢 这些仓库有很多版本,可查看https://wiki.yoctoproject.org/wiki/Releases

【推荐下载 速度快】

代码语言:javascript
复制
git clone https://github.com/yoctoproject/poky.git
代码语言:javascript
复制
// 【3】cd pokygit branch -a #查看所有分支git checkout -t origin/kirkstone -b my-kirkstone # 选择kirstone分支# 后续如果需要更新yocto的话执行:git pull
代码语言:javascript
复制
// 【4】构建yoctocd pokysource oe-init-build-env
代码语言:javascript
复制
//bitbake + 参数可选择的参数:    core-image-minimal    core-image-full-cmdline    core-image-sato    core-image-weston    meta-toolchain    meta-ide-support//【5】开始构建bitbake core-image-sato第一次编译时间取决于编译设备和网络,一般需要2小时左右,后续再次编译就会很快了。【6】注意安装过程中如果想要强制停止,尽量只按一下 Ctrl + c ,之后yocto会结束后续的任务,但会把当前编译的任务完成。如果多次按Ctrl + c将会强制停止yocto,这样容易导致下次无法编译,但一般只需去build目录下删除*.sock和*.lcok文件即可,如下:​$ ls build/bitbake-cookerdaemon.log  bitbake.lock  bitbake.sock  cache  conf  downloads  hashserve.sock  sstate-cache  tmp运行编译完成后如下所示:​runqemu qemux86-64 // 运行仿真界面【【】

【有什么问题问AI   fittencode】

04、ubuntu20.04的安装

>>>【快传】我给你发了 ub...64.iso, 快来看看 https://www.alipan.com/t/Wy0F9VIURQHIhmLs5JCy 点击链接即可保存。「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

安装教程自己查了

05、解压yocto文件

>>>

下载 【快传】我给你发了 po...ar.gz, 快来看看 https://www.alipan.com/t/Tm1C6DiFGOgHPoysD1PM 点击链接即可保存。「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

06、介绍yocto的文件框架

>>>【Poky】 Poky有两个含义。第一个含义是用来构建Linux的构建系统(OpenEmbedded),值得注意的该Poky仅仅是一个概念,而非一个实体:它包含了 BitBake工具、编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外Poky还有另外一层意思,使用Poky系统得到的默认参考 Linux 发行版也叫Poky(当然,我们可以对此发行版随意命名)。

【Metadata】 Metadata:元数据集,所谓元数据集就是发行版内各基本元素的描述与来源。OE构建系统会解析metadata文件来构建linux。大致上,metadata包括了配方(recipes)、共享的class类、配置文件和构建指令相关的信息,以及用来控制构建内容和构建效果的数据。metadata也包括了一些命令和数据来指定软件的版本,从哪里获取软件,补丁等用来修复bug或者自定义软件的文件。 Recipes:.bb/.bbappend文件,配方文件,描述了从哪获取软件源码,如何配置,如何编译。bbappend和bb的区别主要在于bbappend是基于bb的,功能是对相应的bb文件作补充和覆盖,有点类似于“重写”的概念。 Class:.bbclass文件,包含在配方文件之间共享的有用信息。比如autotools该类,其中包含Autotools使用的任何应用程序的常用设置。这个概念有点像C++中的基类。 Configuration:.conf文件,即配置文件,我们可以用它来改变构建方式,比如conf/local.conf可以配置机器配置选项、分发配置选项、编译器调整选项、常规通用配置选项、用户配置选项以及自定义变量等。conf/bblayers.conf中可以添加用到的layer层路径,从而在编译时将他们添加进去。 Layers:这个layers层是包含相关指令和配置集合的仓库(或者说是目录),这些指令和配置用于告诉Yocto该做什么。将相关metadata元数据分开到特定功能的layers层中有助于模块开发,降低耦合度,以便以后可以重复使用meta layer,这个有点像软件分层(功能层/板级层)的意思。 Bitbake:是OpenEmbedded构建系统的核心工具,负责解析元数据(Metadata)。在解析完成后,bitbake会创建一个依赖树(dependency tree)来决定任务执行顺序,然后去执行这些任务。

07、yocto目录说明

>>>顶层目录

bitbake bitbake工具目录。bitbake是metedate元数据解释器和执行器,读取metedate并执行定义的task,执行失败通常来自metedate元数据,而不是来自bitbake本身。执行bitbake命令(包含bitbake-*)时,其实执行的就是bitbake/bin/下面的文件。执行环境设置脚本(即 . oe-init-build-env)时,会将scripts和 bitbake/bin目录(按该顺序)放入 shell 的PATH环境变量中。 build 用户配置文件和工程构建输出目录。build目录在建立环境变量时进行创建并进行配置文件初始化(即执行 . oe-init-build-env时),构建的所有文件都在该目录下组织存放。 documentation 该目录包含 Yocto 项目说明文档以及允许您生成 PDF 和 HTML 版本手册的模板和工具,每个手册都包含在一个子文件夹中。 meta 此目录包含 OpenEmbedded-Core 元数据。该目录包含模拟目标(qemux86、 qemuarm等)的配方、通用类和机器(machine)通用配置等。 meta-poky poky发行版本的配置数据,包含了bitbake工具、编译工具链、BSP、诸多程序包或层,是yocto的核心目录,上面描述的bitbake目录其实就是软链接到poky目录下的bitbake目录。 meta-openembedded openembedded推出的配方大全 meta-yocto-bsp yocto工程包含的一些参考的BSP配置,通常厂商自己会增加自己的bsp目录。 meta-selftest 此目录添加了 OpenEmbedded 自测试使用的其他recipes和appen文件,以验证构建系统的行为。如果你想要运行自测,则将该层加入到你的bblayers.conf文件中。 meta-skeleton 该目录包含用于 BSP 和内核开发的模板配方,里面有一些简单的示例,比如如何添加软件、添加内核模块、给内核源码打补丁等。 scripts 该目录包含在 Yocto 项目环境中实现额外功能的各种集成脚本(例如 QEMU 脚本)。在执行 . oe-init-build-env 后该路径会被添加到环境变量中。 oe-init-build-env 设置 OpenEmbedded 构建环境的脚本文件,每次新打开终端后都需要执行该脚本,它会将yocto一些核心目录加入到环境变量PATH中。

08、构建目录build/

>>>├── build │ ├── bitbake.lock(构建锁,当前只允许一个终端构建,如果意外停止构建,需要删除该文件才能运行下次构建) │ ├── buildhistory (构建的历史信息,当启用构建历史功能时,OpenEmbedded 构建系统会创建此目录) │ ├── cache (编译缓存) │ ├── conf (配置文件目录,该目录下配置文件在执行export TEMPLATECONF=meta-XXX/meta-YYY/conf(需要编译的目标层)和. oe-init-build-env命令后解析生成,整个构建都是依据此目录下配置来完成的) │ │ ├── bblayers.conf (该文件用来定义BBLAYERS,BBLAYERS是决定哪些路径下的模块需要构建,哪些不需要构建,并将这些信息提供给bitbake) │ │ ├── local.conf (用户的配置文件,包含所有定制化的配置,该文件配置的所有变量都会覆盖其他文件相应变量的软赋值 ) │ │ ├── sanity_info (此文件指示健全性检查的状态并在构建期间创建,不用关注) │ │ ├── site.conf(可以使用conf/site.conf配置文件配置多个构建目录,不用关注) │ │ └── templateconf.cfg(用来保存当前TEMPLATECONF变量的值) │ ├── downloads (默认情况下,构建过程中下载的所有源码包将放置于此目录,若需要更改保存目录,需修改DL_DIR变量) │ ├── sstate-cache (保存状态,如果没有改变下次不再重新编译包,第一次编译时间长就是需要完整生成该目录,后续编译将快很多) │ └── tmp (构建时所有的输出都存放在该目录下,由TMPDIR变量指定) │ │ ├── deploy (编译输出, 部署文件目录,最终需要的文件(sdk boot rootfs image等)都在该目录中,由DEPLOY_DIR变量指定) │ │ ├── buildstats (编译时状态记录,如果中断可以续编,构建统计信息,每次构建,都会在该目录下生成一个日期目录) │ │ ├── cache (BitBake解析metedata(包括recipes和config文件)后,将解析的结果缓存在该目录,以提高后续效率,编译过程中的缓存) │ │ ├── log (日志信息,进程编译过程中的log信息) │ │ ├── work (包含和CPU架构相关的工作目录,所有代码都在这里,编译工作也将在此目录下进行) │ │ └── work-shared (为了提高效率,OpenEmbedded 构建系统创建并使用此目录来保存与其他配方共享工作目录的配方。实际上,这仅用于gcc 及其变体(例如gcc-cross、 libgcc、gcc-runtime等)。)

09、meta目录/

>>>├── meta │ ├── classes(包含所有的 *.bbclass。class文件是抽象的公共代码,给各个package使用) │ ├── conf( 配置文件(.conf)的核心集合,比如所有的bblayers的配置文件都是从该目录下的bitbake.conf文件中衍生的。) │ │ ├── machine(machine的配置文件 ,如果设置MACHINE = "qemux86",OpenEmbedded 构建系统会qemux86.conf在此目录中查找文件) │ │ ├── distro (发行信息的配置文件) │ │ └── machine-sdk(制定sdk是32位还是64位) │ ├── files(该目录包含常见的许可文件和构建系统使用的几个文本文件,文本文件包含最少的设备信息以及具有已知权限的文件和目录列表) │ ├── lib(此目录包含在构建过程中使用的 OpenEmbedded Python 库代码) │ ├── recipes-bsp(此目录包含在构建过程中使用的 OpenEmbedded Python 库代码) │ ├── recipes-connectivity (此目录包含与与其他设备通信相关的库和应用程序) │ ├── recipes-core(此目录包含构建基本工作 Linux image所需的内容,包括常用的依赖项) │ ├── recipes-devtools(主机构建时需要的tools,这些工具在目标板上同样能够使用) │ ├── recipes-gnome(该目录包含与 GTK+ 应用程序框架相关的所有内容) │ ├── recipes-graphics(绘图相关的库) │ ├── recipes-kernel (此目录包含内核和具有强内核依赖性的通用应用程序和库) │ ├── recipes-lsb4(支持Linux Standard Base (LSB) version 4.x所需要的) │ ├── recipes-multimedia(此目录包含用于音频、图像和视频的编解码器和支持实用程序) │ └── recipes.txt (配方说明文件)

10、总结

>>>yocto项目的简要工作流程 Yocto项目的核心组件OpenEmbedded构建系统采用工作流方式来完成映像(Image)和SDK的生成,以下简要概述整个工作流程:

>>>开发人员指定架构、策略、补丁和配置细节。 构建系统根据配置从指定位置获取并下载源代码。构建系统支持标准方法,例如 tarball 或源代码存储库系统,例如 Git。 下载源代码后,构建系统会将源代码提取到本地工作区,在该工作区中应用补丁并运行配置和编译软件的通用步骤。 然后,构建系统将软件安装到临时暂存区中,您选择的二进制包格式(DEB、RPM 或 IPK)用于在该暂存区中汇总软件。 不同的 QA 和健全性检查贯穿整个构建过程。 创建二进制文件后,构建系统会生成一个二进制包提要,用于创建最终的根文件映像。 构建系统同时生成文件系统镜像和定制的可扩展 SDK (eSDK) 用于应用程序开发。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 点击上方"蓝字"关注我们
  • 01、引言
  • 02、作用
  • 03、下载默认版本进行仿真
  • 【有什么问题问AI   fittencode】
  • 04、ubuntu20.04的安装
  • 05、解压yocto文件
  • 06、介绍yocto的文件框架
  • 07、yocto目录说明
  • 08、构建目录build/
  • 09、meta目录/
  • 10、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档