热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yocto开发讲解系列总目录

Yocto开发讲解系列总纲Yocto开发专栏前言Yocto开发专栏总目录快速上手Yocto理论篇MetadataLayerBitBake工具Toolchain或交叉编译器Linux

Yocto开发讲解系列总纲

  • Yocto开发专栏前言
  • Yocto开发专栏总目录
    • 快速上手
    • Yocto理论篇
    • Metadata Layer
    • BitBake工具
    • Toolchain或交叉编译器
    • Linux内核和驱动模块
    • 文件系统相关
    • devtool开发工具
    • Toaster使用
    • ARM相关的BSP
    • bb文件编写知识
    • conf配置
    • 实际平台举例
    • 技巧篇汇总
    • 实战篇汇总
    • Yocto编译问题汇总


Yocto开发专栏前言

欢迎读者盆友光临fulinux的《Yocto开发讲解系列》专栏!

本小编有10年软件开发经历和丰富的Yocto开发经验,我最早接触Yocto是在做Freescaleimx6平台的时候,那个时候也是瞎折腾,压根就搞不清楚Yocto里的软件代码怎么改,怎么添加自己的软件项目,没有深入去研究。也仅仅是“挪用”yocto编译出来的一些库和程序、文件系统或者Toolchain SDK来满足自己的项目需求,甚至那个时候觉得还是自己的项目构建系统比较简单好用。虽然有心想研究Yocto,但是太大、太难、太复杂了,想入门都找不到门在哪,也仅仅是浅尝辄止~。但是,四年前由于实际开发要求,我又一次开始接触Yocto,感受到了他的强大和价值,决心好好系统的研究它。这期间付出了大量的时间和精力,真是让人头秃过程呐!不过现在来看Yocto真的的是太棒了,也不是那么难,对于我们做软件开发的盆友们而言简直就是福音,省去了我们交叉编译每个软件项目的时间,又容易将我们的成果固化下来,使我们的项目更加的规范和标准化(国外有很多Yocto开发人员哦)。对于开发者而言,仅仅两条终端命令即可编译出我们需要的所有镜像文件。从此,不必再纠结交叉编译的问题,公司也不必担心某个程序员离职导致项目开发无法继承的问题,即使一个N年之后没有接触的项目,仍然可以快速上手、编译和刷机运行。

我写本系列的文章也是在实际需求的驱动下,在边开发的过程中边记录和讲解,尽可能使自己处于一张白纸的基础出发和大家一起从Yocto入门到深入研究,每一篇博文尽可能带着问题出发,落实到具体的实例,结合理论和注释讲解,并将自己折腾的过程记录下来。

我想很多朋友都在思考本专栏是否能解决我的问题,是否适配我的硬件平台,我的回答是肯定的。而且为了不局限于某个特定的硬件平台和环境,本专栏从Yocto自带的官方x86-64 qemu虚拟机平台上开发和示例演示,qemu虚拟机的好处是不需要借助除了电脑之外的其他硬件环境,只要一台电脑就可以开始我们的Yocto学习和开发。

本专栏我会涉及到的一些技术和知识点,包括C/C++语言、shell、python、Qt5/QML和网络等知识,技能包括vim、git、makefile、cmake、autotools、Android、gcc/gdb和toolchain SDK等方面的技能。当然,我会在文中也会尽可能照顾到小白盆友,尽可能讲解我这么做的理由和对代码的注释。当然对于小白盆友能掌握掌握一门C语言和Linux基础操作也可以开始我们的yocto之旅。

