《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Linux的嵌入式系統(tǒng)全程嘿狗策略
基于Linux的嵌入式系統(tǒng)全程嘿狗策略
單片機(jī)與嵌入式系統(tǒng)應(yīng)用
江蘇東大金智建筑智能化系統(tǒng)工程有限公司 張長順 黃建元
摘要: 基于Linux的嵌入式系統(tǒng)全程嘿狗策略,摘 要 Linux嵌入式系統(tǒng)在啟動(dòng)過程中如何喂狗是提高嵌入式系統(tǒng)可靠性需要解決的問題,傳統(tǒng)做法是用復(fù)雜看門狗電路或在啟動(dòng)過程中關(guān)閉看門狗。本文提出了一種嵌入式系統(tǒng)喂狗策略,可以實(shí)現(xiàn)系統(tǒng)在啟動(dòng)過程和運(yùn)行過程中全
關(guān)鍵詞: 軟件 Linux 看門狗
Abstract:
Key words :

摘 要 Linux嵌入式系統(tǒng)在啟動(dòng)過程中如何喂狗是提高嵌入式系統(tǒng)可靠性需要解決的問題,傳統(tǒng)做法是用復(fù)雜看門狗電路或在啟動(dòng)過程中關(guān)閉看門狗。本文提出了一種嵌入式系統(tǒng)喂狗策略,可以實(shí)現(xiàn)系統(tǒng)在啟動(dòng)過程和運(yùn)行過程中全程喂狗。基于簡單的硬件電路,在系統(tǒng)不同過程的程序中插入喂狗程序。實(shí)驗(yàn)表明,該方法簡單可行,成本較低,是一種嵌入式系統(tǒng)的可靠喂狗方法。
關(guān)鍵詞 嵌入式系統(tǒng) 看門狗 全程喂狗 IMP706 Linux


引 言
    在嵌入式系統(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ì)對CPU產(chǎn)生一個(gè)復(fù)位信號使系統(tǒng)重啟。系統(tǒng)正常運(yùn)行時(shí),需要在看門狗允許的時(shí)間間隔內(nèi)對看門狗計(jì)數(shù)器清零也即喂狗,不讓復(fù)位信號產(chǎn)生。
    當(dāng)前在帶Linux操作系統(tǒng)的嵌入式系統(tǒng)中,由于Linux操作系統(tǒng)加載時(shí)間較長(如lO~30 s),一般都超過看門狗的時(shí)間間隔(典型值為1.6 s);而如果不采取特殊措施,則系統(tǒng)在Linux操作系統(tǒng)加載過程中復(fù)位,Linux操作系統(tǒng)永遠(yuǎn)無法加載成功。為了解決這個(gè)問題,通常有兩種方案:做一個(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ù)位信號;如果系統(tǒng)非正常工作,喂狗動(dòng)作失效,硬件看門狗的計(jì)數(shù)器在1.6 s后溢出,對CPU產(chǎn)生復(fù)位信號使系統(tǒng)重啟。
1.1 看門狗電路設(shè)計(jì)
    圖1為看門狗電路原理,采用IMP706芯片組成硬件看門狗電路,通過電平轉(zhuǎn)換器件74AVClT45,硬件看門狗器件的ST腳與中央處理器(CPU)的GPIO3腳相連。看門狗器件的PRST腳與IN腳接到復(fù)位開關(guān),RST腳接到CPU的RESET腳,當(dāng)復(fù)位開關(guān)被觸動(dòng)或看門狗器件的計(jì)數(shù)器溢出時(shí),看門狗器件的RST腳輸出復(fù)位信號給CPU的RESET腳,CPU復(fù)位重啟。

