0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式Linux文件系统管理的工具选择

星星科技指导员 来源:嵌入式计算设计 作者:Troy Kitch,Joe Gree 2022-06-22 11:15 次阅读

随着预算的减少、产品生命周期的缩短以及更多的功能被集成到电子设备中,开发人员感受到了交付高级软件的压力。虽然 Linux 和开源通常是嵌入式开发的正确选择,但它们不能发挥神奇的作用。一些成本仍然与选择开源开发工具相关。在决定使用哪些工具时,开发人员必须考虑他们是否将时间花在真正具有创新性和差异化的东西上,还是花在诸如集成和支持之类的繁忙工作上。

工具选择可以帮助或阻碍开发人员获得项目控制权的努力。真正有价值的工具的试金石是它们是否可以帮助开发人员在产品的短暂生命周期内启用正确的功能。

遭受这种失控的嵌入式 Linux 开发的一个领域是构建 Linux 所依赖的通常复杂的文件系统的过程。平台开发人员需要集成和安装数十个甚至数百个独立的软件组件,但手动创建目标文件系统既耗时、困难又复杂。如果没有合适的工具,这个过程很容易出错。这些时间和精力可以更好地用于开发使产品与竞争对手区分开来的功能。Linux 文件系统配置是最困难且在某种意义上回报最少的活动。

传统Linux开发

Linux 的第一个版本是在目标位于主机本身或类似机器上的环境中开发的。正因为如此,伴随的工具传统上是针对主机开发环境量身定制的。从根本上说,开发人员更容易为与他们正在开发的机器类似的机器进行开发。随着目标环境离宿主环境越来越远,开发者面临的挑战也越来越大。

为主机或类似环境进行开发不需要太多额外的工作。事实上,一些嵌入式系统与 PC 非常相似,开发人员可以运行他们选择的实际 Linux 发行版,例如 SuSe 或 Fedora。但是,针对当今市场上的一种不同处理器架构进行开发可能是一项挑战。

嵌入式Linux开发和交叉开发

当资源受到限制并且目标处理器正在运行许多可用的非 x86 处理器之一时,环境会变得更加复杂。在这种环境中,在具有许多资源的主机上进行开发,然后交叉编译为特定处理器架构开发二进制文件会更有效率。

由于其模块化设计,Linux 可以在小型设备上高效运行。开发人员可以选择他们想要实现的功能并删除他们不需要的功能。完成此任务并微调特定设备的功能和用户界面需要真正的技巧。

但仅仅因为它是模块化的,并不意味着有一条明确的成功之路。开发人员必须考虑两种方法:遵循基于包的安装,利用大多数可用的 Linux 发行版,或者将包集成到构建系统环境中。构建系统的一个问题是它与 Linux 的分发方式不一致,通常是像 .deb 或 .rpm 这样的包。另一个挑战是任何特定构建系统所需的学习曲线。以下讨论将介绍包管理器并解释它们如何帮助或损害开发人员构建嵌入式 Linux 文件系统的能力。

选择嵌入式 Linux 文件系统管理器

Debian GNU/Linux 发行版的创始人 Ian Murdock 将包管理描述为“Linux 为行业带来的最大进步。”他认为包管理模糊了操作系统 (OS) 和应用程序之间的界限,使其“更容易”推动新的创新,“Ķ进入市场”,“Ķ和发展操作系统。”,Äù

可用于构建嵌入式 Linux 文件系统的工具在跨平台和资源受限的环境中变得更加有用。开发人员在选择特定工具或集成开发环境 (IDE) 之前提出几个问题非常重要。考虑一下:您从哪里获得 Linux 源代码,以及它是如何打包交付的?您将文件系统用于什么目的,如何针对特定目标对其进行优化?开发人员选择的软件包安装程序可以在优化的文件系统和嵌入式设备的糟糕借口之间产生差异。

管理嵌入式 Linux 文件系统的常用方法是使用 RPM 或 dpkg 之类的包管理器来安装和删除非 root 目录,fakeroot 用于偷偷摸摸地执行不需要 root 权限的 chroot,或者使用虚拟目标进行开发,例如Linux QEMU 处理器仿真器或 Virtutech,Äôs Simics 虚拟平台。这些不同的选项中的每一个都有优点和缺点,可以通过替代解决方案来弥补:平台图像构建器。

包管理器

文件系统管理的卫冕冠军是 RPM 包管理器。RPM 很有用,因为它是标准的并且在大多数 Linux 系统上都可用。与其他同类产品一样,RPM 具有安装到非系统根目录的内置功能,这是有利的,因为聪明的开发人员不希望意外破坏其主机文件系统的能力。但是 RPM 并没有解决包依赖问题;它只是确定是否满足依赖关系。它要求开发人员已经知道依赖关系,因此不会去检查各种包以确定需要解析哪些包来构建文件系统。