技术和知识点都是在漫长的过程中积累起来的,重要的我觉得是一些精神品质方面的东西:较真、能折腾和不屈不挠的品质,归纳演绎、对比和逆向的思维方式。我在写本文的过程中遇到很多的坎和高山,我私下都是花了很久的时间折腾,有时候近乎绝望都要放弃了,但是还是坚持了下来了,就是希望给读者盆友呈现的是一个完整优美的演绎过程,而不是将就得过且过。有很多时候我们不怕问题本身,就是怕不知道问题是什么,无法描述,导致无法求助于网络或者他人。我希望大家在使用Yocto的过程中遇到问题时,需要善于找示例,有时候千言万语都不及一个好例子,并从中发现要点。解决问题的方向可以是多方面的,这个反向攻不破可以尝试从其他方向入手,进而对比找出问题出在哪里。读者盆友在阅读本专栏的博文的过程中遇到任何的问题和疑惑,都可以在讨论区提出来,我都会尽可能的回复和帮助解决,而不是当个高冷的博主。

我后续还会对本专栏进行系统的归类、校对和查错,尽可能丰富博文,让每一篇文档都做到理论和实践相结合,做到有的放矢、深入浅出。从问题和实际需求出发,分析问题,解决问题、并做相应的归纳和总结。

Yocto开发专栏总目录

本篇博文主要是为了方便新老读者朋友了解和查阅本专栏,将该系列进行科学分类和提取关键词,尽可能为每篇博文写个概述和要解决什么问题。

快速上手

下面几篇是用来带着大家快速上手的,熟悉下yocto。教大家如何搭建环境、安装必备的软件包,下载Yocto源码,download目录修改、开始编译,并演示运行qemu虚拟机,以及不带显示器如何登陆qemu虚拟机:

Yocto系列讲解[入门篇] 1 - 开始qemux86-64虚拟机的构建
Yocto系列讲解[入门篇] 2 - qemux86-64虚拟机运行演示

  • 关键词:yocto qemu bitbake 入门

Yocto理论篇

让大家对Yocto有个简单的认识,介绍一些概念、目录、工具和变量等:

yocto系列讲解[理论篇]68 -Yocto版本信息查询稳定版本和EOL版本
yocto系列讲解[理论篇]6 - 什么是yocto理论篇
yocto系列讲解[理论篇]21 -yocto项目的概念(1)
yocto系列讲解[理论篇]22 -yocto项目的概念(2)
yocto系列讲解[理论篇]69 - Yocto-3.4新版本honister语法修改方法
Yocto系列讲解[理论篇]76 - 某些小技巧简单札记

  • 关键词:bitbake recipe class 用户配置 Distro BSP Software Layer 版本 honister

Metadata Layer

介绍meta layer的一些知识和示例:

yocto系列讲解[理论篇]56 - poky下目录结构
yocto系列讲解[理论篇]57 - 如何快速搜索和查找
yocto系列讲解[理论篇]3 - 添加已有硬件层实例
yocto系列讲解[理论篇]4 - 创建自己的meta layer
yocto系列讲解[理论篇]5 - 在meta-mylayer中添加helloworld recipe

  • 关键词:poky bitbake meta layer model create mylayer

BitBake工具

介绍bitbake、构建全过程、使用到的变量和任务,实战演示等:

yocto系列讲解[理论篇]23 - BitBake全过程(1)
yocto系列讲解[理论篇]24 - BitBake全过程(2)
yocto系列讲解[理论篇]25 - BitBake全过程(3)
yocto系列讲解[理论篇]26 - BitBake全过程(4)
yocto系列讲解[理论篇]27 - BitBake全过程(5)

  • 关键词:
    source、SRC_URI、DL_DIR、SRCREV、image和SDK、PACKAGE_、DEPLOY_、do_fetch、do_unpack、PN/PV/PR/S/WORKDIR、do_patch、FILESPATH、do_prepare_recipe_sysroot、do_configure、EXTRA_OECONF、EXTRA_OECMAKE、EXTRA_OEMAKE、CFLAGS/CXXFLAGS、do_compile、do_install、do_package、do_packagedata、PKGD、PKGD*、STAGE_DIR_HOST、STAGING_DIR_NATIVE、STAGING_DIR_TARGET、FILES等变量

Toolchain或交叉编译器

介绍如何生成Toolchain SDK,安装,和实战演示:

