新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux看門(mén)狗管理及在DM8168芯片上的應(yīng)用

Linux看門(mén)狗管理及在DM8168芯片上的應(yīng)用

作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

摘要:隨著智能手機(jī)及平板為代表的嵌入式設(shè)備的普及,對(duì)系統(tǒng)的可靠性提出較高的要求。以TI TMS320DM8168芯片為例,詳細(xì)介紹了系統(tǒng)從U—Boot啟動(dòng)、內(nèi)核啟動(dòng)到文件系統(tǒng)加載及用戶(hù)程序啟動(dòng)過(guò)程中,的啟用及管理,通過(guò)不同階段管理,可以保證系統(tǒng)在任意可能出現(xiàn)問(wèn)題的階段,可以自動(dòng)重啟以修復(fù)故障,從而有效提高系統(tǒng)的可靠性。

本文引用地址:http://www.butianyuan.cn/article/201609/303453.htm

關(guān)鍵詞:;;DM8168

引言

隨著智能終端及移動(dòng)互聯(lián)網(wǎng)的發(fā)展,系統(tǒng)被應(yīng)用到越來(lái)越多的嵌入式設(shè)備中,如移動(dòng)通信基站、Android(基于Linux內(nèi)核)智能手機(jī)、智能手環(huán)等。不同領(lǐng)域的應(yīng)用都對(duì)Android/Linux系統(tǒng)的可靠性及可用性有嚴(yán)格的要求。在嵌入式系統(tǒng)中,CPU必須可靠工作,即使因?yàn)槟撤N錯(cuò)誤或異常進(jìn)入錯(cuò)誤狀態(tài),系統(tǒng)應(yīng)該可以自動(dòng)復(fù)位,看門(mén)狗也可以在系統(tǒng)進(jìn)入錯(cuò)誤狀態(tài)后的一段時(shí)間內(nèi)重啟復(fù)位,以實(shí)現(xiàn)系統(tǒng)自動(dòng)從故障恢復(fù)。

1 看門(mén)狗的概念

看門(mén)狗是一個(gè)進(jìn)行累加計(jì)數(shù)的定時(shí)器,在其啟動(dòng)后,如果在設(shè)定的時(shí)間間隔內(nèi)對(duì)定時(shí)器清零(俗稱(chēng)“喂狗”操作),定時(shí)器就不會(huì)溢出,也不會(huì)產(chǎn)生復(fù)位信號(hào);如果在設(shè)定的時(shí)間間隔內(nèi),沒(méi)有對(duì)定時(shí)器清零,定時(shí)器就會(huì)溢出產(chǎn)生復(fù)位信號(hào),從而實(shí)現(xiàn)系統(tǒng)重啟。根據(jù)實(shí)現(xiàn)方式的不同,可以分為硬件看門(mén)狗和軟件看門(mén)狗。

硬件看門(mén)狗是利用定時(shí)器電路實(shí)現(xiàn),其輸出連接到電路的復(fù)位端,程序在設(shè)定間隔內(nèi)對(duì)定時(shí)器清零。因此程序正常工作時(shí),定時(shí)器不會(huì)溢出;如果程序出現(xiàn)故障,未能在設(shè)定間隔周期內(nèi)執(zhí)行清零操作,就使得看門(mén)狗定時(shí)器溢出,產(chǎn)生復(fù)位信號(hào)并重啟系統(tǒng)。軟件看門(mén)狗原理上同硬件看門(mén)狗一樣,只是將硬件電路上的定時(shí)器用操作系統(tǒng)內(nèi)部的軟件定時(shí)器代替,這樣可以簡(jiǎn)化硬件電路設(shè)計(jì)。但軟件定時(shí)器在可靠性方面不如硬件定時(shí)器,在一些異常的情形下,比如處理器或操作系統(tǒng)內(nèi)部發(fā)生故障時(shí),會(huì)導(dǎo)致軟件定時(shí)器不可用,也就無(wú)法檢測(cè)到這些故障。

2 Linux系統(tǒng)對(duì)看門(mén)狗的支持

Linux內(nèi)核從1.3.51版本開(kāi)始提供硬件、軟件看門(mén)狗的驅(qū)動(dòng)支持。隨著內(nèi)核版本不斷更新與發(fā)展,Linux內(nèi)核對(duì)各種不同類(lèi)型的硬件看門(mén)狗提供了廣泛的支持。根據(jù)訪(fǎng)問(wèn)方式的不同,Linux系統(tǒng)下的設(shè)備驅(qū)動(dòng)程序分為字符設(shè)備及塊設(shè)備??撮T(mén)狗在Linux系統(tǒng)下作為字符設(shè)備來(lái)處理,/dev/watchdog是一個(gè)主設(shè)備號(hào)為10、從設(shè)備號(hào)為130的字符設(shè)備節(jié)點(diǎn)。

Linux系統(tǒng)下的硬件看門(mén)狗,必須有硬件電路支持,設(shè)備節(jié)點(diǎn)/dev/watchdog對(duì)應(yīng)著真實(shí)的物理設(shè)備,不同類(lèi)型的硬件看門(mén)狗設(shè)備由相應(yīng)的硬件驅(qū)動(dòng)管理。