要解决依赖关系,开发人员必须添加另一个工具,例如 Yellowdog Updater (yum) 或 Advanced Packaging Tool (apt)。作为一个 C++ 函数库,创建 apt 是为了在升级期间处理依赖关系和处理配置文件时有效地安装包。但是,apt 和 yum 仅限于命令行。如果开发人员不熟悉 Linux 或这些工具,他们可能会面临相对陡峭的学习曲线。此外,所有信息都是文本的,并且相对于图形文件系统管理器通常难以导航。

伪装根

Linux 可以适当地设置权限,以保护系统免受与修改或删除文件相关的恶意意图、无知或健忘。Linux 有一个包含所有子目录的基本根目录。这个基本根,通常称为 ‚Äú/‚Äù(发音为斜线),受到 Linux 系统用户的保护。管理员限制对“Äú/”Äù 的访问,并在其下为每个用户提供可修改的主子目录。这使用户能够访问系统并以适当的权限和能力完成他们的任务。

但是,某些文件系统创建操作需要 root 权限。如果没有 root 权限,开发人员无法创建其他用户拥有的文件、创建设备节点或提交更改 root 操作。这些限制限制了配置文件系统的能力。

一种选择是使用像 fakeroot 这样的工具,它可以在用户主机系统的目录中创建一个虚拟的“Äú/”文件系统树。它通过重新定义主机系统库中的标准函数来提供一个假的“Äú/”Äù 环境。通过这种方式,它更改了引用文件的实用程序并捕获有关文件的特权信息,而无需 root 特权来创建它们。此外,它可以与标准实用程序一起使用,而无需特殊工具。与 RPM 一样,fakeroot 不解决依赖关系,将这项艰巨的任务留给了开发人员。

在这里,RPM 和 fakeroot 都面临一个额外的挑战:开发人员可能希望在目标目录中执行代码,如果该代码用于与主机不同的架构,它根本无法运行。

虚拟开发

构建文件系统的第三种替代方法是使用虚拟环境,如 QEMU、Simics 或 VMware Workstation。这解决了包管理器和 fakeroot 工具都面临的挑战,即无法在与目标架构不同的主机上运行代码。虚拟环境还提供了使用主机上所有可用资源(例如内存、存储和快速处理器)为虚拟目标进行开发的能力,享受 PC 上自托管开发的许多优势。

使用虚拟环境通常比在目标本身上进行开发要快,但它会增加复杂性,相对于交叉开发降低处理器能力。

平台镜像生成器

如本文开头所述,平台开发人员需要集成和安装数十个(如果不是数百个)单独的软件组件,但手动创建目标文件系统既耗时、困难又复杂。创建文件系统后,必须将其转换为目标图像(参见侧栏)。更高级的工具可以简化组装、调整和创建文件系统映像的任务。

平台映像生成器通过提供系统的可视化地图来实现这一点,用于选择 Linux 目标包、集成自定义包和内核、动态确定文件系统大小、自动解决依赖关系和冲突,以及生成多种标准格式的文件系统。

平台图像构建器对于从最终图像中修剪组件很有用,无论它们是单个文件还是整个层次结构(例如,文档和示例配置文件)。能够将包明显地分类为文档、字体、图形或解释器等组,可以让开发人员快速访问和更快地消除不必要的包(参见图 1)。

图1

pYYBAGKyipmAXU-kAAFxhaf3Qco893.png

此功能还使用户能够通过树层次结构对文件和目录进行下钻和排序。要删除文件,只需取消选中相邻的框(图 2)。除了删除单个文件外,开发人员还可以选择将整个所需的支持包标记为“äúphantom”。Äù 这样的包是构建其他包所必需的,但不是最终构建所必需的,因此在运行时不包括在内。

图 2

pYYBAGKyiqCASMFDAAGZYcgww4M511.png

在设置平台映像项目 (.pib) 时,开发人员可以包含和集成自定义包和内核。这种灵活性提供了竞争差异化和控制嵌入式开发人员在如此快节奏的市场中的需求。

平台映像生成器提供了许多影响映像文件大小的选项。它通过以下方式做到这一点:

优化库占用空间并减小一些共享库的大小

预链接可执行文件,加快启动速度

从最终的二进制文件中删除调试符号,使它们更小更快

这些措施不仅是为了减小图像的大小,而且是为了提高性能。

平台映像生成器使用 RPM 包中包含的依赖信息来根据需要自动包含支持包(图 3)。这与 Linux 通常的分发方式是一致的,并且消除了手动计算依赖项的平凡任务。但是,在进行包选择时,可以选择相互冲突的包。由于这会导致错误并阻止项目成功构建,因此开发人员必须在创建映像之前解决冲突。平台映像生成器通过将所有冲突标记和列出为错误来提供帮助,从而可以轻松查看和更改它们,直到所有冲突都被消除。

