成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

ZLG嵌入式筆記(連載29) | Linux固件燒寫中的陷阱:文件系統(tǒng)異步寫入引發(fā)的問題

03/09 09:55
934
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

在工業(yè)生產(chǎn)中,固件燒寫是確保產(chǎn)品正常運行的關鍵環(huán)節(jié)。本文通過一個實際案例,揭示了Linux系統(tǒng)下因文件寫入異步性導致的固件燒寫不完全問題。

客戶案例

客戶產(chǎn)線上批量生產(chǎn)時,用SD卡進行固件燒寫,燒寫完成后蜂鳴器提示,產(chǎn)線工人聽到蜂鳴器鳴叫后就直接斷電重啟,進入測試環(huán)節(jié),結(jié)果在測試中發(fā)現(xiàn)有部分產(chǎn)品啟動就出現(xiàn)異常??蛻粲媒鈮悍绞綗龑懴到y(tǒng)固件,解壓命令執(zhí)行完后,再運行一個二進制可執(zhí)行程序,然后鳴叫蜂鳴器。乍一看邏輯非常正確,沒有任何問題。

可問題卻較高概率出現(xiàn),問題出在哪里呢?

后來經(jīng)過反復排查,發(fā)現(xiàn)客戶解壓腳本里的可執(zhí)行程序里面還有二次解壓操作,而且用system()調(diào)用了Linux的Shell命令。

System()調(diào)用Shell命令會生成一個新的子進程,這樣蜂鳴器鳴叫和二次解壓分別在不同進程中,兩者沒有同步,解壓完成和蜂鳴器鳴叫沒有必然的先后順序。按照蜂鳴器鳴叫就斷電重啟,這樣就不可避免的出現(xiàn)了解壓尚未完成就被斷電的情況,從而引起文件燒寫不完全,系統(tǒng)啟動異常。下面圍繞該問題,對Linux文件系統(tǒng)寫文件操作進行一些說明。

原理說明

由于Linux系統(tǒng)存在頁高速緩存,對寫入的內(nèi)容起到了緩存作用,用戶的寫操作實際上會被延遲。當頁高速緩存中的數(shù)據(jù)比后臺存儲的數(shù)據(jù)新的時候,這些數(shù)據(jù)就被稱作臟數(shù)據(jù)。發(fā)生以下三種情況時,臟頁才會被寫回磁盤:

    當空閑內(nèi)存低于一個特定的閾值時,內(nèi)核必須將臟頁寫回磁盤以釋放內(nèi)存。當臟頁在內(nèi)存中駐留時間超過一個特定的閾值時,內(nèi)核必須將超時的臟頁寫回磁盤,以確保臟頁不會無限期地駐留在內(nèi)存中。當用戶進程調(diào)用 sync()?和 fsync()?系統(tǒng)調(diào)用時,內(nèi)核會按照要求執(zhí)行回寫操作。

應對方案

如果更新腳本在解壓命令后沒有sync指令,或者程序更新代碼在執(zhí)行解壓或者寫操作后沒有調(diào)用fsync()函數(shù)執(zhí)行寫操作,Linux系統(tǒng)就會按照默認機制來實現(xiàn)寫操作;如果沒有達到如上前2個條件,發(fā)生了斷電操作,則會導致寫入數(shù)據(jù)不完整。

在程序更新腳本里,解壓后必須執(zhí)行sync指令完成寫入同步,或者應用程序代碼在寫操作后調(diào)用fsync()函數(shù)完成寫同步操作,確保數(shù)據(jù)寫入存儲器

國產(chǎn)芯嵌入式高性能RISC-V核心板MR6450/6750
? 15路串口

? 4路CANFD

? 2路千兆

 

致遠電子

致遠電子

廣州致遠電子股份有限公司成立于2001年,注冊資金5000萬元,國家級高新技術認證企業(yè),廣州市高端工控測量儀器工程技術研究開發(fā)中心,Intel ECA全球合作伙伴和微軟嵌入式系統(tǒng)金牌合作伙伴。

廣州致遠電子股份有限公司成立于2001年,注冊資金5000萬元,國家級高新技術認證企業(yè),廣州市高端工控測量儀器工程技術研究開發(fā)中心,Intel ECA全球合作伙伴和微軟嵌入式系統(tǒng)金牌合作伙伴。收起

查看更多

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄
岳西县| 庆城县| 旌德县| 平昌县| 成都市| 枝江市| 宣武区| 河西区| 拉孜县| 来宾市| 黄冈市| 克什克腾旗| 镇江市| 突泉县| 怀仁县| 太仓市| 高雄县| 迁安市| 武平县| 布尔津县| 枣阳市| 百色市| 唐山市| 民乐县| 崇文区| 金阳县| 梅河口市| 苍溪县| 迁西县| 武夷山市| 米脂县| 高邑县| 棋牌| 岱山县| 慈利县| 贡觉县| 元朗区| 永仁县| 阿合奇县| 拜城县| 南开区|