国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于Linux的嵌入式系統(tǒng)全程喂狗策略

發(fā)布時(shí)間:2010-3-24 09:31    發(fā)布者:李寬
關(guān)鍵詞: linux , 嵌入式 , 系統(tǒng)
引言

嵌入式系統(tǒng)中,為了使系統(tǒng)在異常情況下能自動(dòng)恢復(fù),一般都會(huì)引入看門狗電路。看門狗電路其實(shí)就是一個(gè)計(jì)數(shù)器。當(dāng)看門狗啟動(dòng)后,計(jì)數(shù)器開始自動(dòng)計(jì)數(shù),經(jīng)過一定時(shí)間計(jì)數(shù)器溢出就會(huì)對(duì)CPU產(chǎn)生一個(gè)復(fù)位信號(hào)使系統(tǒng)重啟。系統(tǒng)正常運(yùn)行時(shí),需要在看門狗允許的時(shí)間間隔內(nèi)對(duì)看門狗計(jì)數(shù)器清零也即喂狗,不讓復(fù)位信號(hào)產(chǎn)生。

當(dāng)前在帶Linux操作系統(tǒng)的嵌入式系統(tǒng)中,由于Linux操作系統(tǒng)加載時(shí)間較長(如10~30 s),一般都超過看門狗的時(shí)間間隔(典型值為l.6 s);而如果不采取特殊措施,則系統(tǒng)在Linux操作系統(tǒng)加載過程中復(fù)位,Linux操作系統(tǒng)永遠(yuǎn)無法加載成功。為了解決這個(gè)問題,通常有兩種方案 [1-2]:做一個(gè)看門狗的時(shí)間間隔更長的硬件電路;修改內(nèi)核,在內(nèi)核啟動(dòng)過程中將看門狗設(shè)成無效。以上方案無法解決嵌入式系統(tǒng)在操作系統(tǒng)啟動(dòng)階段的失效問題,降低了系統(tǒng)可靠性。

本文提出了一種嵌入式系統(tǒng)全程喂狗策略及實(shí)現(xiàn)方法,從系統(tǒng)上電、引導(dǎo)程序(Bootloader)、操作系統(tǒng)內(nèi)核直至應(yīng)用階段都啟用看門狗。實(shí)驗(yàn)表明,該方法簡單可行,成本較低,在嵌入式系統(tǒng)的全過程中都可以實(shí)現(xiàn)喂狗策略,提高了系統(tǒng)可靠性。

1  系統(tǒng)總體設(shè)計(jì)

采用IMP706芯片組成硬件看門狗電路(看門狗的時(shí)間間隔為1.6 s),在操作系統(tǒng)程序(包括Bootloader)和應(yīng)用程序中插人喂狗程序,這些喂狗程序運(yùn)行時(shí)問間隔小于看門狗的時(shí)間間隔(本設(shè)計(jì)選為1 s)。這樣做可以保證:如果系統(tǒng)正常工作,系統(tǒng)可以在小于看門狗的時(shí)間間隔內(nèi)不斷進(jìn)行喂狗動(dòng)作,硬件看門狗的計(jì)數(shù)器不斷清零,不產(chǎn)生復(fù)位信號(hào);如果系統(tǒng)非正常工作,喂狗動(dòng)作失效,硬件看門狗的計(jì)數(shù)器在1.6 s后溢出,對(duì)CPU產(chǎn)生復(fù)位信號(hào)使系統(tǒng)重啟。

1.1  看門狗電路設(shè)計(jì)

圖 1為看門狗電路原理,采用IMP706芯片組成硬件看門狗電路,通過電平轉(zhuǎn)換器件74AVC1T45,硬件看門狗器件的ST腳與中央處理器(CPU)的 GPIO3腳相連。看門狗器件的PRST腳與IN腳接到復(fù)位開關(guān),RST腳接到CPU的RESET腳,當(dāng)復(fù)位開關(guān)被觸動(dòng)或看門狗器件的計(jì)數(shù)器溢出時(shí),看門狗器件的RST腳輸出復(fù)位信號(hào)給CPU的RESET腳,CPU復(fù)位重啟。



