999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux的嵌入式設備多狀態重啟記錄系統設計與實現

2019-05-24 14:17:58王晨光孫文勝
軟件導刊 2019年5期

王晨光 孫文勝

摘 要:近年來,隨著嵌入式技術的迅猛發展,嵌入式產品已滲透到生產與生活各個方面,嵌入式設備運行穩定性則顯得愈發重要。針對嵌入式設備運行異常現場難復現的問題,設計一種基于Linux的嵌入式設備多狀態重啟記錄系統,可為設備問題定位提供重要的系統參考數據,實現嵌入式設備多狀態重啟數據記錄。系統選擇EEPROM掉電記憶存儲芯片,結合嵌入式Linux系統中的看門狗驅動、EEPROM驅動和reboot命令,完成嵌入式設備斷電重啟、看門狗重啟與reboot命令正常重啟3種重啟狀態統計記錄。該系統為維護設備的穩定運行提供了可靠方法,具有較高的實際應用價值。

關鍵詞:Linux;嵌入式設備;reboot;EEPROM;看門狗中斷;重啟記錄

DOI:10. 11907/rjdk. 182250

中圖分類號:TP319 文獻標識碼:A 文章編號:1672-7800(2019)005-0125-05

Abstract: With the rapid development of embedded technology in recent years, embedded device products have penetrated into every corner of life and production, and the stability of embedded device operation has become increasingly important. For the abnormal operation of the embedded device and difficulty to reproduce the scene, this paper proposes a multi-state restart recording system for embedded devices based on Linux to provide important system reference data for device problem location, enabling multiple times of multi-state restart data logging of embedded devices. This system selects the EEPROM power-down memory storage chip, combined with the watchdog driver, EEPROM driver and reboot command in the embedded Linux system. It completes the record of three reboot states for the embedded device power-off reboot, watchdog reboot, and reboot command normal reboot. This system provides a reliable method for stable operation and maintenance of the equipment, and has a high practical application value.

Key Words: Linux;embedded devices;reboot; EEPROM;watchdog interrupt system; reboot record

0 引言

近年來,在計算機、互聯網和通信技術高速發展的同時,嵌入式系統開發技術也發展迅速,且應用范圍急劇擴大[1]。然而,在嵌入式設備中軟件出現故障的概率遠高于硬件,成為影響系統正常運行的主要因素,主要原因是軟件故障環境很難再現。軟件運行狀態與很多因素有關,如人為操作因素、環境因素等。由于開發環境與場外應用環境存在差異,研發人員必須親赴現場進行故障定位,從而增加了額外投入成本。

在國外,最早由Munson等[2]提出軟件黑匣子技術,其構建方法為軟件故障定位提供了新途徑,并且該技術在業界已有較多應用。軟件黑匣子是通過對目標軟件的改造,將黑匣子植入其中,在軟件運行過程中將模塊信息記錄到內部存儲器后,再慢慢轉移到外部存儲器件中。但其會對系統模塊造成一定影響,當某部分出現問題時,將導致一些重要數據丟失。一旦發生單板重啟,黑匣子則無法還原事故現場,達不到問題定位目的。為了解決該問題,業界提出采用系統內存空間或非易失性RAM作為黑匣子記錄載體。該方法雖然介紹在一定程度上可以記錄非斷電狀態下的異常數據信息,但無法統計與記錄設備掉電情況,且在無人監管情況下,無法記錄設備重啟的歷史信息數據。

實驗室中的嵌入式產品在測試完成后進行實際應用時,仍會出現很多故障及不穩定現象[3]。許多文獻從不同角度研究嵌入式系統的穩定性問題,并提出很多解決辦法。但嵌入式系統是一個十分復雜的系統,只有從系統硬件、軟件以及結構設計等方面全面考慮,對各種抗干擾技術進行綜合應用,才能有效提高系統抗干擾性能[4-5]。