图 3

poYBAGKyiqiAciu0AAFq7HxhBR8629.png

最后,借助平台镜像生成器等文件系统管理工具,平台开发人员可以生成常用的文件格式,包括 ext2、JFFS2、cpio、CRAMFS 和 ext3。根据格式,可以使用不同的选项来配置映像和设置挂载点。

与前面提到的为嵌入式 Linux 开发创建和管理文件系统的方法相比,平台映像生成器具有图形用户界面,不需要模拟环境,因此不会使用与虚拟机相关的资源。平台映像生成器将文件系统转换为映像,没有复杂性和较慢的处理能力,为开发人员提供嵌入式 Linux 交叉开发项目所需的生产力。

工具试金石

嵌入式 Linux 开发人员可以使用平台映像生成器等工具获得对构建复杂文件系统的更多控制,这使得组装、调整和创建文件系统映像更容易完成。这使开发人员能够花时间开发使产品与竞争对手区分开来的功能。请记住,真正有价值的工具的试金石是它们是否可以帮助开发人员在产品的短生命周期内启用更多正确的功能。

作者:Troy Kitch,Joe Green

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18328

    浏览量

    222505
  • 嵌入式
    +关注

    关注

    4986

    文章

    18319

    浏览量

    289164
  • Linux
    +关注

    关注

    87

    文章

    10997

    浏览量

    206797
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux文件系统管理

      嵌入式 Linux 开发人员可以使用平台映像生成器等工具获得对构建复杂文件系统的更多控制,这使得组装、调整和创建文件系统映像更容易完成。
    发表于 08-12 09:23 601次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>文件系统管理</b>

    嵌入式Linux入门(二、Linux文件系统文件类型及权限管理

    嵌入式 Linux入 门第二课, linux 文件系统文件类型及权限管理。 ...... 矜
    的头像 发表于 06-20 11:44 1610次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>入门(二、<b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>、<b class='flag-5'>文件</b>类型及权限<b class='flag-5'>管理</b>)

    嵌入式文件系统构建

    文件系统,因此非常适合嵌入式系统。要注意的是,不同的文件系统都有相应的制作工具,但是其主要的原理和制作方法是类似的。 在
    发表于 09-02 14:25

    Linux文件系统管理

    Linux文件系统管理作者:吴新武,华清远见嵌入式学院讲师。Unix业界有句话叫“一切皆文件”,Linux作为一个优秀的类Unix操作
    发表于 09-13 09:48

    基于嵌入式视频存储的专用文件系统该怎么设计?

    目前的硬盘录像机中,基于PC和采集卡的一般采用Windows系统文件系统则多采用NTFS或FAT32;而嵌入式硬盘录像机所采用的文件系统则与厂商
    发表于 11-06 08:17

    嵌入式Linux文件系统怎么制作?

    嵌入式Linux操作系统越中文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取
    发表于 04-06 07:39

    嵌入式文件系统概述

    嵌入式Linux系统移植-(Linux文件系统嵌入式文件系
    发表于 11-05 06:29

    嵌入式Linux文件系统概述

    。 从本质上而言,用户的一切工作就是对文件的操作。嵌入式Linux文件系统嵌入式文件系统的需求分
    发表于 12-16 06:37

    用Busybox制作嵌入式Linux文件系统

    文件系统Linux 的运行提供最基本的工具、库、脚本和一些特殊文件的支持Busybox 是制作嵌入式
    发表于 06-12 16:05 19次下载

    构造嵌入式Linux文件系统

    文件系统Linux 系统最基本的资源。本文介绍了一种嵌入式Linux 文件系统的构造过程,较为
    发表于 08-07 09:11 10次下载

    嵌入式Linux文件系统的研究与应用

    随着嵌入式系统的发展,使用Linux操作系统搭建的嵌入式平台得到了越来越广泛的应用。文件系统
    发表于 08-13 08:59 16次下载

    Linux系统管理命令

    Linux系统管理命令 Linux系统管理命令  wall命令  功能:这个命令的功能是对全部已登录的用户发送信息,用户可以先把要发送的信息写好存入一个
    发表于 01-18 12:47 764次阅读

    Linux系统管理技术手册—奈米斯

    本书为奈米斯所著的 Linux 系统管理技术手册第二版。共从二十四个章节讲述了Linux系统管理技术。适合Linux
    发表于 08-10 14:16 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>系统管理</b>技术手册—奈米斯

    Linux嵌入式文件系统如何构建

    Linux支持多种文件系统,同样,嵌入式Linux也支持多种文件系统。虽然在嵌入式
    发表于 06-18 09:23 883次阅读

    嵌入式Linux系统移植-(Linux文件系统

    嵌入式Linux系统移植-(Linux文件系统嵌入式文件系
    发表于 11-02 12:51 16次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>系统</b>移植-(<b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>)