嵌入式linux系统镜像制作day1

news2024/11/26 8:47:08

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

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)是指板级支持包,它是一组软件组件和工具,用于支持特定硬件平台上的操作系统、设备驱动程序和应用程序的开发和运行。

  1. 引导加载程序(Bootloader):负责初始化硬件并在操作系统启动前加载操作系统。

  2. 设备驱动程序:为硬件设备提供软件接口,使操作系统能够与硬件设备进行通信。

  3. 硬件抽象层(HAL):提供硬件无关的接口,使操作系统和其他软件组件能够与硬件进行交互。

  4. 配置文件:包含硬件平台的配置信息,如内存映射、外设配置等。

  5. 工具和实用程序:用于开发、调试和测试的工具,如编译器、调试器、性能分析工具等。

05、Yocto Project 参考构建系统 Poky 之间的差异和联系

介绍使用 meta-distribution 的动机。如果您已经知道 bitbake 和 OpenEmbedded,以及它们的优点,那么你可以跳过该部分。

BitBake 是一个任务执行引擎,主要用于构建嵌入式 Linux 系统。它是 Yocto 项目的一部分,用于自动化软件包的编译、配置和部署过程。BitBake 通过读取和解析配方(recipes)和配置文件来执行任务,这些文件定义了如何构建软件包以及如何将它们集成到最终的系统镜像中。

BitBake 的主要功能

  1. 任务执行:BitBake 根据配方和配置文件中的定义,自动执行编译、打包和安装等任务。

  2. 依赖管理:BitBake 能够解析软件包之间的依赖关系,并确保按照正确的顺序执行任务。

  3. 并行处理:BitBake 支持并行执行任务,以提高构建过程的效率。

  4. 可扩展性:通过编写自定义的配方和配置文件,用户可以扩展 BitBake 的功能,以满足特定的需求。

BitBake 的基本概念

  1. 配方(Recipe):定义了如何构建一个软件包的文件,通常以 .bb 或 .bbappend 为扩展名。配方文件包含了软件包的源代码地址、编译选项、依赖关系等信息。

  2. 层(Layer):一组相关的配方和配置文件的集合。层可以包含多个配方文件,以及用于配置构建环境的文件。

  3. 配置文件:定义了构建环境的配置,如目标架构、编译器选项、系统配置等。

  4. 任务(Task):BitBake 执行的基本工作单元,如获取源代码、配置、编译、打包等。

BitBake 的工作流程

  1. 解析配方和配置文件:BitBake 读取并解析所有的配方和配置文件,构建出一个完整的依赖关系图。

  2. 执行任务:根据依赖关系图,BitBake 按照正确的顺序执行任务,确保每个软件包都按照正确的顺序编译和安装。

  3. 生成镜像:最终,BitBake 将所有编译好的软件包集成到一个完整的系统镜像中。

OpenEmbedded 是一个用于构建嵌入式 Linux 发行版的框架,它提供了一个灵活且强大的构建系统,可以用于创建各种嵌入式系统,从简单的单板计算机到复杂的网络设备。OpenEmbedded 的核心是一个任务执行引擎,类似于 BitBake,它能够自动化软件包的编译、配置和部署过程。

OpenEmbedded 的主要特点

  1. 高度可定制:OpenEmbedded 允许用户通过编写自定义的配方(recipes)和配置文件来定制构建过程,以满足特定的需求。

  2. 广泛的软件包支持:OpenEmbedded 社区维护了一个庞大的软件包集合,涵盖了各种开源软件和库。

  3. 多目标支持:OpenEmbedded 可以为不同的硬件平台和目标架构生成系统镜像,支持广泛的嵌入式设备。

  4. 层(Layer)系统:OpenEmbedded 使用层(layer)的概念来组织配方和配置文件,使得不同项目和组件可以共享和重用代码。

  5. 与 Yocto 项目兼容:OpenEmbedded 与 Yocto 项目紧密集成,共享许多核心组件和技术。