yocto系列讲解[实战篇]28 - 应用开发的SDK或toolchain或gcc
yocto系列讲解[实战篇]66 - 设备的文件系统中安装gcc

  • 关键词:toolchain SDK gcc arm-linux-gcc 交叉编译器

Linux内核和驱动模块

介绍Yocto中的Linux kernle和driver module驱动模块:

yocto系列讲解[实战篇]29 - 源码树外添加Linux驱动模块(hello驱动实例)
yocto系列讲解[实战篇]31 - Linux kernel相关的任务
yocto系列讲解[实战篇]32 - qemu Linux kernle默认的配置
yocto系列讲解[实战篇]33 - 如何修改linux内核源码和添加补丁文件
yocto系列讲解[实战篇]74 - 用Kbuild构建外部Linux驱动模块组

  • 关键词:Linux kernel driver hello module bb mylayer recipe modprobe rmmod defconf menuconfig device tree dts dtb devtool layer

文件系统相关

介绍文件系统相关的内容:

yocto系列讲解[实战篇]30 - 创建只读根文件系统
yocto系列讲解[实战篇]35 - 添加一个新的10M大小的镜像文件
yocto系列讲解[实战篇]58 - 程序开机自启动
yocto系列讲解[实战篇]67 - 在etc/passwd和etc/group文件中添加用户和组等信息

  • 关键词:rootfs only-read 只读 分区大小 image

devtool开发工具

介绍devtool工具,举了一个helloyocto和git项目的的例子,来演示如何添加和修改软件项目,以及如何集成。
yocto系列讲解[实战篇]7 - 开发工具devtool实操(helloyocto)
yocto系列讲解[实战篇]8 - 开发工具devtool实操(添加git项目learnyocto)
yocto系列讲解[实战篇]9 - 将软件包打包到qemux86-64机器的文件系统中和devtool finish命令
yocto系列讲解[实战篇]10 - 在线部署软件到机器上
yocto系列讲解[实战篇]11 - 删除在线部署到机器上的软件
yocto系列讲解[实战篇]12 - 如何修改开源项目的代码呢?
yocto系列讲解[实战篇]13 - 修改workspace目录路径(create-workspace)
yocto系列讲解[实战篇]14 - devtool edit-recipe命令(编辑bb文件命令)
yocto系列讲解[实战篇]15 - devtool update-recipe命令
yocto系列讲解[实战篇]16 - devtool upgrade命令
yocto系列讲解[实战篇]17 - devtool latest-version命令

  • 关键词:devtool add modify helloyocto learnyocto workspace qemu finish bb edit-recipe update-recipe upgrade version vim 开源项目 删除 打包

Toaster使用

介绍Toaster,讲解Yocto如何借助Toaster网页在线直观使用。

yocto系列讲解[技巧篇]18 - Toaster使用技巧(1)
yocto系列讲解[技巧篇]19 - Toaster使用技巧(2)
yocto系列讲解[技巧篇]20 - Toaster使用技巧(3)

  • 关键词:toaster 网页 在线 调试

ARM相关的BSP

结合一个ARM的beaglebone虚拟机,讲述相关的kernel u-boot等BSP知识和配置

yocto系列讲解[入门篇]36 - 编译arm虚拟机qemuarm
yocto系列讲解[入门篇]37 - 编译可以在beaglebone开发板上运行的镜像
yocto系列讲解[入门篇]38 - beaglebone-yocto.conf配置分析之PREFERRED_PROVIDER变量
yocto系列讲解[入门篇]39 - beaglebone-yocto.conf配置分析之MACHINE_EXTRA_RRECOMMENDS变量
yocto系列讲解[入门篇]40 - beaglebone-yocto.conf配置分析之u-boot
yocto系列讲解[入门篇]41 - beaglebone-yocto.conf配置分析之kernel

  • 关键词:arm machine qemu local.conf build 编译 work beaglebone PREFERRED PROVIDER virtual/kernel meta-yocto-bsp 目录 device tree dtb MACHINE_EXTRA_RRECOMMENDS u-boot UBOOT* SERIAL_CONSOLES ?= ??= := DEFAULTTUNE tune KERNEL_IMAGETYPE KERNEL_DEVICETREE KERNEL_EXTRA_ARGS MACHINE_FEATURES IMAGE_BOOT_FILES

