为嵌入式Linux设备实现更新/升级系统

2023-12-20

我有一个在嵌入式 Linux 设备上运行的应用程序,并且时不时地对软件进行更改,有时还会对根文件系统甚至安装的内核进行更改。

在当前的更新系统中,只需删除旧应用程序目录的内容,然后将新文件复制到其上。当对根文件系统进行更改时,新文件将作为更新的一部分提供,并简单地复制到旧文件上。

现在,当前的方法存在几个问题,我正在寻找改善这种情况的方法:

  • 用于创建文件系统映像的目标的根文件系统没有版本控制(我认为我们甚至没有原始的 rootfs)。
  • 进入更新的 rootfs 文件是手动选择的(而不是 diff)
  • 更新不断增长,这就变成了皮塔饼。现在更新/升级之间存在分歧,其中升级包含更大的 rootfs 更改。
  • 我的印象是,更新中的一致性检查如果真的实施的话,也是相当脆弱的。

要求是:

  • 应用程序更新包不宜太大,并且还必须能够在发生修改的情况下更改根文件系统。
  • 升级可能会更大,并且只包含进入根文件系统的内容(例如新库、内核等)。更新可能需要安装升级。
    升级是否可以包含整个根文件系统并简单地执行dd在目标的闪存驱动器上?
  • 创建更新/升级包应尽可能自动进行。

我绝对需要某种方法来对根文件系统进行版本控制。这必须以某种方式完成,我可以计算某种diff其中可用于更新目标设备的 rootfs。

我已经研究过 Subversion,因为我们将其用于源代码,但这对于 Linux 根文件系统(文件权限、特殊文件等)不合适。

我现在创建了一些 shell 脚本,可以给我类似的东西svn diff但我真的很想知道是否已经存在一个有效且经过测试的解决方案。

使用这样的diff我想升级将简单地成为一个包含基于已知根文件系统状态的增量更新的包。

您对此有何想法和想法?您将如何实施这样的系统?我更喜欢一个可以在短时间内实施的简单解决方案。


我相信您对这个问题的看法是错误的 - 任何非原子更新(例如 dd 文件系统映像、替换目录中的文件)都会被设计破坏 - 如果在更新过程中断电,则系统是一个对于砖块和嵌入式系统,电源可能会在升级过程中断电。

我写了一篇关于如何在嵌入式 Linux 系统上正确进行升级/更新的白皮书 [1]。它在 OLS 上发表。您可以在这里找到该论文:https://www.kernel.org/doc/ols/2005/ols2005v1-pages-21-36.pdf https://www.kernel.org/doc/ols/2005/ols2005v1-pages-21-36.pdf