OpenEmbedded 的工作流程

  1. 配置构建环境:用户通过配置文件定义目标架构、编译器选项和其他构建参数。

  2. 解析配方和配置文件:BitBake 读取并解析所有的配方和配置文件,构建出一个完整的依赖关系图。

  3. 执行任务:根据依赖关系图,BitBake 按照正确的顺序执行任务,确保每个软件包都按照正确的顺序编译和安装。

  4. 生成镜像:最终,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 镜像。

总结

下载继续,下节是关键所在。

故我在

点击下方卡片 关注我

↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Could not find artifact net.sf.json-lib:json-lib:jar

一开始我改了maven的setting&#xff0c;由官网变为阿里云仓库&#xff0c;最后还是不行 <dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.0</version><classifier>jdk15</cl…

freeRTOS任务通知(Task Notifications)

目录 前言 一、任务通知概述 1.优势及限制 2.通知状态和通知值 二、任务通知的使用 两类函数 1.xTaskNotifyGive/ulTaskNotifyTake 2.xTaskNotify/xTaskNotifyWait 三、传输计数值代码示例 四、传输任意值代码示例 前言 所谓"任务通知"&#xff0c;你可以反…

螺旋矩阵 | LeetCode-59 | LeetCode-54 | 分类讨论

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f383;分类不好&#xff0c;这道题就做不出来&#xff01;&#x1f388; &#x1f4cc;LeetCode链接&#xff1a;59. 螺旋矩阵 II &#x1f4cc;LeetCode链接…

李晨晨的嵌入式学习 DAY25

今天对昨天的fork函数进行了补充&#xff0c;并且学习了exec函数 一&#xff0c;fork函数补充 1.open在fork之前 子进程会继承父进程已打开的相关信息&#xff0c;父子进程会影响同一个offset值 2.open在fork之后 父子进程各自有各自打开的文件信息&#xff0c;不相互影响 …

Luatos-lua For MacOSX

0x00 缘起 看到Luatos-soc-pc项目能够编译到MacOS平台并且运行&#xff0c;所以尝试编译&#xff1b;可是Apple Clang编译器太过于严格&#xff0c;导致编译不通过。遂换到gcc-11编译通过&#xff0c;虽然其中依旧会报错&#xff08;宏定义LUA_USE_MACOSX不起作用&#xff0c;导…

Linux驱动入门实验班——LED驱动(附百问网视频链接)

目录 一、确定引脚编号 二、编写思路 2.1驱动层 2.2应用层 三、源码 四、实现 课程链接 一、确定引脚编号 首先&#xff0c;可以在开发板上执行如下命令查看已经在使用的GPIO状态&#xff1a; cat /sys/kernel/debug/gpio 可以看到每个gpio都有对应的编号&#xff0c;…

岗位信息采集全攻略:两种方法快速获取招聘信息

摘要 本文将揭秘两大实战策略&#xff0c;助你在激烈的人才市场中迅速捕捉前程无忧上的宝贵岗位信息&#xff0c;无论是手动搜索还是利用现代技术手段&#xff0c;都能事半功倍&#xff0c;抢占先机。 正文 一、手动搜索的艺术&#xff1a;精准定位&#xff0c;深度挖掘 1.…

【网络】传输层TCP协议的报头和传输机制

目录 引言 报头和有效载荷 确认应答机制 超时重传机制 排序和去重 连接管理机制 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 TCP是传输层协议&#xff0c;全称传输控制协议。TCP报头中有丰富的字段以及协议本身会制定完善的策略来保证网络传输的可靠性。 TCP…

ICM-20948芯片详解(12)

接前一篇文章&#xff1a;ICM-20948芯片详解&#xff08;11&#xff09; 六、寄存器详解 2. USER BANK 0寄存器详述 &#xff08;56&#xff09;FIFO_EN_1 参考代码&#xff1a; 无。 &#xff08;57&#xff09;FIFO_EN_2 ACCEL_FIFO_EN 1 —— 以采样率将ACCEL-XOUT_H、…

haproxy实例

