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

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

3天内不再提示

Linux固件烧写中的陷阱:文件系统异步写入引发的问题

ZLG致远电子 ? 2025-03-07 11:34 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在工业生产中,固件烧写是确保产品正常运行的关键环节。本文通过一个实际案例,揭示了Linux系统下因文件写入异步性导致的固件烧写不完全问题。
14681a2c-fb05-11ef-9434-92fbcf53809c.jpg ?客户案例

客户产线上批量生产时,用SD卡进行固件烧写,烧写完成后蜂鸣器提示,产线工人听到蜂鸣器鸣叫后就直接断电重启,进入测试环节,结果在测试中发现有部分产品启动就出现异常。客户用解压方式烧写系统固件,解压命令执行完后,再运行一个二进制可执行程序,然后鸣叫蜂鸣器。乍一看逻辑非常正确,没有任何问题。可问题却较高概率出现,问题出在哪里呢?后来经过反复排查,发现客户解压脚本里的可执行程序里面还有二次解压操作,而且用system()调用了Linux的Shell命令。System()调用Shell命令会生成一个新的子进程,这样蜂鸣器鸣叫和二次解压分别在不同进程中,两者没有同步,解压完成和蜂鸣器鸣叫没有必然的先后顺序。按照蜂鸣器鸣叫就断电重启,这样就不可避免的出现了解压尚未完成就被断电的情况,从而引起文件烧写不完全,系统启动异常。下面围绕该问题,对Linux文件系统写文件操作进行一些说明。
14681a2c-fb05-11ef-9434-92fbcf53809c.jpg ?原理说明

由于Linux系统存在页高速缓存,对写入的内容起到了缓存作用,用户的写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据新的时候,这些数据就被称作脏数据。发生以下三种情况时,脏页才会被写回磁盘:

  1. 当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘以释放内存。
  2. 当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,以确保脏页不会无限期地驻留在内存中。
  3. 当用户进程调用 sync()和 fsync()系统调用时,内核会按照要求执行回写操作。


14681a2c-fb05-11ef-9434-92fbcf53809c.jpg ?应对方案

如果更新脚本在解压命令后没有sync指令,或者程序更新代码在执行解压或者写操作后没有调用fsync()函数执行写操作,Linux系统就会按照默认机制来实现写操作;如果没有达到如上前2个条件,发生了断电操作,则会导致写入数据不完整。

在程序更新脚本里,解压后必须执行sync指令完成写入同步,或者应用程序代码在写操作后调用fsync()函数完成写同步操作,确保数据写入存储器。

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

    关注

    87

    文章

    11522

    浏览量

    214309
  • 文件系统
    +关注

    关注

    0

    文章

    297

    浏览量

    20430
  • Shell
    +关注

    关注

    1

    文章

    372

    浏览量

    24272
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    DshanMCU-R128s2 固件

    编译系统源码后,打包后生成的系统文件称之为固件固件一般为.img格式。把固件下载到开发板或者产
    的头像 发表于 12-22 15:08 ?1685次阅读
    DshanMCU-R128s2 <b class='flag-5'>烧</b><b class='flag-5'>写</b><b class='flag-5'>固件</b>

    Linux文件系统课程

    本章学习目标理解什么是文件系统了解文件系统工作原理理解Fedora Core Linux文件系统的结构掌握Fedora Core Linux
    发表于 04-10 17:07 ?0次下载

    Linux文件系统异步I/O扩展

    本文中要介绍一个所谓的"Linux 文件系统的守护神",这是指一个能实时地观察 Linux 文件系统的变化情况的程序模块
    发表于 05-06 10:12 ?897次阅读

    Linux设备驱动开发详解》第5章、Linux文件系统与设备文件系统

    Linux设备驱动开发详解》第5章、Linux文件系统与设备文件系统
    发表于 10-27 14:13 ?0次下载
    《<b class='flag-5'>Linux</b>设备驱动开发详解》第5章、<b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>与设备<b class='flag-5'>文件系统</b>

    可以了解的Linux 文件系统结构

    Linux文件是什么?它的文件系统又是什么?那些配置文件又在哪里?我下载好的程序保存在哪里了?在 L
    发表于 04-27 14:06 ?851次阅读
    可以了解的<b class='flag-5'>Linux</b> <b class='flag-5'>文件系统</b>结构

    linux文件系统的虚拟文件系统设计详解

    Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux
    发表于 04-02 14:37 ?2085次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>文件系统</b><b class='flag-5'>中</b>的虚拟<b class='flag-5'>文件系统</b>设计详解

    Linux系统日志文件的JFS文件系统

    嵌入式linux中文站向大家介绍一下JFS文件系统Linux系统日志文件的JFS
    发表于 05-05 14:10 ?5388次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>系统</b>日志<b class='flag-5'>文件</b><b class='flag-5'>中</b>的JFS<b class='flag-5'>文件系统</b>

    Linux文件系统解析

    Linux ,最直观、最可见的部分就是 文件系统(file system)。下面我们就来一起探讨一下关于 Linux 中国的文件系统
    的头像 发表于 09-16 11:29 ?2810次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>解析

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

    嵌入式Linux系统移植-(Linux文件系统)嵌入式文件系统概述·文件是有组织、有次序地存储在
    发表于 11-02 12:51 ?16次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>系统</b>移植-(<b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>)

    Core 3328 JD4固件Linux文件系统镜像

    电子发烧友网站提供《Core 3328 JD4固件Linux文件系统镜像.txt》资料免费下载
    发表于 09-13 10:30 ?4次下载
    Core 3328 JD4<b class='flag-5'>固件</b><b class='flag-5'>Linux</b>根<b class='flag-5'>文件系统</b>镜像

    Core 1808 JD4固件Linux文件系统(Ubuntu18.04)

    电子发烧友网站提供《Core 1808 JD4固件Linux文件系统(Ubuntu18.04).txt》资料免费下载
    发表于 09-20 17:05 ?0次下载
    Core 1808 JD4<b class='flag-5'>固件</b><b class='flag-5'>Linux</b>根<b class='flag-5'>文件系统</b>(Ubuntu18.04)

    浅谈Linux的proc文件系统

    大家好,我是ST,今天主要和大家聊一聊,Linux的proc文件系统
    发表于 10-10 14:59 ?2135次阅读

    适用于Linux的最佳通用文件系统 Linux文件系统的安装

    为您的计算机选择正确的文件系统可能是一个困难的过程。您可能会想知道:为什么文件系统很重要?有没有适用于安装 Linux 的特定文件系统? 事实证明,有两种
    发表于 08-03 10:22 ?514次阅读
    适用于<b class='flag-5'>Linux</b>的最佳通用<b class='flag-5'>文件系统</b> <b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>的安装

    Linux文件系统特点

    Linux文件系统特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。 文件系统
    的头像 发表于 11-09 14:48 ?1732次阅读
    <b class='flag-5'>Linux</b>的<b class='flag-5'>文件系统</b>特点

    Linux文件系统的挂载过程

    Linux文件系统(rootfs)是Linux系统中所有其他文件系统和目录的起点,它是内核启动时挂载的第一个
    的头像 发表于 10-05 16:50 ?1009次阅读