1.2  喂狗策略及實(shí)現(xiàn)

1.2.1  Bootloader階段

在 Bootloader階段(本設(shè)計(jì)采用U-boot,但不限于此),喂狗策略是在Bootloader的程序中不同位置插入喂狗程序。具體做法是:由于 Bootoader第一階段的啟動(dòng)不會(huì)超過1.6 s,因此只需在Bootoader的第二階段,如Flash讀寫、CRC校驗(yàn)、循環(huán)等待等處,插入喂狗代碼。喂狗代碼采用直接置位中央處理器的GPlO3 狀態(tài)寄存器的方式進(jìn)行。

首先在特定平臺(tái)的定義頭文件include/condffigs/xxx.h中加入看門狗的宏定義:



1.2.2 Linux內(nèi)核階段

在Linux內(nèi)核加載階段(采用 MontaVista Linux操作系統(tǒng),但不限于此),喂狗策略是在Linux內(nèi)核程序的不同位置插入喂狗程序。具體做法是:首先在Linux內(nèi)核階段1的內(nèi)核解壓縮程序、 RTC驅(qū)動(dòng)加載程序、GPIO驅(qū)動(dòng)加載程序適當(dāng)代碼處插入喂狗代碼,喂狗代碼以直接取反中央處理器的GPlO3狀態(tài)寄存器的方式進(jìn)行;在Linux內(nèi)核階段2的Watchdog驅(qū)動(dòng)加載程序適當(dāng)代碼處插入喂狗代碼,喂狗代碼調(diào)用GPIO驅(qū)動(dòng),GPIO驅(qū)動(dòng)內(nèi)含取反中央處理器的GPlO3狀態(tài)寄存器的操作;在Linux內(nèi)核階段3的內(nèi)核加載根文件系統(tǒng)程序、init程序的適當(dāng)代碼處調(diào)用Linux的Watchdog驅(qū)動(dòng),Watchdog驅(qū)動(dòng)內(nèi)含取反中央處理器的GPlO3狀態(tài)寄存器的操作。

以上內(nèi)核階段的劃分是以GPIO及Watchdog驅(qū)動(dòng)的加載為標(biāo)志的。GPIO驅(qū)動(dòng)加載之前為內(nèi)核階段1,GPIO驅(qū)動(dòng)加載之后至Watchdog驅(qū)動(dòng)加載之前為內(nèi)核階段2,Watchdog驅(qū)動(dòng)加載之后為內(nèi)核階段3。

下面示例說明內(nèi)核解壓縮asm/arch/boot/com—pressed.C中喂狗的實(shí)現(xiàn)代碼:



從以上代碼可以看出,它是內(nèi)核階段1喂狗的典型方法,是直接取反GPlO3狀態(tài)寄存器的。

下面示例說明內(nèi)核階段2的喂狗方法(僅以加載RTC驅(qū)動(dòng)為例):首先讓RTC驅(qū)動(dòng)中包含GPIO的頭文件,然后在讀取RTC當(dāng)前值的函數(shù)中調(diào)用GPIO驅(qū)動(dòng)進(jìn)行喂狗。



為了能夠在內(nèi)核階段3調(diào)用Watchdog驅(qū)動(dòng)進(jìn)行喂狗,需要在Watchdog驅(qū)動(dòng)中導(dǎo)出喂狗函數(shù)以供內(nèi)核階段3使用。Watchdog驅(qū)動(dòng)喂狗也是調(diào)用GPIO驅(qū)動(dòng)實(shí)現(xiàn)的,但Watchdog驅(qū)動(dòng)一旦加載完成,以后的喂狗都通過調(diào)用 Watchdog驅(qū)動(dòng)完成。



1.2.3  程序運(yùn)行階段

