嵌入式linux系统镜像制作day1
点击上方"蓝字"关注我们
01、前言
嵌入式设备(例如心电图检测仪,售票系统等)。尽管,嵌入式设备像那些智能手机一样,绝大多数都使用同样的硬件和软件,包括系统芯片SoC、储存、连接和多媒体接口、操作系统和设备驱动等,两者还是具有鲜明的差异。所不同的典型特点是嵌入式设备的低销量和长生命周期,这给OEM(原始设备制造商)带了极大的挑战。
02、从旧版本软件编译和维护中学到的经验
通常,OEM 倾向于从底层开始研发嵌入式平台,因为这能够使其控制项目以及根据需求定制平台。诸如SoC、内存、电源管理、多媒体以及连接端口、外设、显示等都将会集成到PCB上。包括设备驱动、板级支持包、用户界面等在内的软件将会自己开发或者部分由OEM 外包。
从底层开始的嵌入式产品研发需要高额的不可回收成本以及 OEM 涉及各种活动的固定成本和开销。并且,产品研发时间的增加,会导致成本的上升和延长上市时间。高额的净开支意味着需要更长的时间达到销量的盈亏平衡。所以,OEM 需要能够在较长的一段时间内无需任何重新设计就可以重复使用的嵌入式平台。较低的销量也排除了在硅晶元件制造方面利用规模经济的可能,这会进一步增加成本。基于芯片的开发,同样也会给项目增加重大的风险。在从底层开始的整个开发中,出错的概率是很高的,这又会增加投入成本和延长上市时间。
03、嵌入式的蜕变
你仍然需要通过本地连接来访问和控制你的嵌入式设备。出于安全考虑,你不一定想要通过网络来做一些关键的配置或者数据传输。亦或,你的设备需要一个特殊的维护接口。在这篇文章中,我将会分享通过USB 和你的嵌入式设备通信的方法。
讨论USB “主机”和“客户端”。“主机”是指用于连接你嵌入式设备的电脑,“客户端”则是你的嵌入式设备。并且,我会讨论只在 Windows CE 中的一些方法。Linux 也提供类似的方法。
如果你只需要在嵌入式设备上存取文件,那么大容量存储设备会更加合适。因为,用户将嵌入式设备视为挂载到电脑上的普通存储设备,所以你对于这整个过程掌控甚少。并且只有当 USB 设备插入后,嵌入式设备才能访问文件。
串行设备
介绍下所需的步骤:
客户端
1、禁用 ActiveSync,否则会占用串口连接
2、默认情况下,主机上将会显示 Microsoft USB Sync 设备。当你开始销售你的产品时,你应该修改这些配置,当然在开始研发的时候,你也可以不进行设置。
3、开发应用,在虚拟串口上发送命令和数据。
主机:在主机上我们使用 WinUSB 和我们的嵌入式设备通讯
1、如果你在上面第二步中,修改客户端上的厂商ID和产品ID,你就必须重新编译自己的 INF 文件,匹配 idVendor 和 idProduct。
2、开发应用,控制设备以及发起通信。
04、降本增效
费用、性能、PCB 设计、内存、上市时间、技术支持、外壳、I/O 配置、尺寸、采购、灵活性、扩展性、元件停产、合规、认证。这是一长串清单。当在开发嵌入式产品的时候,你会遇到以上大量的问题。
正如你所了解的,现成的单板电脑是一种在一块 PCB 板上集成SoC、存储和 I/O (USB,UART 等接口)以及相应的设备驱动、操作系统和 BSP 的面向应用的嵌入式平台。因此,你的产品开发会变得相当简单。只需要编写你的应用程序,将电路板放入一个漂亮的盒子,那么你的产品基本上可以准备进入市场了。
单板电脑是那些不会在未来进一步演进的产品的理想选择。例如公园的喷泉控制器系统,在未来处理能力方面不会有增强的需求。那么单板电脑这种场合下就可以使用。然而,要求苛刻的应用,如医疗、自动化、机器人和航空等设备,会根据消费者需求和技术进步,在未来发生改良。这种情况下,就会遇到单板电脑带来的挑战。
BSP(Board Support Package)是指板级支持包,它是一组软件组件和工具,用于支持特定硬件平台上的操作系统、设备驱动程序和应用程序的开发和运行。
-
引导加载程序(Bootloader):负责初始化硬件并在操作系统启动前加载操作系统。
-
设备驱动程序:为硬件设备提供软件接口,使操作系统能够与硬件设备进行通信。
-
硬件抽象层(HAL):提供硬件无关的接口,使操作系统和其他软件组件能够与硬件进行交互。
-
配置文件:包含硬件平台的配置信息,如内存映射、外设配置等。
-
工具和实用程序:用于开发、调试和测试的工具,如编译器、调试器、性能分析工具等。
05、Yocto Project 参考构建系统 Poky 之间的差异和联系
介绍使用 meta-distribution 的动机。如果您已经知道 bitbake 和 OpenEmbedded,以及它们的优点,那么你可以跳过该部分。
BitBake 是一个任务执行引擎,主要用于构建嵌入式 Linux 系统。它是 Yocto 项目的一部分,用于自动化软件包的编译、配置和部署过程。BitBake 通过读取和解析配方(recipes)和配置文件来执行任务,这些文件定义了如何构建软件包以及如何将它们集成到最终的系统镜像中。
BitBake 的主要功能
-
任务执行:BitBake 根据配方和配置文件中的定义,自动执行编译、打包和安装等任务。
-
依赖管理:BitBake 能够解析软件包之间的依赖关系,并确保按照正确的顺序执行任务。
-
并行处理:BitBake 支持并行执行任务,以提高构建过程的效率。
-
可扩展性:通过编写自定义的配方和配置文件,用户可以扩展 BitBake 的功能,以满足特定的需求。
BitBake 的基本概念
-
配方(Recipe):定义了如何构建一个软件包的文件,通常以
.bb
或.bbappend
为扩展名。配方文件包含了软件包的源代码地址、编译选项、依赖关系等信息。 -
层(Layer):一组相关的配方和配置文件的集合。层可以包含多个配方文件,以及用于配置构建环境的文件。
-
配置文件:定义了构建环境的配置,如目标架构、编译器选项、系统配置等。
-
任务(Task):BitBake 执行的基本工作单元,如获取源代码、配置、编译、打包等。
BitBake 的工作流程
-
解析配方和配置文件:BitBake 读取并解析所有的配方和配置文件,构建出一个完整的依赖关系图。
-
执行任务:根据依赖关系图,BitBake 按照正确的顺序执行任务,确保每个软件包都按照正确的顺序编译和安装。
-
生成镜像:最终,BitBake 将所有编译好的软件包集成到一个完整的系统镜像中。
OpenEmbedded 是一个用于构建嵌入式 Linux 发行版的框架,它提供了一个灵活且强大的构建系统,可以用于创建各种嵌入式系统,从简单的单板计算机到复杂的网络设备。OpenEmbedded 的核心是一个任务执行引擎,类似于 BitBake,它能够自动化软件包的编译、配置和部署过程。
OpenEmbedded 的主要特点
-
高度可定制:OpenEmbedded 允许用户通过编写自定义的配方(recipes)和配置文件来定制构建过程,以满足特定的需求。
-
广泛的软件包支持:OpenEmbedded 社区维护了一个庞大的软件包集合,涵盖了各种开源软件和库。
-
多目标支持:OpenEmbedded 可以为不同的硬件平台和目标架构生成系统镜像,支持广泛的嵌入式设备。
-
层(Layer)系统:OpenEmbedded 使用层(layer)的概念来组织配方和配置文件,使得不同项目和组件可以共享和重用代码。
-
与 Yocto 项目兼容:OpenEmbedded 与 Yocto 项目紧密集成,共享许多核心组件和技术。
OpenEmbedded 的工作流程
-
配置构建环境:用户通过配置文件定义目标架构、编译器选项和其他构建参数。
-
解析配方和配置文件:BitBake 读取并解析所有的配方和配置文件,构建出一个完整的依赖关系图。
-
执行任务:根据依赖关系图,BitBake 按照正确的顺序执行任务,确保每个软件包都按照正确的顺序编译和安装。
-
生成镜像:最终,BitBake 将所有编译好的软件包集成到一个完整的系统镜像中。
06、分布与元分布
为了高效地使用 Linux 和开源软件,发行版系统一般都包含预先编译以及打包好的开源软件。这使得在操作系统中可以方便地安装和移除额外的软件。然而,当软件包需要进一步定制时,例如移除某些功能、不同配置或者集成修复补丁,针对嵌入式项目处理一个大型发行版的软件打包过程将会遇到诸多问题。经典的编译系统仅使用本地编译,相比于在工作站或者编译服务器上,这在嵌入式设备上是相当慢的。软件包的定制无法被上传,因为这对于发行版的其他用户并不适用。在分支中维护这些更改,也是极费时间的。在另一方面,从底层开始构建定制化 Linux 文件系统,而不使用高级的编译系统,同样是十分耗费时间并且容易出错。
两个针对嵌入式 Linux 最为广泛使用的 meta-distributions 分别是 Buildroot 和 OpenEmbedded。
buildroot与yocto区别 |
在 OpenEmbedded 中,distribution 层配置文件系统的基本功能。Yocto 项目有自己基于 bitbake 和 OpenEmbedded 的 distribution 层,称为 Poky。
Qt历险记 BSP 则使用另一个针对 OpenEmbedded 广为使用的 distribution 层 Ångström。之所以选择 Ångström 的一个原因是 Ångström 提供预编译的软件包。预编译的软件源允许桌面发行版安装其他的软件。这在原型开发阶段会特别有用,我们的演示镜像也是基于这个目的。如果你希望使用 Yocto 项目的参考构建系统 Poky,这也是非常容易的,因为底层所使用的构建系统是一致的。
07、Yocto 详情
在 OpenEmbedded 环境中,一般发布的周期是 6 个月。但版本的名字和序号取决于(子)项目的开发情况。
OpenEmbedded 是一个分层的构建系统。这使得 meta-distributions 核心功能和各个板级支持的开发具有较大的独立性。
Poky 使用 Sato 作为其默认的用户界面,这是一个基于 GTK2 的定制化桌面环境。因此,使用 Poky 构建系统将不需要使用 meta-lxde 层。
定制化镜像文件部署步骤:在镜像编译完成后,有一个专门的步骤来整合我们的烧写工具和脚本(例如 update.sh)以及生成一个可以分发的 tar.bz2 包。这个镜像定制过程不适用于 Poky 镜像。
总结
下载继续,下节是关键所在。
故我在
点击下方卡片 关注我
↓↓↓
相关文章:

嵌入式linux系统镜像制作day1
点击上方"蓝字"关注我们 01、前言 嵌入式设备(例如心电图检测仪,售票系统等)。尽管,嵌入式设备像那些智能手机一样,绝大多数都使用同样的硬件和软件,包括系统芯片SoC、储存、连接和多媒体接口、…...

【相机与图像】2. 相机内外参的标定的代码示例
1 摄像头内参的标定 【相机标定具体操作】 使用将要标定的摄像头,以不同的角度采集棋盘格,要保证视野内出现完整的棋盘格。采集图片数量约15张左右即可。 以11*8的棋盘格为例,具体流程如下: step 1. 设置棋盘格3D点;通…...

重启人生计划-拒绝内耗
🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳 如果你觉得这个【重启人生…...

盘点电脑开机慢的几大高频原因
常规的话一台电脑正常我们都要用个2年以上的时间,有的可能更长,5年的都有,而电脑目前占多数的主流操作系统就是微软的Windows。那么随着使用年限的增加,无论是系统还是电脑硬件,都会随着使用次数和使用的时间的增加而有损耗,系统软件上就是文件越来越臃肿,空间越来越小,…...

2-64 基于matlab的Consensus-Based Bundle Algorithm (CBBA)算法
基于matlab的Consensus-Based Bundle Algorithm (CBBA)算法,可为异构代理网络上的多代理多任务分配问题提供良好的解决方案。支持具有有效时间窗口的任务、异构代理-任务兼容性要求,以及平衡任务奖励和燃料成本的得分函数。奖励和燃料成本的分数函数。程…...