1.2 喂狗策略及實(shí)現(xiàn)
1.2.1 Bootloader階段
    在Boot1oader階段(本設(shè)計(jì)采用U—boot,但不限于此),喂狗策略是在Bootloader的程序中不同位置插入喂狗程序。具體做法是:由于Bootoader第一階段的啟動(dòng)不會(huì)超過1.6 s,因此只需在Bootoader的第二階段,如Flash讀寫、CRC校驗(yàn)、循環(huán)等待等處,插入喂狗代碼。喂狗代碼采用直接置位中央處理器的GPIO3狀態(tài)寄存器的方式進(jìn)行。
    首先在特定平臺(tái)的定義頭文件include/conffigs/xxx.h中加入看門狗的宏定義:

   
    在lib_generic下的CRC校驗(yàn)階段代碼crc32.c中加入如下代碼,實(shí)現(xiàn)CRC校驗(yàn)階段喂狗:

   
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)代碼處插入喂狗代碼,喂狗代碼以直接取反中央處理器的GPIO3狀態(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)含取反中央處理器的GPIO3狀態(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)含取反中央處理器的GPIO3狀態(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/compressed.c中喂狗的實(shí)現(xiàn)代碼:

    
    從以上代碼可以看出,它是內(nèi)核階段l喂狗的典型方法,是直接取反GPIO3狀態(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)先級高于其他線程。監(jiān)控線程在其他被監(jiān)控的線程正常工作的情況下,一定時(shí)間內(nèi)對看門狗進(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)控的線程中首先對線程內(nèi)的計(jì)數(shù)器初始化為O,在各個(gè)線程主循環(huán)中,對相應(yīng)的計(jì)數(shù)器執(zhí)行加1操作。監(jiān)控任務(wù)首先啟動(dòng)看門狗,進(jìn)入循環(huán)。每隔M秒對各線程內(nèi)的計(jì)數(shù)器進(jìn)行檢驗(yàn),在M秒內(nèi)每隔1 s要對看門狗喂狗,否則系統(tǒng)就會(huì)復(fù)位重啟。查詢N個(gè)計(jì)數(shù)器值是否為0,如果全都大于0,則說明對應(yīng)接受監(jiān)控的線程正常運(yùn)行,然后對看門狗喂狗,并將N個(gè)計(jì)數(shù)器值清零。如果有任意一個(gè)計(jì)數(shù)器值為O,檢測到對應(yīng)接受監(jiān)視的線程出現(xiàn)故障需要重啟,這時(shí)不對看門狗喂狗,使得系統(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,采取取反中央處理器的GPIO3的狀態(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é)果
    我們在公司研發(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兼容性測試中,當(dāng)各強(qiáng)度指標(biāo)超過設(shè)備EMC兼容性設(shè)計(jì)強(qiáng)度時(shí),系統(tǒng)失效,利用這種方式可以測試本方法在硬件失效時(shí)的效果。以靜電放電為例,設(shè)計(jì)放電等級為±6 kV(我們?nèi)?plusmn;7 kV的強(qiáng)度等級),設(shè)備上電后,分別在1~30 s內(nèi)每隔5 s及在120 s處進(jìn)行靜電放電測試,經(jīng)觀察設(shè)備都可以即時(shí)恢復(fù)。
    對軟件失效時(shí)本方法效果的測試,采用故障植入腳本的主動(dòng)方式及系統(tǒng)長時(shí)間運(yùn)行的被動(dòng)方式進(jìn)行測試。最終結(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)可靠性得到提高。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美激情国产日韩| 国产偷国产偷精品高清尤物| 欧美一级艳片视频免费观看| 日韩一区二区免费看| 亚洲高清三级视频| 欧美在线视频观看免费网站| 亚洲一级在线| 亚洲麻豆视频| 欧美在线免费观看视频| 亚洲砖区区免费| 亚洲尤物精选| 亚洲欧美综合网| 午夜精品免费视频| 亚洲欧美在线高清| 午夜欧美不卡精品aaaaa| 亚洲自拍偷拍麻豆| 亚洲欧美日韩一区二区| 亚洲女性裸体视频| 亚洲欧美视频一区二区三区| 亚洲一区二区三区精品在线观看| 一本色道久久综合亚洲精品高清 | 亚洲精选中文字幕| 亚洲精品综合久久中文字幕| 亚洲精品看片| 99精品国产在热久久婷婷| 日韩视频在线观看一区二区| 在线视频精品| 亚洲欧美区自拍先锋| 性欧美暴力猛交另类hd| 久久精品99国产精品| 亚洲激情视频网| 日韩午夜激情| 亚洲免费视频一区二区| 欧美一区影院| 美女网站久久| 欧美日本一区二区三区| 欧美性大战久久久久久久蜜臀 | 亚洲激情视频在线观看| 亚洲乱码国产乱码精品精可以看 | 999亚洲国产精| 亚洲欧美不卡| 久久国产精品99精品国产| 久久久噜噜噜久久中文字幕色伊伊| 久久香蕉国产线看观看av| 欧美成人亚洲成人日韩成人| 欧美日韩蜜桃| 国产欧美综合在线| 一区二区三区在线免费观看| 亚洲精品国产精品国自产在线 | 午夜电影亚洲| 亚洲国产日韩欧美一区二区三区| 99这里只有精品| 欧美在线视频a| 欧美国产综合一区二区| 国产精品久久久久99| 国产综合网站| 99热这里只有精品8| 欧美亚洲一区三区| 99国产精品国产精品毛片| 午夜精彩视频在线观看不卡 | 国产精品日韩久久久| 黄色小说综合网站| av成人黄色| 亚洲成人资源网| 亚洲免费一在线| 老司机67194精品线观看| 欧美色欧美亚洲另类七区| 国产一区二区三区高清在线观看 | 亚洲一区久久| 美国三级日本三级久久99| 欧美色图麻豆| 狠色狠色综合久久| 夜夜嗨av色一区二区不卡| 久久国产精品久久久久久电车| 欧美一级二区| 国产亚洲综合精品| 夜夜嗨av色综合久久久综合网| 香蕉国产精品偷在线观看不卡| 亚洲精品一区二区三区福利| 欧美影院午夜播放| 欧美精品一区二区三区在线看午夜| 国产欧美三级| 99精品视频免费在线观看| 亚洲国产精品久久人人爱蜜臀| 亚洲欧美日韩综合一区| 欧美韩国在线| 国产综合欧美在线看| 亚洲一二三四区| 99精品视频网| 美日韩精品视频免费看| 国产伦一区二区三区色一情| 日韩视频专区| 亚洲三级视频| 久久一区中文字幕| 国产热re99久久6国产精品| 日韩一二三区视频| 亚洲人成久久| 久久免费少妇高潮久久精品99| 国产精品久久77777| 亚洲人久久久| 亚洲欧洲精品一区二区| 久久久国产一区二区| 国产精品天天看| 一区二区三区精品国产| 日韩一级黄色大片| 农村妇女精品| 在线免费日韩片| 亚洲电影在线观看| 久久久91精品国产一区二区三区| 国产精品免费区二区三区观看| 夜夜嗨网站十八久久| 艳女tv在线观看国产一区| 欧美1区3d| 在线观看欧美| 亚洲国产一区二区在线| 久热综合在线亚洲精品| 精品91久久久久| 久久精品二区| 玖玖国产精品视频| 激情综合亚洲| 亚洲高清不卡在线| 欧美.日韩.国产.一区.二区| 伊人婷婷欧美激情| 亚洲国产美女精品久久久久∴| 久久九九国产| 精品电影一区| 亚洲国产欧美一区二区三区久久 | 性亚洲最疯狂xxxx高清| 欧美一区午夜精品| 国产亚洲欧美一区在线观看| 欧美一区二区视频在线观看| 午夜亚洲一区| 国产深夜精品福利| 久久精彩免费视频| 女人天堂亚洲aⅴ在线观看| 亚洲国产一区二区视频| 夜夜嗨网站十八久久| 欧美日韩在线一区二区| 亚洲校园激情| 久久精品免视看| 一色屋精品视频免费看| 亚洲精品美女久久7777777| 欧美激情综合色综合啪啪| 日韩一级大片在线| 香港久久久电影| 国产自产高清不卡| 最新成人av在线| 欧美日韩免费观看一区| 一区二区欧美视频| 欧美专区日韩专区| 在线国产精品一区| 日韩视频不卡中文| 国产精品久久久久久久9999| 欧美一级久久久| 男女激情视频一区| 亚洲最新在线| 久久国产欧美精品| 亚洲福利免费| 亚洲一区二区成人| 国产主播一区| 亚洲卡通欧美制服中文| 国产精品成人aaaaa网站| 欧美一区二区视频在线观看| 欧美韩日视频| 亚洲欧美另类国产| 蘑菇福利视频一区播放| 中文一区二区| 久久亚洲春色中文字幕| 亚洲精品一区在线| 欧美中文在线视频| 亚洲国产欧美一区二区三区久久 | 一区二区三区久久网| 国产酒店精品激情| 亚洲激情精品| 国产精品久久久久久亚洲调教| 久久精品一区蜜桃臀影院| 欧美日韩国产丝袜另类| 欧美一级视频精品观看| 欧美日本在线播放| 欧美一区高清| 欧美三区不卡| 亚洲第一福利在线观看| 欧美香蕉视频| 亚洲精品欧美在线| 国产区亚洲区欧美区| 一本色道久久88精品综合| 国产一区二区福利| 中国成人亚色综合网站| 狠狠色狠色综合曰曰| 亚洲一区激情| 亚洲激情成人| 欧美一区二区三区视频| 亚洲精品在线看| 麻豆久久久9性大片| 亚洲欧美成人一区二区三区| 欧美精品色综合| 亚洲高清电影| 国产亚洲aⅴaaaaaa毛片| 亚洲午夜高清视频| 亚洲国产精品va在线看黑人动漫|