bb文件编写知识

介绍bb、bbappend、bbclass、inc文件相关知识和实践

yocto系列讲解[实战篇]42 - bb文件中的几个关键词require DEPENDS inherit
yocto系列讲解[实战篇]34 - 旧版的yocto或者devtool使用不了时如何修改开源项目源码
yocto系列讲解[实战篇]43 - bb文件中函数实操演示(1)
yocto系列讲解[实战篇]44 - bb文件中函数实操演示(2)
yocto系列讲解[实战篇]45 - bb文件中函数实操演示(3)继承自己的class
yocto系列讲解[实战篇]46 - 如何添加自己的函数作为recipe的任务
yocto系列讲解[实战篇]47 - bb文件中如何获取源码或指定本地目录
yocto系列讲解[变量篇]63 - SRC_URI和SRC_DIR的区别
yocto系列讲解[技巧篇]64 - bb文件中字符串拆分和拼接简单示例

  • 关键词:bb append bbclass inc inherit require DEPENDS vim 修改 shell python 函数 function do_* 继承 class 类函数 recipe 任务 addtask deltask nostamp noexec EXTRNALSRC git download wget fetch FILESEXTRAPATHS SRC_URI SRC_DIR 字符串处理 split

conf配置

介绍meta*/conf/machine目录中的一些配置内容讲解

yocto系列讲解[理论篇]48 - meta目录中conf里的配置项小札

  • 关键词:DISTRO VARIANT PACKAGE_DEBUG_SPLIT_STYLE SERIAL_CONSOLE ARM_INSTRUCTION_SET FULL_OPTIMIZATION ENABLE_BINARY_LOCALE_GENERATION USE_LDCONFIG PREFERRED_VERSION USE_DEVFS DEPLOY_DIR_IMAGE PACKAGE_ARCH ARCH

实际平台举例

结合自己的高通平台msm8909来讲述如何完成boot、system和aboot等镜像从无到有的制作

yocto系列讲解[实战篇]51 - 实战举例之制作boot.img
yocto系列讲解[实战篇]52 - 实战举例之制作system/rootfs文件系统
yocto系列讲解[实战篇]53 - 实战举例之制作bootloader
yocto系列讲解[实战篇]65 - system根文件系统大小问题

  • 关键词:kernel qcom qualcomm apq8009 msm8909 msm boot.img mkbootimg libmincrypty native defconfig dts zImage-dtb zImage ext4 system rootfs 文件系统 virtual/kernel virtual/bootloader multiple definition Error code 302e bb.utils.contains python python3 HOSTTOOLS aboot lk

技巧篇汇总

yocto系列讲解[技巧篇]72 - BBCLASSEXTEND变量的作用
yocto系列讲解[技巧篇]75 - 创建自己的manifest并使用repo工具
Yocto系列讲解[技巧篇]77 - 用Package Groups的方式控制安装软件包组
yocto系列讲解[技巧篇]78 - 如何消除meta layer之间的依赖关系问题
Yocto系列讲解[技巧篇]81 - 如何打patch修复打补丁出错的recipe
Yocto系列讲解[技巧篇]82 - 静态库编译问题

实战篇汇总

