首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >linux 嵌入式Linux构建方法《Rice linux 学习开发》

linux 嵌入式Linux构建方法《Rice linux 学习开发》

作者头像
Rice加饭
发布于 2022-05-09 21:18:01
发布于 2022-05-09 21:18:01
10.1K0
举报
文章被收录于专栏:Rice嵌入式Rice嵌入式

构建嵌入式系统有很多种方式,每一种方式都有他存在的地方,比如适配于那种场合和应用。我也是了解不多,参考了网上的一些东西资料,以及抒发自己在学习这些构建方法时的一些看法。

《Yocto》

Yocto是我最近在学习的一个东西。

Yocto :一个开源协作项目,提供模板、工具和方法,帮助您为嵌入式产品创建定制的基于 Linux 的系统,而不管硬件架构如何。它是用于创建定制的 Linux 运行时映像的配方、配置值和依赖关系的集合,可根据您的特定需求进行定制。Yocto 使用 Openembedded 作为其构建系统。从技术上讲,这两个是独立的项目;然而实践中不需要了解区别。

Yocto 项目的输出大致由三部分组成:

1、目标运行时二进制文件:这些包括引导加载程序、内核、内核模块、根文件系统映像。以及将 Linux 部署到目标平台所需的任何其他辅助文件。

2、包流:这是可以安装在目标上的软件包集合。您可以根据需要选择软件包格式(例如,deb、rpm、ipk)。其中一些可能预先安装在目标运行时二进制文件中,但可以构建用于安装到已部署系统的软件包。

3、目标 SDK:这些是安装在目标平台上的软件的库和头文件的集合。应用程序开发人员在构建代码时使用它们,以确保它们与适当的库链接

优点:

Yocto 项目很容易通过层进行扩展,层可以独立发布以添加额外的功能,或针对项目发布时尚不可用的平台,或用于保存系统特有定制功能。层可以添加到你的配置中,以添加未特别包含在市面上版本中的独特功能;例如,“meta-browser” 层包含 Web 浏览器的清单,可以轻松为您的系统进行构建。因为它们是独立维护的,所以层可以按不同的时间发布(根据层的开发速度),而不是跟着标准的 Yocto 版本发布。

Yocto主版本分支仅支持少数几块主板(以便达成合理的测试和发布周期),但是,标准工作模式是使用外部主板支持层。

Yocto 非常灵活和可定制。您的特定应用程序的自定义可以存储在一个层进行封装和隔离,通常将要素层特有的自定义项存储为层本身的一部分,这可以将相同的设置同时应用于多个系统配置。Yocto 还提供了一个定义良好的层优先和覆盖功能。这使您可以定义层应用和搜索元数据的顺序。它还使您可以覆盖具有更高优先级的层的设置。

缺点:

Yocto 项目最大的缺点是学习曲线陡峭。学习该系统并真正理解系统需要花费大量的时间和精力。

Yocto 项目的开发时间和资源相当高。需要构建的包(包括工具链,内核和所有目标运行时组件)的数量相当多。Yocto 开发人员的开发工作站往往是大型系统。不建议使用小型笔记本电脑。Yocto有一个内置的缓存机制,当它确定用于构建特定包的参数没有改变时,它允许它重新使用先前构建的组件。

个人看法:

Yocto学习难度比较大,如果没有看Yocto那本书,从网上找资料是比较痛苦的。有个.bb的东西,目前为止,我还不能完完整整自己敲一个出来,需要模仿别的.bb来设计。其实我想吐槽,他的构建很耗资源,对电脑的性能要求很高,他会把电脑的资源全部耗尽,一个编译下来,基本半天到一天的时间。编译效率低。Yocto,通过配置好环境变量后,比bitbake xxx 就等待漫长的时光。资源的消耗,编译的时间,已经困扰了我很长时间,目前要学习如何解决这些问题,后续如果有学习捷径,我在写一篇文章。

《Buildroot》

Buildroot是我学习的第一个构建嵌入式系统的方式。

Buildroot:通过交叉编译生成嵌入式 Linux 系统的简单、高效且易于使用的工具。Buildroot 会禁用所有软件包的所有可选编译时设置(有一些值得注意的例外),从而生成尽可能小的系统。系统设计人员需要启用适用于给定设备的设置。

Buildroot输出的主要组成部分:

1、将 Linux 部署到目标平台所需的根文件系统映像和任何其他辅助文件

2、适用于目标硬件的内核,引导加载程序和内核模块

3、用于构建所有目标二进制文件的工具链。

优点:

Buildroot 对简单性的关注意味着,更容易学习。核心构建系统用 Make 编写,并且足够短以便开发人员了解整个系统,同时可扩展到足以满足嵌入式Linux 开发人员的需求。Buildroot 核心通常只处理常见用例,但它可以通过脚本进行扩展。

Buildroot 系统使用普通的 Makefile 和 Kconfig 语言来进行配置。Kconfig 由 Linux 内核社区开发,广泛用于开源项目,使得许多开发人员都熟悉它。

由于禁用所有可选的构建时设置的设计目标,Buildroot 通常会使用开箱即用的配置生成尽可能最小的镜像。一般来说,构建时间和构建主机资源的规模更小。

缺点:

关注简单性和最小化启用的构建方式意味着您可能需要执行大量的自定义来为应用程序配置 Buildroot 构建。此外,所有配置选项都存储在单个文件中,这意味着如果您有多个硬件平台,则需要为每个平台进行每个定制更改。

对系统配置文件的任何更改都需要全部重新构建所有软件包。与 Yocto 相比,这个问题通过最小的镜像大小和构建时间得到了一定的解决,但在你调整配置时可能会导致构建时间过长。

中间软件包状态缓存默认情况下未启用,并且不像 Yocto 实施那么彻底。这意味着,虽然第一次构建可能比等效的 Yocto 构建短,但后续构建可能需要重建许多组件。

个人感想:

我在使用buildroot之前,我在学习嵌入式Linux是没有通过什么构建方法的,只是裸露的uboot,kernel,根文件系统。每一个都要自己去编译,创建。Buildroot只需要执行一个配置脚本,一条命令所有都构建好。这是我第一次使用构建工具时比较吸引我的。它比Yocto编译速度快很多。学习难度大大减小。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档