圖2為多線程應(yīng)用程序運(yùn)行階段喂狗方法。在主程序中首先創(chuàng)建一個(gè)監(jiān)控線程,它的優(yōu)先級(jí)高于其他線程。監(jiān)控線程在其他被監(jiān)控的線程正常工作的情況下,一定時(shí)間內(nèi)對(duì)看門狗進(jìn)行喂狗操作,喂狗操作通過調(diào)用Watch—dog驅(qū)動(dòng)來完成。如果某個(gè)線程出現(xiàn)故障,監(jiān)控線程就不執(zhí)行喂狗操作,也就達(dá)到這個(gè)線程出現(xiàn)故障時(shí)系統(tǒng)自動(dòng)重啟的目的。如果監(jiān)控線程自身出現(xiàn)故障,不能及時(shí)執(zhí)行喂狗操作,看門狗也自動(dòng)復(fù)位重啟。具體做法是,主程序首先啟動(dòng)監(jiān)控線程,然后依次啟動(dòng)N個(gè)被監(jiān)控的線程,每一線程內(nèi)都設(shè)置一計(jì)數(shù)器。被監(jiān)控的線程中首先對(duì)線程內(nèi)的計(jì)數(shù)器初始化為0,在各個(gè)線程主循環(huán)中,對(duì)相應(yīng)的計(jì)數(shù)器執(zhí)行加1操作。監(jiān)控任務(wù)首先啟動(dòng)看門狗,進(jìn)入循環(huán)。每隔M秒對(duì)各線程內(nèi)的計(jì)數(shù)器進(jìn)行檢驗(yàn),在M秒內(nèi)每隔1 s要對(duì)看門狗喂狗,否則系統(tǒng)就會(huì)復(fù)位重啟。查詢N個(gè)計(jì)數(shù)器值是否為O,如果全都大于O,則說明對(duì)應(yīng)接受監(jiān)控的線程正常運(yùn)行,然后對(duì)看門狗喂狗,并將N個(gè)計(jì)數(shù)

器值清零。如果有任意一個(gè)計(jì)數(shù)器值為0,檢測(cè)到對(duì)應(yīng)接受監(jiān)視的線程出現(xiàn)故障需要重啟,這時(shí)不對(duì)看門狗喂狗,使得系統(tǒng)復(fù)位重啟。



以下示例說明在應(yīng)用中如何調(diào)用Watchdog驅(qū)動(dòng)實(shí)現(xiàn)喂狗:



總之,在系統(tǒng)不同階段,由于系統(tǒng)調(diào)用和封裝程度不同,看門狗的喂狗實(shí)現(xiàn)方法也不同:在Bootloader階段,直接取反中央處理器的GPIO3的狀態(tài)寄存器;在Linux內(nèi)核階段1,采取取反中央處理器的GPlO3的狀態(tài)寄存器的方法進(jìn)行;在Linux內(nèi)核階段2,采取調(diào)用GPIO的驅(qū)動(dòng)的方法進(jìn)行;在Linux內(nèi)核階段3,采取調(diào)用Watchdog驅(qū)動(dòng)的方法進(jìn)行;在應(yīng)用程序運(yùn)行階段,應(yīng)用程序中的喂狗程序采取調(diào)用Watchdog驅(qū)動(dòng)的方法進(jìn)行,如圖3所示。



2  實(shí)驗(yàn)結(jié)果

我們?cè)诠狙邪l(fā)的智能視頻分析器項(xiàng)目中應(yīng)用了本方法。該分析器采用TI DaVinci系列DSP芯片(TMS320DM6446)為CPU,用Monta Vista Linux作為操作系統(tǒng)。操作系統(tǒng)啟動(dòng)時(shí)間約為20~30 s。采用本方法是為了保證系統(tǒng)在全過程中都能得到有效的失效恢復(fù)。