Win10 去掉桌面右上角 了解有关此图片的信息
1. 进入注册表 Win R运行regedit 2. 找到以下路径 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel 3. 新建 DWORD(32位)值(D) 右击 NewStartPanel新建 DWORD…...

tcpdump入门——抓取三次握手数据包
1. 使用docker启动一个tcp应用 参考:https://blog.csdn.net/LONG_Yi_1994/article/details/141175526 2. 获取容器id docker ps |grep gochat 3. 获取容器的 PID 首先,你需要获得容器的进程 ID(PID)。可以使用 docker inspect…...

漏洞复现-GitLab任意读取文件(CVE-2023-2825)
1.漏洞描述 GitLab是一个用于仓库管理系统的开源项目,其使用Git作为代码管理工具,可通过Web界面访问公开或私人项目。据悉,该漏洞影响 GitLab社区版(CE)和企业版(EE)的 16.0.0 版本,其它更早的版本几乎都不受影响。 该漏洞存在于GitLab CE/EE版本16.0.0…...

二叉树——9.找树左下角的值
力扣题目链接 给定一个二叉树,在树的最后一行找到最左边的值。 示例: 输出:7 题干很简单,找到树的最后一行,在该行找到最左边的值,结合完整代码进行分析。 完整代码如下: class Solution:d…...
如何用github制作个人网站
这里整理了一些参考资料。总结来说,如果系统学过html网页制作的话,可以不用看这篇博客了;这里适合于小白,就是那种 没有做过网页、打算以别人优秀的个人主页为框架做网页的小白。 一、简单说明 这是利用github.io来制作网页的&a…...