軟件看門(mén)狗則由Linux內(nèi)核模塊通過(guò)定時(shí)器機(jī)制實(shí)現(xiàn),此時(shí)設(shè)備節(jié)點(diǎn)/dev/watchdog并不對(duì)應(yīng)真實(shí)的物理設(shè)備,只是為應(yīng)用提供了一個(gè)與操作硬件看門(mén)狗相同的接口。各種不同類(lèi)型的硬件看門(mén)狗電路,不僅提供了驅(qū)動(dòng)程序支持,還提供了一個(gè)基于定時(shí)器的純軟件看門(mén)狗驅(qū)動(dòng),其驅(qū)動(dòng)程序的源碼位于Linux內(nèi)核源碼下面的/drivers/watchdog目錄。

與Linux下的軟件看門(mén)狗相比,硬件看門(mén)狗具有更高的可靠性。基于Linux內(nèi)核的定時(shí)器實(shí)現(xiàn)的軟件看門(mén)狗,當(dāng)內(nèi)核或中斷出現(xiàn)異常時(shí),將會(huì)失效。而硬件看門(mén)狗由自身的硬件電路控制,獨(dú)立于內(nèi)核,無(wú)論當(dāng)前系統(tǒng)狀態(tài)如何,如果硬件看門(mén)狗在設(shè)定的時(shí)間間隔內(nèi)沒(méi)有被執(zhí)行寫(xiě)操作,仍會(huì)重新啟動(dòng)系統(tǒng)。

Linux系統(tǒng)下面的軟件、硬件看門(mén)狗對(duì)應(yīng)用程序而言是透明的。應(yīng)用程序操作軟件看門(mén)狗的方式如下:打開(kāi)設(shè)備/dev/watchdog,在設(shè)定的時(shí)間間隔內(nèi)對(duì)/dev/watchdog設(shè)備執(zhí)行寫(xiě)操作。在任意時(shí)刻,只能有一個(gè)看門(mén)狗驅(qū)動(dòng)模塊被加載,管理/dev/watchdog設(shè)備節(jié)點(diǎn)。如果系統(tǒng)沒(méi)有硬件看門(mén)狗電路,可以加載軟件看門(mén)狗驅(qū)動(dòng)模塊。

3 Linux系統(tǒng)下看門(mén)狗的訪(fǎng)問(wèn)

前文提到,Linux系統(tǒng)將看門(mén)狗作為一個(gè)字符設(shè)備來(lái)管理。本節(jié)將以TI公司推出的高清視頻處理芯片TMS320DM8168(以下簡(jiǎn)稱(chēng)DM8168)芯片為例,介紹Linux下訪(fǎng)問(wèn)及操作看門(mén)狗的邏輯層次。

DM8168芯片將高清多通道系統(tǒng)的所有捕獲、壓縮、顯示以及控制功能整合于同一芯片,芯片內(nèi)部集成了硬件看門(mén)狗,外圍連接電路如圖1所示。硬件看門(mén)狗溢出同時(shí)產(chǎn)生復(fù)位(Reset)及中斷信號(hào)(Interrupt),復(fù)位信號(hào)會(huì)復(fù)位整個(gè)芯片,中斷信號(hào)可以在捕獲到中斷事件后,在中斷處理函數(shù)中增加一些額外的操作(比如將收到的看門(mén)狗溢出中斷的時(shí)間寫(xiě)進(jìn)日志,然后再?gòu)?fù)位等)。

Linux系統(tǒng)訪(fǎng)問(wèn)硬件接口需通過(guò)設(shè)備驅(qū)動(dòng)程序接口實(shí)現(xiàn),硬件看門(mén)狗也不例外。

如圖2所示,Linux系統(tǒng)下操作看門(mén)狗需要以下3個(gè)層次:

①Hardware Layer-硬件層,指硬件設(shè)備,通常提供GPIO;

②Kernel Layer-內(nèi)核層,內(nèi)核通過(guò)設(shè)備驅(qū)動(dòng)程序訪(fǎng)問(wèn)并控制硬件設(shè)備;

③Usee Space-用戶(hù)空間,應(yīng)用程序通過(guò)內(nèi)核驅(qū)動(dòng)提供的API接口(通常以打開(kāi)文件或ioctl方式),提供訪(fǎng)問(wèn)硬件設(shè)備的接口,比如打開(kāi)看門(mén)狗(int fd = open(“/dev/wat chdog”,O_RDWR))。

4 Linux系統(tǒng)下看門(mén)狗的管理

Linux啟動(dòng)過(guò)程依次為U—Boot、內(nèi)核及文件系統(tǒng),最后是應(yīng)用程序啟動(dòng)。在Linux系統(tǒng)啟動(dòng)過(guò)程中,啟用看門(mén)狗可以有效監(jiān)測(cè)系統(tǒng)狀態(tài),若異常導(dǎo)致看門(mén)狗溢出,系統(tǒng)會(huì)自動(dòng)復(fù)位以試修復(fù)問(wèn)題,從而提高系統(tǒng)的可靠性及健壯性。本節(jié)以DMS168開(kāi)發(fā)板為例,介紹Linux各個(gè)啟動(dòng)階段看門(mén)狗的管理。

4.1 U—Boot啟動(dòng)階段

開(kāi)發(fā)板上電后,執(zhí)行U—Boot的第一條指令,然后順序執(zhí)行U—Boot啟動(dòng)函數(shù)。U—Boot啟動(dòng)內(nèi)核的過(guò)程如下:

①硬件設(shè)備初始化。

②加載U—Boot第二階段代碼到RAM空間。

③設(shè)置好堆棧,跳轉(zhuǎn)到start_armboot函數(shù)入口。

④start_armboot是U—Boot執(zhí)行的第一個(gè)C語(yǔ)言函數(shù)。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Linux 看門(mén)狗

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