維護嵌入式產品運行穩定性是十分必要的,然而,當前加載有Linux系統的嵌入式設備產品(例如網絡攝像機IPC)在系統運行層面僅作了看門狗保護,設備一旦出現程序運行異常,則會觸發看門狗重啟整個系統,以防止設備卡死[6]。這是規避嵌入式設備運行不穩定情況的一種常用方法,但對于后期問題定位與維護沒有任何幫助。嵌入式設備重啟方式可分為3類:斷電重啟,系統電源關閉后重新上電啟動;非斷電軟重啟,在系統電源工作正常的情況下,通過系統軟件主動重啟設備;非斷電看門狗觸發重啟,因嵌入式設備軟件運行異常導致看門狗中斷重啟整個系統。以某種機制記錄嵌入式設備上一次重啟狀態類型,可為設備問題定位提供重要的系統參考數據。針對嵌入式設備系統異常重啟的情況,本文參考黑匣子技術,使用掉電存儲芯片作為信息記錄載體,對其進行精簡改進后,提出基于Linux的嵌入式設備多狀態重啟記錄系統。

1 設備重啟記錄系統設計

1.1 工作原理

嵌入式設備關機重啟原因大致可分為3類:設備斷電后再次上電重啟、設備操作人員主動重啟、設備軟件運行異常觸發看門狗重啟。在嵌入式設備工作過程中,通過設備重啟記錄系統將每次設備重啟信息記錄入EEPROM存儲芯片中,可以記錄以上3類設備重啟狀態、重啟時間及系統內運行業務參數信息等[7-8]。用戶可通過Linux系統的proc接口快捷查詢與管理重啟記錄數據,以便于進行設備穩定性分析及問題定位。該重啟狀態記錄系統涉及Linux系統與嵌入式平臺多個功能模塊,可結合相應模塊完成對嵌入式設備多狀態重啟信息記錄。

1.2 系統框圖設計

嵌入式設備重啟狀態記錄系統應具備以下特點:

(1)嵌入式硬件平臺。該嵌入式設備可移植并運行Linux系統,為用戶提供Linux終端管理環境,用戶可通過終端命令管理設備硬件資源。

(2)EEPROM存儲芯片。EEPROM為帶電可擦除可編程只讀存儲器,是一種掉電后數據不會丟失的存儲芯片,用于記錄設備每次重啟的狀態數據與時間數據。通常為I2C總線式串口通信,在存儲空間不足的情況下,可通過I2C總線擴展多塊EEPROM存儲芯片。

(3)看門狗中斷機制。該嵌入式平臺處理器需包含看門狗所需的特殊寄存器,如看門狗計數器及看門狗計數器溢出中斷標志寄存器。

(4)reboot命令。移植Linux系統需支持reboot命令,用于處理設備主動重啟狀態數據記錄。

(5)看門狗驅動程序。移植Linux系統需加載看門狗驅動程序,用于管理看門狗設備并記錄嵌入式設備軟件運行異常導致設備重啟的狀態信息記錄。

(6)EEPROM驅動程序。移植Linux系統需加載EEPROM存儲芯片驅動程序,所有設備重啟信息都將通過該驅動程序記錄入EEPROM芯片中。EEPROM存儲芯片通常為I2C總線協議通信,即該驅動程序需完成I2C總線協議讀寫操作。

根據以上特點,該嵌入式設備多狀態重啟記錄系統設計框架如圖1所示。

2 系統硬件設計

嵌入式設備重啟狀態記錄系統開發平臺為JZ2440,嵌入式微處理器為S3C2440,是三星公司開發的一款基于Arm9內核的微處理器。EEPROM芯片為M24128 (128-Kbit serial I2C bus EEPROM),共16KByte。EEPROM內部存儲數據地址范圍為0X0000—0X3FFF。

2.1 EEPROM工作電路