什么是haproxy Haproxy是一款提供高可用性&#xff0c;负载均衡以及基于tcp和http的的应用交付控制器的开源软件。它由法国人威利塔罗使用c语言开发的。它广泛用于管理和路由网络流量&#xff0c;并确保应用程序的高可用性和高性能。 haproxy的功能 提供第4层&#xff08;TCP层…

vulnhub系列:Hackademic.RTB1

vulnhub系列&#xff1a;Hackademic.RTB1 靶机下载 一、信息收集 nmap 扫描存活&#xff0c;根据 mac 地址寻找 IP nmap 192.168.23.0/24nmap 扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.143 -p- -Pn -sV -O访问80端口&#xff0c;页面发现 target …

DirectX修复工具解决问题:一步步教你排除常见错误

在日常使用电脑的过程中&#xff0c;许多用户可能会遇到与DirectX相关的问题&#xff0c;特别是在运行大型游戏或图形密集型应用程序时。这种情况下&#xff0c;选择一款合适的DirectX修复工具免费版来解决问题至关重要&#xff01; 我们将分享六款好用的DirectX修复工具&…

字节Java后端二面也太难了吧...

粉丝投稿&#xff0c;字节二面直接连环问场景题&#xff0c;难以招架&#xff0c;已经准备好市场上常见的场景题了&#xff0c;希望能帮助你&#xff01; 由于平台篇幅原因&#xff0c;很多内容展示不了&#xff0c;需要这份《java面试宝典》的伙伴们转发文章关注后&#xff…

Linux_Shell变量及运算符-05

一、Shell基础 1.1 什么是shell Shell脚本语言是实现Linux/UNIX系统管理及自W动化运维所必备的重要工具&#xff0c; Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算…

MySQL基础练习题38-每位教师所教授的科目种类的数量

目录 题目 准备数据 分析数据 总结 题目 查询每位老师在大学里教授的科目种类的数量。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Teacher (teacher_id int, subject_id int, dept_id int)## 向表中插入数据 Truncate table…

ALB使用指南|深入探究 lj-lua-stacks:如何生成 Lua 代码级别的火焰图?

前言 ALB&#xff08;Another Load Balancer&#xff09;是一款由灵雀云基于 OpenResty 开发的开源Kubernetes&#xff08;K8s&#xff09; 网关&#xff0c;拥有多年的生产环境使用经验。Openresty框架高性能的基础上&#xff0c;提供了一系列高级特性&#xff0c;包括多租户支…

JsonUtility和JsonConvert.DeserializeObject

文章目录 JsonUtility 和 JsonConvert在字符串转类型时的不同总结 JsonUtility 和 JsonConvert在字符串转类型时的不同 不同&#xff1a; JsonUtility.FromJson要转的字符串内不能有注释的字符串 但JsonConvert.DeserializeObject要转的字符串里可以有 原因&#xff1a;. Jso…

新品|暴雨发布第四代工作站静安系列-TR1176

极致性能引领未来 暴雨信息推出全新一代工作站——静安系列TR1176&#xff0c;搭载了强劲的第四代处理器&#xff0c;为客户带来前所未有的计算速度与效率。无论是处理大规模数据集、复杂算法还是高负载多任务&#xff0c;都能轻松应对&#xff0c;确保客户的工作流程顺畅无阻…

【随笔】Java 连接操作FTP与SFTP 详细指南

引言 在Java开发中&#xff0c;文件传输协议&#xff08;FTP&#xff09;和安全文件传输协议&#xff08;SFTP&#xff09;是处理文件传输的两种常见方式。FTP是标准的网络文件传输协议&#xff0c;而SFTP则在FTP基础上增加了安全层&#xff08;SSH&#xff09;&#xff0c;提…

设计模式 之 —— 组合模式

目录 什么是组合模式&#xff1f; 定义 特点 结构 组合模式&#xff08;java代码示例&#xff09; 首先定义接口 定义叶节点&#xff08;Leaf类&#xff09; 定义容器节点&#xff08;Composite类&#xff09; 测试类&#xff1a; 树形图 运行结果&#xff1a; 组…