1.yocto系列之yocto是码下个什么东东
2.飞凌嵌入式i.MX 8M Plus开发板的OTA远程升级方案
3.yocto系列之针对rk3588平台构建一个基础镜像
4.openbmc 基于qemu的调试环境搭建
5.发行版Linux的分支与发行版一览无余linux的分支
6.深入p-limit源码,如何限制并发数?
yocto系列之yocto是码下个什么东东
Yocto项目不是用于现有硬件的软件开发工具包,而是码下用于构建这样的工具包。
Yocto项目不是码下可以部署到硬件上的系统二进制镜像,而是码下用于构建这样一个镜像。
Yocto项目不是码下数据分发源码可以用于在硬件上安装的Linux发行版,而是码下用于为资源受限的硬件创建定制发行版。
Yocto项目是码下一个开源协作项目,旨在帮助开发者创建定制的码下基于Linux的嵌入式系统,且不受硬件架构限制。码下该项目提供了一套灵活的码下工具和共享平台,嵌入式开发者可在全球范围内共享技术、码下软件堆栈、码下配置和最佳实践,码下用于构建定制的码下Linux镜像。
Yocto项目整合了三个关键开发元素:一套集成工具,用于成功进行嵌入式Linux开发,包括自动构建和测试工具、板级支持流程、许可合规流程以及定制Linux嵌入式操作系统的组件信息;一个参考嵌入式发行版Poky;与OpenEmbedded项目共同维护的OpenEmbedded构建系统。
Poky(发音为Pock-ee)是一个参考嵌入式发行版,用于演示如何定制发行版,测试Yocto项目组件,以及作为下载Yocto项目的工具。Poky不是产品级别的发行版,而是定制起点,位于oe-core之上。
oe-core或OpenEmbedded-Core是基础recipes、类别和相关文件的元数据集合,旨在在多个不同的OpenEmbedded衍生系统中通用,包括Yocto项目。它是OpenEmbedded社区原始存储库的筛选子集,经过持续验证,形成了严格控制和质量保证的核心recipes。
recipe是最常见的元数据形式,包含构建软件包的设置和任务列表,用于构建二进制镜像。recipe描述源代码获取、应用补丁、库依赖关系以及配置和编译选项。它们存储在层中,androidzxing源码分析使Poky具有高可扩展性、多功能性,并易于适应各种系统。例如,可以创建网络、应用程序、图形子系统等专用层。
配置文件包含全局变量定义、用户定义变量及硬件配置信息,告诉构建系统在image中构建和放置什么以支持特定平台。recipe和配置文件被称为Poky构建系统中的元数据,除了这些,还有用于使用recipe和配置文件构建图像的命令和数据。
构建过程由oe-core中的有效image和BitBake调度器和执行引擎完成。BitBake解析recipe和配置数据,创建依赖树以排序编译,安排代码编译,最后执行构建定制Linux镜像。BitBake类似于make构建工具,用于指定如何构建特定软件包,包括依赖项、源代码位置、配置、编译、构建、安装和删除指令。构建过程中跟踪依赖关系并执行软件包的本地或交叉编译。在交叉构建设置中,BitBake尝试创建适用于目标平台的交叉编译器工具链。
Yocto项目组件的开发流程包括决定高级配置、源代码获取、补丁应用、构建、打包、QA、生成软件包源和最终镜像创建。构建过程还可能生成用于对应平台的开发和构建应用程序的SDK。
飞凌嵌入式i.MX 8M Plus开发板的OTA远程升级方案
传统Linux系统更换镜像的手段相对单一,但RAUC工具为Linux引入了Android式的OTA升级功能。本文以飞凌嵌入式i.MX 8M Plus的bbin网站源码OKMX8MP-C开发板为实例,展示如何基于Linux 5.4.内核通过RAUC实现系统更新。 升级前,系统启动时会读取boot.0和rootfs.0分区。切换至OTA模式,uboot引导系统将从boot.1和rootfs.1启动。实现Linux-OTA的关键步骤如下:环境准备
下载Ubuntu .虚拟机镜像,链接地址:mirrors.tuna.tsinghua.edu.cn...
升级虚拟机GCC至7.0版本:修改apt源,安装GCC-7和G++-7,然后将原有GCC和G++备份并指向新版本。
安装RAUC工具:通过apt进行安装。
源码配置与环境配置
-
配置eMMC分区:修改Init.sh脚本。
解压RAUC及相关依赖工具:包括liblz4、fw_setenv、unsquashfs和yocto-rauc-1.5.1。
修改配置文件:fw_env.config、system.conf,以及编译脚本和挂载配置文件,确保兼容性和分区正确。
生成升级包
-
全编译镜像,获取所需文件。
复制镜像和密钥文件,创建并编辑manifest.raucm配置文件。
编写打包脚本run.do_bundle.sh,生成bundle.raucb升级包。
系统升级与管理
-
将升级包传到开发板,检查系统状态并进行升级。
升级后确认uboot引导分区,切换至新系统,然后同步并重启。
如果需要回退,重新配置uboot引导分区。
通过以上步骤,飞凌嵌入式OKMX8MP-C开发板成功实现了RAUC支持的OTA升级,升级过程涉及的分区管理和RAUC工具的使用是关键。希望这个教程能为开发者提供实践指导。yocto系列之针对rk平台构建一个基础镜像
在构建针对RK平台的Yocto基础镜像的旅程中,我们首先回顾了之前的步骤。这包括Yocto基础知识的概述、主机设置与配置,以及如何构建并运行第一个镜像。unty 军棋源码接下来,我们将专注于将这些基础扩展到适用于RK平台的镜像构建。
假设我们的构建目录命名为rk-build,我们将直接在该目录下执行构建命令。当我们构建用于QEMU的镜像时,无需额外层配置,因为poky已包含QEMU构建所需的配方。
为了构建适用于RK的镜像,我们需确保配置了正确的meta-rockchip层。该层在meta-openembedded层的基础上进一步支持RK平台的构建,包含特定于内核、驱动程序和配置的配方。我们可能还需要其他层以支持网络、Python、多媒体等功能。
下载并添加这些必要的层到我们的构建配置中,我们首先将meta-xx层放置在与poky目录同级,以便于共享。接下来,下载Open-Embedded并切换至kirkstone分支,然后下载meta-rockchip层源代码。
通过bitbake-layers命令将这些层整合到构建中,确保在conf/bblayers.conf文件中正确配置。若遇到语法错误,可使用bitbake-layers命令代替手动编辑,以避免构建失败。
配置机器和选择镜像是我们构建过程的关键步骤。在meta-rockchip层中,机器配置文件(位于conf/machine目录)提供支持的机器名称列表。我们选择名为rockchip-rk-evb的机器。
查看meta-rockchip/recipess-core/images目录以了解可用镜像,若无法在此目录中找到对应的.bb文件,可进一步检查poky/meta/recipess-core/images目录。镜像名称即为.bb文件的文件名,去掉.bb扩展名。
在构建目录下,编辑conf/local.conf文件以应用特定于机器和镜像的配置。
在资源获取阶段,可能遇到网络问题导致的fetch失败。通过重复尝试获取资源,qt multimedia 源码可以解决此类问题。
镜像编译阶段,将输出编译进度与可能遇到的错误信息,帮助我们了解构建过程的状态并进行相应的调整。
openbmc 基于qemu的调试环境搭建
基础知识略过,本文聚焦于openbmc开发调试的核心部分——前后端联动单步调试,将全面展示搭建基于qemu的调试环境。
搭建环境前,确保基础环境准备就绪,openbmc开发者通常具备所需基础知识。首先,下载SDK手册,选用ASpeed芯片作为典型例子,多数openbmc项目采用此版本。
推荐使用自定义脚本辅助编译过程,自行试验后发现效果显著。成功编译后,即完成基础环境搭建。接下来,转向前后端调试环境的构建。
使用qemu核心参数实现主机与虚拟机间端口转发,此操作相当于提供一块虚拟开发板,使得外部访问变得简单直接。主机端口转发命令示例为:hostfwd=[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport。此选项支持针对TCP或UDP协议的数据传输,且允许在单个命令中指定多个端口转发。
注意系统默认apt安装的版本为6.2,过时可能导致模拟运行失败。需进行升级操作。通过命令删除旧版本,并下载openbmc发布的8.2版本,确保模拟环境的兼容性。
前端UI运行与后端运行同步进行。通过qemu启动openbmc镜像,调整相关参数,确保与自身环境相适应。针对romulus测试镜像和ast,分别通过bitbake编译生成最新的(V.)版本,并增加gdb调试端口转发至主机端口。
前端代码准备阶段,openbmc前端已采用vue实现(vue2),webui-vue代码通过下载获得。老版本UI已不再维护,建议基于AngularJS的代码不再考虑。Node版本推荐使用。
项目文件修改涉及增加环境变量,可通过修改webui-vue中的配置文件vue.config.js完成,其中ip地址为Ubuntu宿主机的ip地址和转发端口。
项目运行阶段,使用vscode打开项目,并在edge中安装Vue开发者工具。前端效果验证通过后,应能通过前端链接访问到qemu中openbmc的web后端——bmcweb,用户名和密码默认为root/0penBmc,初次访问需确认风险继续。
VUE开发者工具的集成使得调试更加直观有效。后端调试方面,通过yocto的开发者工具devtool进行代码导出,这是整个openbmc作为大型Linux发布系统集成的体现。建议掌握两个基础命令,更详细的命令参考可获取。
源码编译阶段,推荐通过标准SDK进行,而非增量编译。标准SDK编译过程可控,参数调整方便。导出标准SDK后,无yocto环境的主机也可调试openbmc固件,下载配套源码进行编译。
bmcweb更新通过scp命令上传编译好的带debuginfo的版本,注意需先stop服务/kill相关进程,确保上传成功后再次启动服务。gdbserver交叉编译与安装则用于gdb调试,启动qemu时增加gdb调试端口转发至主机端口。通过gdbserver与宿主机连接,实现调试。
调试demo以获取NTP信息页面为例,展示调试流程。总结而言,通过以上步骤搭建的gdb调试环境适用于复杂如bmcweb后端的案例,其他dbus应用程序亦可基于此方法进行调试,核心要点在于掌握gdb调试技巧。相信有了gdb,openbmc的学习与理解将更深入。
发行版Linux的分支与发行版一览无余linux的分支
Linux是一个自由软件系统,自由发行版本不受经济利益和版权约束,源代码可免费获取。Linux的发行版在发展过程中极大的开放,由于支持大量的硬件、操作系统平台和分发格式等原因,导致发行版本之间具有明显的差异。现在均发行于两个主要领域,即私人协商的程序部署和家庭或个人电脑上的自由软件。在这些领域中,Linux具有强大的活力和持续的改进,因此不同的发行版本经常出现,发布更新,实现特定功能。
Linux发行版分支完全依据用户特定的需求而划分,一般可分为以下几大类:
一、桌面环境:以Linux X Window系统为基础,提供预先安装好的桌面、文件管理器和运行环境,以及基于桌面系统的应用软件。常见的发行版本有Ubuntu、Red Hat、CentOS、Debian等。
二、服务器环境:以互联网服务器的需求为核心,提供大规模的安全性,数据库管理和网站管理功能,以及更新LAMP框架,最早的Linux服务器发行版本是Red Hat的,然后是Debian的。
三、云服务:在云服务上,发行版本以OpenStack为基准,提供云服务器、容器存储、负载均衡等功能,常见发行版本是CentOS、OpenSUSE等。
四、嵌入式环境:与台式机和移动设备不同,嵌入式开发环境提供低功耗、静音运行模式,安全性要求更高,发行版本以嵌入式CPU的架构为核心,提供与嵌入式硬件相关的软件和驱动程序,包括Yocto、Raspbian、Red Embedded Linux等
五、终端设备:针对终端设备提供专用发行版本,多用于低配置终端操作,支持常用的桌面系统,如Tizen OS、Android OS等。
总结起来,Linux发行版本供应类型尽管复杂,但不管是哪类环境,都满足用户不同的需要,可以从多方面入手进行安装,如果能系统的了解Linux发行版架构,可以节约大量的安装和配置时间,便于开发、部署和支持。
深入p-limit源码,如何限制并发数?
并发处理在现代编程中扮演着至关重要的角色,尤其在异步操作和并行任务处理中。虽然JavaScript是单线程执行的,但它通过Promise.all等API实现了并发效果,允许同时处理多个异步操作。
Promise.all是Promise库中的一个关键函数,它接受一个Promise数组作为参数。此函数会等待所有给定的Promise实例全部完成或其中一个失败,然后返回一个新Promise的数组结果。如果所有Promise都成功,则返回所有成功结果的数组;如果一个或多个Promise被拒绝,则返回第一个拒绝的Promise的reason。
然而,有时并发操作需要被限制。过多的并发请求可能给服务器带来压力,影响性能。这时候,p-limit库就显得尤为重要,它允许我们为并发操作设置一个上限。
p-limit提供了pLimit函数来定义并发限制。使用pLimit时,你可以传入一个数量参数,这个参数决定了同时可以执行的异步任务数量。函数返回一个新函数,该函数接收需要并发执行的异步任务。当执行队列中的任务数量达到上限时,新传入的任务会被加入队列,等待前面的任务释放资源后执行。
p-limit的实现中,核心在于初始化一个计数器和一个任务队列。队列采用了yocto-queue库实现,它提供了一个基于链表的队列结构。在并发处理过程中,p-limit通过enqueue函数将异步任务入队,并在队列中管理任务的执行顺序和限制。
enqueue函数负责将异步任务入队,同时对任务进行包装和控制,确保任务在队列中按顺序执行,且不会超过指定的并发限制。这通过使用async函数实现,以确保等待下一个微任务的到来,从而在异步更新的activeCount值上进行比较,以维持并发限制。
在实际执行时,每个任务的执行由run函数控制。此函数在内部管理并发计数,并在任务完成后执行下一个任务,确保并发限制被严格遵守。enqueue、run和next三个函数协同工作,构成了p-limit中一个动态、有限的异步任务执行流程。
此外,p-limit还包含了辅助函数用于管理任务状态,如获取当前执行任务数量(activeCount)、队列中等待任务数量(pendingCount)以及清空任务队列(clearQueue)。这些功能共同协作,确保并发处理既高效又可控。
通过p-limit库,开发人员能够轻松实现异步操作的并发控制,优化性能并防止服务器过载。了解其内部机制,能更好地利用并发处理技术,提升应用响应速度和用户体验。
构建yocto编译环境
Yocto项目,专注于嵌入式Linux OS开发的开源平台,本文将探讨FSL Yocto Project Community BSP的构建环境设置。 构建相关镜像所需的文件主要分布在项目的layers中,这些layers包含定制化资源,如recipes,它们负责获取源代码、构建和打包组件。主机环境要求
Ubuntu .及以上版本
存储空间需求
最低需要GB磁盘空间,推荐预留GB~GB的冗余空间。预安装主机软件
gawk, wget, git-core, diffstat, unzip, texinfo, gcc-multilib
build-essential, chrpath, socat, cpio, python-is-python3
python3-pip, python3-pexpect
...以及其他相关软件
环境配置
在home目录下创建bin文件夹
下载并安装repo工具,赋予执行权限
在.bashrc中设置环境变量,然后刷新环境
配置git,设置用户名和邮箱
获取NXP yocto BSP
创建imx-yocto-bsp目录并切换至该目录
初始化repo并从指定源同步
异常处理与维护
遇到repo初始化问题,可删除.repo文件夹后重新同步。定期更新layers以保持最新。构建镜像与选项
使用bitbake编译,例如DISTRO=fsl-imx-fb, MACHINE=imx6qpsabre
通过source imx-setup-release.sh -b build-fb构建核心镜像
重启编译环境时,使用setup-environment
生成的镜像存放在/tmp/deploy/images目录下