Yocto系列讲解[实战篇]49 - 编译问题汇总及解决方案
Yocto系列讲解[实战篇]54 - 添加Qt5和生成带Qt5的SDK
Yocto系列讲解[实战篇]55 - 编译Qt程序和添加Qt的recipe(bb文件)
Yocto系列讲解[实战篇]58 - 程序开机自启动(sysvinit/init)
Yocto系列讲解[实战篇]59 - 程序开机自启动(systemd)
Yocto系列讲解[实战篇]60 - 定义自己的临时配置模板的目录
Yocto系列讲解[实战篇]70 - meta-iotedge移植笔记
Yocto系列讲解[实战篇]71 - busybox配置相关内容
Yocto系列讲解[实战篇]73 - 编译dtbo和制作dtbo.img镜像包
Yocto系列讲解[实战篇]74 - 用Kbuild构建外部Linux驱动模块组
Yocto系列讲解[实战篇]79 - 如何优雅的创建一个API接口项目
Yocto系列讲解[实战篇]80 - 如何优雅的引用API接口项目
Yocto系列讲解[实战篇]84 - systemd中mount文件的一点知识
Yocto系列讲解[实战篇]85 - 制作ubi镜像和自动挂载ubifs文件系统

  • 关键词:Qt5 systemd sysvinit init conf templateconf conf.sample iotedge 微软 busybox BBFILE_COLLECTIONS

Yocto编译问题汇总

Yocto系列讲解[编译篇]83 - 解决编译gstreamer1.0问题

  • to be continue ~

给我点个赞加个关注呗!万分感谢!
在这里插入图片描述


推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 安全加密C语言库OpenSSL,在Android中服务器和客户端之间的签名验证和数据加密通信等。OpenSSL系列文章:一、AndroidCMake轻松 ... [详细]
  • 最近用python写了一个小程序,想发布出去让人试用又不想暴露源码,搜索了一下发现将py文件编译成pyd文件就能达到目的。转换过程很简单,但是在调用pyd文件并且打包为单个exe文 ... [详细]
  • 互联网世界 9 种基本的商业模式
    互联网世界9种基本的商业模式一个商业模式是运行一个公司的方法;通过该模式的运作,一个公司能维持自己的生存,就是说,能有收益。商业模式意味着一个公司是如何通过在价值链中定位自己,从而获 ... [详细]
  • ARToolKitunity
    ARToolKit为开源的AR库,相对于高通和easyAr有几点特点:1)开源2)识别项目可以动态添加(详细在后)3)识别文件可以本地生成4)目前只能识别图片(目前为.jpg格式) ... [详细]
  • Ubuntu16.0464位安装armlinuxgcc交叉编译器以及samba服务器
    交叉编译器是嵌入式开发的必要工具,但是由于目前大多数人使用64位ubuntu,在照着很多教程做的时候,就会失败,失败原因是64位ubuntu需要额外安装32位的兼容包。以arm-l ... [详细]
  • 什么是API接口?给大家举例说明
    Api接口也就是所谓的应用程序接口,api接口的全称是ApplicationProgramInterface,通过API接口可以实现计算机软件之间的相互 ... [详细]
  • Matlab中利用mex编译Opencv实现画板绘图功能
    图形绘制是标记和可视化数据的重要方法.通过在Matlab中集成画板绘图功能,可为科学计算提供便利.1设置Matlab支持Opencv编译操作系统:麒麟14.04(基于Ubu ... [详细]
  • 2019 年 Firebase 峰会上发布的新功能
    作者FrancisMa,HeadofProductFirebase的使命是帮助移动开发者和Web开发者迈向成功,但考虑到Firebase每个月有超过200万个活跃的应 ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • AI算法工程师从入门到上瘾
    设定一个非常清晰的目标清晰的目标就比如说你要做NLP,你要知道NLP的应用有智能问答,机器翻译,搜索引擎等等。然后如果你要做智能问答你要知道现在最发达的技术是深度学习,使用的算法有 ... [详细]
  • PM的自我修养——豌豆荚的Android客户端简要分析
    以下内容都是我在准备面试时的流水账,求不吐槽格式与文笔。最新的豌豆荚(4.2.1)没有使用AndroidDesign,也没有DrawerLayout,甚至没有ActionBar。在应用的 ... [详细]
  • 自定义_自定义AXIIP核(转)
    本文由编程笔记#小编为大家整理,主要介绍了自定义AXI-IP核(转)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 将android-support-multidex.jar放到libs下然后编译,出现如下错误:Error:Executionfailedfortask':app:pack ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
author-avatar
尚庆湃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有