二.PhotoKit - 相册权限(彻底读懂权限管理)
引言 用户的照片和视频算是用户最私密的数据之一,由于内置的隐私保护功能,APP只有在用户明确授权的前提下才能访问用户的照片库。从iOS14 开始,PhotoKit进一步增强了用户的隐私控制,用户可以选择指定的照片或者视频资源的访问权限…...

二叉树------最小堆,最大堆。
什么是最小堆: 堆是一种二叉树,最小堆中所有父亲节点的值都要比自己的子节点的值要小。而根节点称为堆顶。根据定义我们可以得到堆中最小元素就在堆顶。(节点左上角是编号,内部是元素值) 假设该图中的堆顶元素是24呢&a…...
预约功能的知识整理
前置知识 如果项目为小程序的开发项目中: 我们确定数据库中有的字段有: 预约人姓名、手机号、家人名称、预约时间 根据我们的经定一表必须要有的6个字段: 主键、创建时间、修改时间、创建人、修改人、备注 使用我们现在有的字段为: 主键…...

Linux的常用操作-02
一:Linux的系统目录结构 /bin bin是ary的缩写,这个目录存放着最经常用的命令 /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev:dev是Device(设备)的缩写,该目录下存放的是Lin…...

Android Studio 连接手机进行调试
总所周知,Android Studio里的虚拟手机下载后又大又难用。不如直接连手机用。本篇文章主要内容为Android Studio怎么连接手机进行程序调试。 1. 在AndroidSDK中下载google USB Driver: 2. 连接手机: 进入电脑设备管理器界面。并点开便携设备,…...

Vue3项目创建及相关配置
Vue是一种用于构建用户界面的JavaScript框架。它采用了一种称为MVVM(Model-View-ViewModel)的架构模式。 MVVM是一种将用户界面与业务逻辑和数据分离的设计模式。它包括三个部分: Model(模型):表示应用程序…...
【Python】Python中一些有趣的用法
Python是一种非常灵活和强大的编程语言,它有很多有趣的用法,以下是一些例子: 一行代码实现FizzBuzz: print(\n.join([FizzBuzz[i%3*4:i%5*8:-1] or str(i) for i in range(1, 101)]))使用列表推导式生成斐波那契数列: …...

RCE复现问题和研究
目录 先了解一些常见的知识点 PHP常见命令执行函数 call_user_func eval() call_user_func_array array_filter 实战演练(RCE)PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? 1、长度…...

MySQL中的索引——适合创建索引的情况
1.适合创建索引的情况 1、字段的数值有唯一性的限制 2、频繁作为 WHERE 查询条件的字段 某个字段在 SELECT 语句的 WHERE 条件中经常被使用到,那么就需要给这个字段创建索引了。尤其是在数据量大的情况下,创建普通索引就可以大幅提升数据查询的效率。 …...

5款在线伪原创改写软件,智能改写文章效果好
在这个信息爆炸的时代,内容创作变得愈发重要,而对于创作者来说,有时需要一些得力的伪原创改写工具来辅助我们更好地改写出高质量的内容。今天我要和大家分享5款令人惊喜的在线伪原创改写软件,它们以出色的智能改写效果,…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...