意法半導體的M24128是一款128kbit的I2C串口總線EEPROM存儲芯片,相對于同類其它型號的EEPROM,M24128有著最大的存儲空間,可以存儲更多數據,而無需通過總線擴展[9]。從成本與擴展便捷性方面考慮,EEPROM適合嵌入式設備針對少量數據的存儲需求。其工作電路如圖2所示。

2.2 EEPROM擴展

對于重啟次數相對頻繁的嵌入式設備,M24128的存儲空間難以滿足需求,針對該情況,可適當擴展多片EEPROM存儲芯片[10]。以3塊EEPROM設備通過I2C總線擴展情況為例[11],如圖3所示。

3 系統軟件設計

結合EEPROM驅動程序、看門狗驅動程序與reboot命令完成對嵌入式設備斷電重啟、看門狗重啟及用戶主動重啟3種不同重啟狀態信息的記錄。

3.1 EEPROM驅動程序

Linux系統驅動程序可以直接編譯進內核鏡像中,在內核啟動過程中完成驅動程序加載,也可編譯為內核模塊,在Linux系統啟動后,在其它腳本中加載該模塊。模塊一旦被加載,則與內核中其它部分完全相同[12-14]。在嵌入式設備重啟狀態記錄系統中,EEPROM驅動程序將被編譯進內核鏡像中,從而省去了啟動后對內核模塊腳本的加載過程,同時增大了內核鏡像 [15],可視具體嵌入式設備選擇不同加載方法。

EEPROM驅動程序需包括基本的I2C總線讀寫操作功能,以實現在EEPROM存儲芯片中讀寫數據。M24128寫數據支持兩種模式,一種為字節寫,即一次寫入1Byte數據到EEPROM中;另一種為頁寫,M24128頁大小為64Byte,即一次寫入64Byte數據。根據M24128數據手冊,兩種寫操作速度相差不大,都在5ms之內,故EEPROM驅動程序需支持以上兩種寫操作模式。綜合考慮設備重啟信息管理效率與EEPROM存儲空間利用率,將EEPROM存儲空間劃分為不同功能區塊。

M24128芯片存儲空間為16Kbyte,其可訪問的地址空間為0X0000-0X3FFF,分別劃分為斷電重啟標志區、重啟次數統計區與數據記錄區,如圖4所示。

(1)斷電重啟標志區。斷電重啟標志區劃分1Byte大小空間,訪問地址為0X0000。針對嵌入式設備斷電重啟的情況,因斷電是突然發生的,設備斷電關機前無法獲知即將關機信息,因此設備無法在斷電之前完成設備關機重啟信息記錄。故在EEPROM設備中特劃分此區域,用于判斷上一次是否為斷電重啟。可在設備斷電后再次上電開機后,對此次斷電重啟狀態進行判斷,并將相關數據記錄入EERPOM存儲芯片中。

(2)重啟次數統計區。重啟次數統計區劃分1Byte大小空間,訪問地址緊隨斷電重啟標志區,為0X0001。該區域數據可發揮兩方面作用:①用于統計嵌入式設備在各種情況下的設備重啟總次數;②用于計算下一個可用存儲塊,并在數據記錄區進行具體說明。

(3)數據記錄區。在EEPROM中將數據記錄區劃分為多個Block塊,每個Block用于記錄一次嵌入式設備重啟信息。綜合設備重啟數據信息大小與EEPROM的寫效率,將每個Block大小劃分為64Byte。在該情況下需要考慮,每次設備重啟時,重啟數據應存入哪個Block塊中。該地址是根據重啟次數統計區中的數據計算出的EEPROM頁地址,每次重啟次數加1,相應的Block存儲地址則向下偏移64Byte。

3.2 watchdog驅動及看門狗中斷服務函數

在嵌入式設備中,看門狗是一種常見機制,用于檢測設備軟件運行極端異常情況下導致的設備卡死情況,一旦發生卡死現象則重啟整個嵌入式設備[16-17]。看門狗設備驅動程序包括以下兩方面工作:

(1)初始化看門狗基本功能,包括看門狗啟停、喂狗時間參數設置、喂狗線程創建和看門狗中斷配置等。在驅動程序中注冊管理看門狗設備的proc接口,提供給用戶使用。

(2)在嵌入式設備重啟狀態記錄系統中,看門狗中斷服務函數[18]承擔著設備運行異常重啟信息記錄任務,即在看門狗中斷發生后,進入中斷服務函數。在此需完成對EEPROM存儲芯片的讀寫操作,將此次設備重啟信息記錄在EEPROM中。

看門狗工作流程如圖5所示。

3.3 reboot系統命令

reboot是一個集成在Busybox工具中的命令[19],其功能是完成Linux系統重啟,對于嵌入式設備而言,即重啟該設備。在嵌入式設備重啟狀態記錄系統中,需通過reboot命令實現對設備常規重啟狀態的信息記錄,記錄重啟信息依賴EEPROM驅動程序提供的接口完成,所以加載EEPROM驅動程序之后,reboot命令才能將數據寫入EEPROM。通過修改reboot命令源碼,根據嵌入式平臺重新編譯Busybox工具,并將其編譯到Linux內核鏡像中[20-21]。

3.4 系統軟件流程

從系統運行角度可將整個系統分為4個階段:嵌入式設備啟動階段、看門狗模塊加載階段、嵌入式設備運行階段與嵌入式設備重啟階段,下面將針對各個階段進行詳細闡述,如圖6所示。

(1)嵌入式設備啟動階段主要完成EEPROM存儲芯片的驅動程序加載,內核啟動過程中由Linux內核完成驅動程序加載。該階段完成的工作為讀取EEPROM存儲芯片上斷電重啟標志區,數字0表示上次設備重啟為reboot重啟或WatchDog重啟,數字1表示上次設備重啟為斷電重啟。若該值為0,擦除此標志區并寫入1;若該值為1,將EEPROM中設備重啟次數統計區數值加1,并消耗1塊Block區,用于記錄上次斷電重啟狀態,并記錄當前系統時間到該Block區。