在振蕩波抗擾度、電壓波動(dòng)與閃爍、靜電放電、電快速瞬變脈沖群等EMC兼容性測(cè)試中,當(dāng)各強(qiáng)度指標(biāo)超過設(shè)備EMC兼容性設(shè)計(jì)強(qiáng)度時(shí),系統(tǒng)失效,利用這種方式可以測(cè)試本方法在硬件失效時(shí)的效果。以靜電放電為例,設(shè)計(jì)放電等級(jí)為±6 kV(我們?nèi) ? kV的強(qiáng)度等級(jí)),設(shè)備上電后,分別在1~30 s內(nèi)每隔5 s及在120 s處進(jìn)行靜電放電測(cè)試,經(jīng)觀察設(shè)備都可以即時(shí)恢復(fù)。

對(duì)軟件失效時(shí)本方法效果的測(cè)試,采用故障植入腳本的主動(dòng)方式及系統(tǒng)長時(shí)間運(yùn)行的被動(dòng)方式進(jìn)行測(cè)試。最終結(jié)果表明,設(shè)備在失效后可即時(shí)恢復(fù)。

綜上所述,本全程喂狗的方法能確保系統(tǒng)在任一階段出現(xiàn)軟件或硬件故障時(shí)都能復(fù)位重啟。

結(jié)語

本文提出了一種嵌入式系統(tǒng)全程喂狗策略,包括硬件電路設(shè)計(jì)和軟件實(shí)現(xiàn)方法。該方法有如下特點(diǎn):看門狗電路簡單,硬件只需一塊看門狗芯片,不需復(fù)雜的外圍邏輯電路,成本較低;系統(tǒng)全過程啟用看門狗,確保系統(tǒng)在任一階段出現(xiàn)軟件或硬件故障都能復(fù)位重啟,系統(tǒng)可靠性得到提高。

參考文獻(xiàn)

   1. 曹敏煊 嵌入式操作系統(tǒng)應(yīng)用中的看門狗技術(shù) [期刊論文] -單片機(jī)與嵌入式系統(tǒng)應(yīng)用2004(5)
   2. 唐明 WatchDog 在嵌入式應(yīng)用中的問題 [期刊論文] -單片機(jī)與嵌入式系統(tǒng)應(yīng)用2007(11)
   3. Bovet Daniel P.Cesati Marco Understanding the Linux Kernel 2005
   4. 鄭培余.李漢斌.姚紹文 支持多線程監(jiān)控的外置Watchdog監(jiān)控組件的設(shè)計(jì) [期刊論文] -計(jì)算機(jī)工程2004(24)
   
作者:江蘇東大金智建筑智能化系統(tǒng)工程有限公司 張長順  黃建元  趙新榮  陸永剛
來源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用  2009 (4)
本文地址:http://m.qingdxww.cn/thread-9795-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区精品 | 欧美精品专区免费观看 | 日本九九精品一区二区 | 日韩黄色成人 | 亚洲国产成人九九综合 | 岬奈一区二区中文字幕 | 亚洲欧洲日韩国产一区二区三区 | 99久久中文字幕伊人情人 | 欧美成人性色大片在线观看 | 欧洲视频一区 | 日本一区免费观看 | 真实国产乱视频国语 | 日韩一级在线播放免费观看 | 日韩精品专区 | h成人3d动漫在线观看网站 | 黑人26厘米大战亚洲女 | 欧美婷婷六月丁香综合色 | 日本亚洲成高清一区二区三区 | 日韩日日日 | 国产毛片一区二区 | 羞羞视频免费网站日本 | 午夜影院在线 | 蜜臀91精品国产免费观看 | 黄 色 免 费 网站在线观看 | 久久久久久久国产精品视频 | 99热这里只有精品国产动漫 | 中国美女大战黑人国产 | 国产精品秒播无毒不卡 | 色在线免费视频 | 国产日韩精品欧美一区 | 欧美一二三区在线 | 亚洲人的天堂男人爽爽爽 | 五房色播 | 欧美中文字幕第一页 | 国产精品v一区二区三区 | 欧美视频高清在线观看 | 中文有码在线观看 | 成人欧美一区在线视频在线观看 | 国产一成人精品福利网站 | 狠狠色丁香久久综合婷婷 | 欧美精品三级在线 |