[1] 本-尤瑟夫,吉拉德。 “构建 Murphy 兼容的嵌入式 Linux 系统。”Linux研讨会. 2005.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为嵌入式Linux设备实现更新/升级系统 的相关文章

  • 是否可以为我的 Linux 函数复制命令的制表符补全?

    假设我有一个名为的 bash shell 函数magic 我想定义一个制表符补全功能 magic这将允许magic搭载任何给定命令的选项卡完成功能 如果可用 换句话说 我想要magic能够做这样的事情 magic git
  • 超立方体错误。非法的最小或最大规格

    尝试从这里运行示例代码http tess4j sourceforge net codesample html http tess4j sourceforge net codesample html我收到一条错误消息 Error Illega
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 导入错误:没有名为“tensorrt”的模块

    我使用 Debian 安装在我的虚拟机上安装了 TensorRT 如果我运行 dpkg l grep TensorRT 我会得到预期的结果 ii graphsurgeon tf 5 0 2 1 cuda10 0 amd64 GraphSur
  • 将任何当前目录“./”添加到Linux中的搜索路径[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将任何当前目录 添加到 Linux 中可执行文件的搜索路径中 我知道这是一个旧答案 但如果其他人像我一样通过谷歌偶然发现这个问题 这里
  • Linux 内核中是否使用了扩展指令集(SSE、MMX)?

    好吧 它们带来 至少应该带来 性能的巨大提升 不是吗 所以 我还没有看到任何 Linux 内核源代码 但很想问 它们是否以某种方式被使用 在这种情况下 对于没有此类指令的系统 必须有一些特殊的 代码上限 SSE 和 MMX 指令集在音频 视
  • “设置:非法选项 -”在一台主机上,但在另一台主机上则不然

    我在我的一台 ubuntu 虚拟机中编写了一个 sh 脚本 该脚本工作正常 但是当我尝试在其他虚拟机中运行它时 它不起作用 两个虚拟机应该相同 和bash version两个虚拟机均回复 GNU bash version 4 3 11 1
  • 如何删除名称最大的目录?

    我有一个包含子目录的目录 其中一些名称是数字 不看的话 我不知道数字是多少 如何删除名称最大的子目录 我认为解决方案可能会将子目录按相反顺序排序 并选择以数字开头的第一个子目录 但我不知道该怎么做 感谢您的帮助 cd yourdir go
  • Laravel:调用未定义的函数 Symfony\Component\Console\mb_convert_variables()?

    我正在运行普通 Amazon EC2 服务器 我自己安装了 PHP 5 5 21 我的 Web 应用程序是基于 Laravel 构建的 几个星期以来 一切都进展顺利 然而 现在 当运行 Laravel 命令来更新数据库架构时 php 工匠迁
  • 在 bash 脚本中设置变量[重复]

    这个问题在这里已经有答案了 test sh 包含 A 1 B 2 我将 test sh 设置为 chmod 777 我用两个参数启动脚本 test sh first last 然后我通过输入以下内容对其进行了测试 echo FirstVar
  • 从多个进程附加到单个文件的“线程安全”?

    假设我有 X 个进程打开文件 Y 进行追加 每个进程一次只写入一行 带有 n 真正的日志条目 文件 Y 中的每一行是否保证不会错误地交错 更新 本地附加文件系统 问题取决于正在进行什么类型的写入 如果您使用带缓冲的标准 I O 这通常是大多
  • 在 Linux 内核中使用断言

    我有一个问题assert 在Linux中 我可以在内核中使用它吗 如果不是 例如 如果我不想输入 NULL 指针 您通常会使用什么技术 对应的内核宏是BUG ON and WARN ON 前者适用于当您想让内核恐慌并使系统崩溃 即不可恢复的
  • 是什么决定了 getdents 返回目录条目的顺序?

    背景是我有一个现有的应用程序 其中列出了目录条目 strace 显示它只是调用 getdents 并按返回的顺序列出它们 我希望它们以与不带参数调用 ls 相同的顺序显示 是否可以通过某种方式更新目录数据来实现此目的 FS 是 ext4 如
  • 如何将域名附加到我的服务器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个小问题 查看了这里和其他论坛 但找不到解决方案 我的网站位于 my domain com 网站位于共享主机上 在我的域名注册中 我添加了当我为
  • __NR_gettid 和 SYS_gettid 之间的区别

    我只是在寻找在 Linux 中获取唯一线程 ID 的方法 我发现的方法是将两个参数中的任何一个作为参数进行系统调用 NR gettid OR SYS gettid 有人能解释一下它们之间有何不同吗 Nothing in
  • 无法通过 SSH 连接到 Google 计算引擎

    我在一个新项目中设置了一个新的 Google Compute Engine 实例 我启动实例并使用命令gcloud init连接到我的项目 然后我使用命令sudo gcloud compute ssh instance 1 它引导我完成 S
  • 是否可以在 python shebang 中包含命令行选项?

    我的 python 脚本顶部有规范的 shebang usr bin env python 但是 当我运行脚本时 我仍然经常希望将未缓冲的输出导出到日志文件 因此我最终调用 python u myscript py gt myscript
  • sed 将带空格的行插入到特定行

    我在开头有一行空格 例如 Hello world 我想将此行插入到文件中的特定行 例如 将 hello world 插入下一个文件 hello world result hello hello world world 我正在使用这个 sed
  • linux新手关于嵌入式linux设备驱动的问题

    最近在研究linux驱动 正如我读过的那些文章所说 设备驱动程序模块很可能会根据内核的需要自动加载 因此我想知道内核如何确定为特定设备 声卡 I2C spi 设备 等 我也无法彻底想象内核如何在启动时检测每个硬件设备 与嵌入式linux相关
  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414

随机推荐

  • PyCharm,某些包无法导入Pandas,ImportError:C扩展:StringIO未构建

    我遇到一个非常奇怪的错误并且无法解决它 我有一个具有以下目录结构的项目 ptouch ptouch init py ptouch py io py tests init py tests py 我正在使用 PyCharm 社区版和 Anac
  • 文档字符串中的重复内容

    处理文档字符串中重复内容的好方法是什么 我有许多采用 标准 参数的函数 这些参数必须在文档字符串中进行解释 但是最好只编写文档字符串的相关部分一次 因为这会更容易维护和更新 我天真地尝试了以下方法 arg a a a very common
  • OData v4.0 聚合查询(聚合查询语法)

    例如 我有一个对象模型 Product int ProductId string Name List
  • 如何在MySql SELECT语句中正确使用CAST函数?

    我正在将 MSSQL DB 转换为 MySQL DB 并且有一个存储过程使用强制转换函数从 datetime 数据类型转换为 varchar 数据类型 无论这在 php mysql 中是否重要 因为 php 不是强类型的 我不知道这是否重要
  • 使用 python 解析 Outlook .msg 文件

    环顾四周 没有找到满意的答案 有谁知道如何使用 Python 解析 Outlook 中的 msg 文件 我尝试使用 mimetools 和 email parser 但没有成功 帮助将不胜感激 这对我有用 import win32com c
  • 使用Python控制屏幕

    有没有办法用 python 控制屏幕 显示器 例如将其关闭然后再次打开 类似于笔记本电脑键盘上的快捷按钮 谢谢你 大多数现代笔记本电脑的按钮和显示器之间都有物理连接 例如 我的戴尔 Precision i 甚至可以在 BIOS 启动之前启动
  • Apache 在 Glassfish v3 前面使用 mod_proxy_ajp 使用 SSL

    我希望这里有一些裂缝可以轻松解决我在几个论坛中搜索后遇到的问题 我需要将 Glassfish v3 应用程序服务器放在 Apache 2 2 x Web 服务器后面 作为我的 Web 托管商提供的一些部分 例如 Webmail 正在网络服务
  • python多处理映射对最后一个进程的错误处理

    有一种奇怪的行为map当使用Python的时候multiprocessing Pool 在下面的示例中 4 个处理器的池将处理 28 个任务 这应该需要七次通过 每次需要 4 秒 然而 需要8次通过 在前六次中 所有处理器都处于工作状态 在
  • 打印带有即时生成的 PDF 的 Iframe IE 11

    我想打印在 Iframe 中动态生成的 pdf 但无法打印此 pdf 文件 这就是我现在所拥有的 我做错了什么吗 在 Google Chrome 上工作正常 但在 IE 11 上不行 请帮助我完成这项工作 提前致谢 这是 HTML 标记 d
  • hdpi ldpi mdpi 图标/菜单分辨率

    我想为我的应用程序设置一个图标 但不知道放入三个文件夹 hdpi ldpi mdpi 的确切分辨率 另外我想为我的菜单选项设置图标 但不知道要应用什么分辨率 感谢您的帮助 启动器图标 48 48 mdpi 72 72 hdpi 96 96
  • @Autowired 不应该在没有 @RunWith(SpringRunner.class) 的情况下工作,但确实如此

    这是 java spring 数据存储库层的单元测试类 我有一个 spring 数据存储库层 其中使用注释 Autowired 注入 TestEntityManager 类型对象 属于 spring 数据包 自动装配工作无需添加 RunWi
  • 使用 Excel 中的排名函数

    很抱歉 如果这个问题已经得到解答 我觉得可能有 但我正在努力寻找一个可以帮助我走向成功的答案 我有一个计时赛结果的基本电子表格 该电子表格适用于男性和女性 基本上 所有参赛者中以 30 秒为间隔的最快时间都会获得积分 这很好 Cloumn
  • 检查对象是否与给定列表中的任何类型匹配的替代方法

    if this Page is ArticlePage this Page is ArticleListPage Do something fantastic 上面的代码有效 但考虑到我可能想比较许多不同的类this Page到 我想将类存
  • 如何使用 __getattr__ 来制作可供选择的课程

    如何修改下面的类以使其可供选择 这个问题 如何使 getattr 可以正确选择的类 https stackoverflow com questions 42272335 how to make a class which has getat
  • lambda 演算的汇编/机器指令示例

    我正在学习一些 lambda 演算 我很好奇的一件事是如何在指令中实际应用完全抽象的函数 让我们看下面的例子 我允许小的自然数 作为给定 和TRUE FALSE定义 例如 让我们使用以下代码 其计算结果应为5 using python fo
  • Keras 模型转换为 Tensorflow-js 模型后未提供相同的结果

    Keras 模型在 python 中的性能符合预期 但转换模型后 相同数据的结果不同 我尝试更新 keras 和 tensorflow js 版本 但仍然存在同样的问题 用于测试的Python代码 import keras import c
  • 使用 JS 在混合应用程序中禁用文本选择和复制粘贴

    我正在尝试使用以下代码在phonegap应用程序中禁用文本选择和复制粘贴 CSS webkit user select none JavaScript body on cut copy paste function e e preventD
  • 将 PHP-FPM 与 Apache 结合使用时的自定义 404 消息

    我将 Apache Debian 上为 2 2 22 配置为通过 FastCGI 处理 PHP 文件 SetHandler 应用程序 x httpd php 文件匹配 gt 操作 application x httpd php fcgi b
  • 如何将 Windows 应用程序与特定文件类型关联,但与其他应用程序共享该关联?

    如果我创建一个新应用程序 并与特定计算机上的 xml 文件扩展名关联 当有人双击 xml 文件时 它将启动我的应用程序并将该文件作为参数传递 但 Windows 似乎知道哪些其他文件能够处理该文件类型 这是如何设置的 此外 当我将 Micr
  • 为嵌入式Linux设备实现更新/升级系统

    我有一个在嵌入式 Linux 设备上运行的应用程序 并且时不时地对软件进行更改 有时还会对根文件系统甚至安装的内核进行更改 在当前的更新系统中 只需删除旧应用程序目录的内容 然后将新文件复制到其上 当对根文件系统进行更改时 新文件将作为更新