(2)看門狗驅動模塊加載階段主要完成看門狗驅動程序加載與看門狗中斷服務函數中對EEPROM的讀寫操作,為出現嵌入式設備運行異常情況作準備。一旦發生異常,系統首先進入看門狗中斷服務函數中。該函數工作分為3步:①讀取EEPROM設備重啟次數統計區的值,將該值加1后更新此區域;②將EEPROM斷電重啟標志區寫0;③根據步驟①統計的設備重啟次數,計算出下一塊可利用Block區的起始地址空間(例如:此次為第3次重啟,將消耗Block3區,該區域起始地址為:0x0000+1+1+(3-1)*sizeof(Block)=0x0082,此處取sizeof(Block)大小為64Bytes,可參考圖4,并將當前系統運行時間與其它關鍵內核信息記錄入該Block區域。

(3)嵌入式設備運行階段主要由EEPROM驅動程序支持,為用戶提供proc接口,便于用戶通過proc接口訪問EEPROM中記錄的設備重啟信息并對信息進行管理,例如擦除部分或全部設備重啟記錄信息等,也可提供一些較高級的管理方式,如可根據EEPROM存儲空間實際大小,自適應地刪除較早的設備重啟狀態記錄信息,為接下來的設備重啟狀態數據提供可用空間。

(4)在嵌入式設備重啟階段,系統運行過程中也在等待設備運行結束狀態的到來。設備運行結束情況分為3種:第一種為設備突然斷電,在下次設備啟動加載EEPROM驅動時,會根據EEPROM的斷電重啟狀態區判斷上次設備重啟是否為斷電重啟,并作相應信息記錄;第二種為設備接收到軟件下發的重啟命令reboot,主要通過修改reboot命令源碼實現,并重新編譯BusyBox替換到設備中。reboot命令需完成的工作有以下3步:①寫0到EEPROM斷電重啟標志區;②讀取EEPROM設備重啟次數統計區的值,并將該值加1后更新此區域;③根據步驟②統計的設備重啟次數計算出下一塊可用Block區的起始地址空間,并將當前系統運行時間與其它信息記錄入該Block區域,最后重啟設備;第三種為設備系統運行異常,導致觸發看門狗中斷,在看門狗中斷服務函數中,寫入EEPROM標志以及異常運行狀態數據,并重啟設備。

本系統思想邏輯梳理如下:①系統啟動加載Linux內核,并加載EEPROM驅動程序;②判斷是否為斷電重啟并作相應記錄,然后初始化EEPROM斷電重啟標志區;③加載看門狗驅動,啟動看門狗;④系統運行階段由EEPROM驅動為用戶提供proc接口,并管理EEPROM重啟記錄信息;⑤系統重啟階段分為3種情況:斷電重啟,待下次設備啟動后再作記錄;reboot重啟,設備重啟之前在EEPROM中記錄下當前設備重啟數據信息;WatchDog重啟,系統進入看門狗中斷服務函數,在EEPROM中記錄此次WatchDog重啟信息。整體邏輯如圖7所示。

4 結語

本文在嵌入式系統中的軟件黑匣子技術基礎上,提出一種基于Linux系統的嵌入式設備多狀態重啟記錄系統設計方案。通過分析重啟記錄系統的功能需求,將嵌入式設備重啟劃分為3類,分別為設備斷電重啟、看門狗觸發重啟與用戶主動重啟,并選用EEPROM掉電記憶存儲芯片對過去多種狀態下的設備重啟信息進行記錄。驅動層面為用戶提供了便捷的設備重啟信息管理接口,用戶可在Linux終端管理窗口通過proc接口查詢與管理設備已記錄的重啟信息數據。針對重啟較為頻繁的設備,其設備重啟信息數據較多,當EEPROM存儲空間不夠時,還可對其進行適當擴展。對于EEPROM數據區中的具體數據,可根據嵌入式設備不同的業務能力,選擇記錄不同數據,該部分可結合實際應用場景作進一步研究。

參考文獻:

[1] 谷中山. 嵌入式技術的實際應用及前景[D]. 北京:北京動力機械研究所,2018.

[2] 翟軍治. 板載軟件狀態檢測與異常分析[D]. 西安:西安電子科技大學,2014.

[3] 馬驍騏. 實時操作系統資源預留的研究與實現[D]. 北京:中國科學院研究生院(軟件研究所),2003.

[4] 尚珊珊,趙鐵群. 軟件可靠性綜述[J]. 軟件導刊,2006(15):3-5.

[5] 陳光宇,黃錫滋. 軟件可靠性學科發展現狀及展望[J]. 電子科技大學學報:社會科學版, 2002, 4(3):99-102.

[6] 楊玉麗. 軟件可靠性研究現狀與展望[J]. 電腦知識與技術,2010(1):128-129.

[7] 王成長. 一種AP設備的異常重啟原因檢測方法及裝置[P]. 中國,106571954.A,2017-04-19.

[8] 朱靖飛. 一種查看系統異常時代碼信息的方法及裝置[P]. 中國,102479116.A,2012-05-30.

[9] ST.M24128-BF data sheets [EB/OL]. https://www.stmicroelectronics.com.cn/content/st_com/zh/products/memories/serial-eeprom/standard-serial-eeprom/standard-i2c-eeprom/m24128-bf.html.

[10] DP.I2C中線協議學習筆記[EB/OL]. http://dpinglee.blog.163.com/blog/static/14409775320112239374615/.

[11] 郭天祥. 51單片機C語言教程[M]. 北京:電子工業出版社,2015.

[12] 宋寶華. Linux設備驅動開發詳解[M]. 北京:機械工業出版社,2015.

[13] JONATHAN CORERT,ALESSANDRO RUBINI.Linux設備驅動程序[M]. 魏永明,譯. 北京:中國電力出版社,2009.

[14] 尤晉元,張亞英,戚正偉. UNIX環境高級編程[M]. 北京:人民郵電出版社,2006.

[15] 孫弋. 基于S3C2440的嵌入式Linux開發實例[M]. 西安:西安電子科技大學出版社,2010.

[16] mr_raptor.S3C2440看門狗定時器(Watchdog)[EB/OL]. https://blog.csdn.net/mr_raptor/article/details/6555704.

[17] 天王. S3C2440看門狗設置使用例程[EB/OL]. https://blog.csdn.net/skykingf/article/details/6185827.

[18] CSDN.Linux驅動中斷函數參數詳解[EB/OL]. https://blog.csdn.net/sum_tw/article/details/73301981.

[19] Wang-bob. 基于Linux與Busybox的Reboot命令流程分析[EB/OL]. https://blog.csdn.net/wavemcu/article/details/8544333.

[20] CCJ.Linux內核配置、編譯及Makefile簡述[EB/OL]. https://www.linuxidc.com/Linux/2016-12/137841.htm.

[21] 金步國. Linux-4.4-x86_64內核配置選項簡介[EB/OL]. https://blog.csdn.net/wdsfup/article/details/52302142.

(責任編輯:黃 健)

主站蜘蛛池模板: 久久精品丝袜高跟鞋| 免费看久久精品99| 免费在线a视频| 婷婷激情亚洲| 成人福利在线观看| 久久久久无码精品| 亚洲人成网站观看在线观看| 成人精品午夜福利在线播放| 亚洲国产天堂在线观看| 亚洲精品天堂在线观看| 国产欧美一区二区三区视频在线观看| 成人免费一级片| 日韩成人高清无码| 香蕉在线视频网站| www.91中文字幕| 国产福利小视频高清在线观看| 日本少妇又色又爽又高潮| 国产福利小视频高清在线观看| 青青草原国产| 在线五月婷婷| 日韩视频免费| 黄色网在线| 成人无码区免费视频网站蜜臀| 日韩国产综合精选| 亚洲av无码牛牛影视在线二区| 欧美日韩精品一区二区在线线| 欧美综合激情| 国产国拍精品视频免费看| 精品国产福利在线| 成人亚洲国产| 国产欧美日韩一区二区视频在线| 伊大人香蕉久久网欧美| 精品久久久久久中文字幕女| 亚洲伦理一区二区| 亚洲热线99精品视频| 福利片91| 在线日本国产成人免费的| 亚洲综合片| 国产激情无码一区二区APP| 国产午夜无码片在线观看网站 | 国产精品成人啪精品视频| 欧美人人干| 国产精品99一区不卡| 久久精品丝袜| 中国一级毛片免费观看| 大香网伊人久久综合网2020| www精品久久| 亚洲色图欧美| 成年看免费观看视频拍拍| 91精品人妻一区二区| 99er精品视频| 国产第八页| 欧美97欧美综合色伦图| 亚洲自偷自拍另类小说| 欧美精品成人| 国产精品极品美女自在线网站| 久久久久国产精品熟女影院| 国产v精品成人免费视频71pao | 中文无码伦av中文字幕| 国产精品jizz在线观看软件| 波多野结衣视频一区二区| 日本精品一在线观看视频| 欧美97色| 国产成人久久综合777777麻豆| 青青青国产在线播放| 亚洲成aⅴ人在线观看| 一级毛片在线播放| 成人免费一区二区三区| 中文无码毛片又爽又刺激| 国产夜色视频| 超碰精品无码一区二区| 波多野结衣一区二区三区AV| 国产成人精彩在线视频50| 久久精品亚洲专区| 亚洲精品中文字幕午夜| 蜜桃视频一区| 色亚洲成人| 久久99精品久久久久久不卡| 久无码久无码av无码| 91久久偷偷做嫩草影院电| 黄色在线网| 国产精品自拍合集|