国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2016-01-26 09:40:20劉永紅
關(guān)鍵詞:看門狗

劉永紅

(廣東威創(chuàng)視訊科技股份有限公司,廣州 510670)

?

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

劉永紅

(廣東威創(chuàng)視訊科技股份有限公司,廣州 510670)

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

關(guān)鍵詞:Linux;看門狗;DM8168

引言

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

1看門狗的概念

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

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

2Linux系統(tǒng)對看門狗的支持

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

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

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

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

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

3Linux系統(tǒng)下看門狗的訪問

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

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

圖1 DM8168芯片看門狗電路連接圖

圖2 Linux看門狗訪問層次圖

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

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

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

② Kernel Layer—內(nèi)核層,內(nèi)核通過設(shè)備驅(qū)動程序訪問并控制硬件設(shè)備;

③ User Space—用戶空間,應(yīng)用程序通過內(nèi)核驅(qū)動提供的API接口(通常以打開文件或ioctl方式),提供訪問硬件設(shè)備的接口,比如打開看門狗(int fd = open("/dev/watchdog", O_RDWR))。

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

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

4.1U-Boot啟動階段

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

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

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

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

④ start_armboot是U-Boot執(zhí)行的第一個C語言函數(shù)。

⑤ 初始化本階段使用的硬件設(shè)備。

⑥ 檢測系統(tǒng)內(nèi)存映射。

⑦ 將內(nèi)核從Flash讀取到RAM中。

⑧ 設(shè)置內(nèi)核啟動參數(shù),然后啟動硬件看門狗,通過訪問控制寄存器來實(shí)現(xiàn)。該階段可以設(shè)置看門狗超時溢出時間為120 s。以DM8168芯片為例(后面的代碼都是基于該芯片實(shí)現(xiàn)),相關(guān)代碼為:

__raw_writel(0xBBBB, WDT_WSPR);

__raw_writel(0x4444, WDT_WSPR);

__raw_writel(wdt_trgr_time,WDT_WTGR);

這樣如果后續(xù)的內(nèi)核解壓及啟動出錯,看門狗超時可以復(fù)位開發(fā)板以重啟,重新加載內(nèi)核并試圖修復(fù)。

⑨ 完成系統(tǒng)初始化工作,U-Boot進(jìn)入主循環(huán)程序,處理用戶輸入的命令。在abortboot中,關(guān)閉看門狗,向控制寄存器依次寫入:

__raw_writel(0xAAAA, WDT_WSPR);

__raw_writel(0x5555, WDT_WSPR);

若收到用戶中斷,U-Boot自動啟動的命令后,關(guān)閉看門狗,以方便用戶調(diào)試U-Boot、設(shè)置內(nèi)核相關(guān)參數(shù)等信息。

⑩ 如果沒有收到用戶中斷命令,U-Boot會拷貝內(nèi)核鏡像并解壓內(nèi)核,開始啟動內(nèi)核調(diào)用。

4.2內(nèi)核啟動階段

在U-Boot加載了內(nèi)核之后,系統(tǒng)就進(jìn)入內(nèi)核啟動階段,此時,看門狗的管理控制也要由內(nèi)核來接管。內(nèi)核啟動主要包括內(nèi)核自解壓、注冊及加載硬件驅(qū)動程序、Flash分區(qū)等。

在內(nèi)核啟動時,內(nèi)核程序會注冊硬件看門狗的驅(qū)動程序,并執(zhí)行probe探針函數(shù),此時,內(nèi)核接管U-Boot階段的看門狗,即先關(guān)閉看門狗,然后再重新打開看門狗,并加載新的超時時長,此處設(shè)置wdt_trgr_time =120 s。

__raw_writel(0xAAAA, WDT_WSPR);

__raw_writel(0x5555, WDT_WSPR);

__raw_writel(0xBBBB, WDT_WSPR);

__raw_writel(0x4444, WDT_WSPR);

__raw_writel(wdt_trgr_time,WDT_WTGR);

這樣可以保證文件系統(tǒng)在掛載或解壓出錯時,看門狗沒有進(jìn)行喂狗操作,從而導(dǎo)致120 s超時后重啟。

在注冊完硬件驅(qū)動程序之后,內(nèi)核會掛載根文件系統(tǒng)并進(jìn)行解壓。

4.3應(yīng)用程序啟動階段

文件系統(tǒng)啟動后,用戶的應(yīng)用進(jìn)程也會開始啟動。在這個階段,通常會創(chuàng)建一個獨(dú)立的守護(hù)進(jìn)程,來接管看門狗。守護(hù)進(jìn)程啟動時,首先關(guān)閉內(nèi)核階段啟動的看門狗,并重新啟動看門狗設(shè)置超時時長,實(shí)現(xiàn)接管內(nèi)核階段看門狗的功能。在看門狗啟動后,守護(hù)進(jìn)程可以周期性地進(jìn)行喂狗操作,并通過心跳的方式同用戶進(jìn)程通信,在收不到用戶進(jìn)程的心跳包消息時,即停止喂狗操作,這樣看門狗會超時溢出導(dǎo)致系統(tǒng)重啟,以進(jìn)行故障修復(fù)。

該階段關(guān)閉看門狗的操作如下:

……

static unsigned char food = 0;

ssize_t eaten = write(fd, &food, 1);

……

守護(hù)進(jìn)程接收中斷信號的實(shí)現(xiàn)如下:

void recv_irq_signal(){

……

struct sigaction act;

sigemptyset(&act.sa_mask);

act.sa_sigaction=handle_irq_signal;

act.sa_flags =SA_SIGINFO;

if(sigaction(SIGNAL_CRITICAL,&act,NULL)<0)

syslog(LOG_ERR,"install signal error ");

……

}

看門狗超時的中斷響應(yīng)函數(shù):

void handle_irq_signal(siginfo_t *info,void *myact){

……

unsigned int warn_value=info->si_int%2;

if(warn_ value==SIGNAL_CRITICAL){

……

//處理關(guān)鍵信號

}

……

}

守護(hù)進(jìn)程通過看門狗中斷響應(yīng)函數(shù),實(shí)現(xiàn)重啟系統(tǒng)等操作,以恢復(fù)系統(tǒng)可用性。

至此,Linux從U-Boot啟動直到應(yīng)用程序完成過程中,看門狗都有相應(yīng)的啟動及管理。

4.4看門狗管理小結(jié)

Linux系統(tǒng)下,U-Boot啟動后打開硬件看門狗,保證內(nèi)核解壓及啟動出現(xiàn)異常時重啟;內(nèi)核啟動階段,接管U-Boot下的看門狗并設(shè)置時間,可以保證文件系統(tǒng)掛載、解壓及啟動出現(xiàn)異常時重啟系統(tǒng);在進(jìn)入文件系統(tǒng)后,守護(hù)進(jìn)程接管內(nèi)核階段的看門狗,并定期地執(zhí)行喂狗操作,這樣在用戶進(jìn)程出現(xiàn)異常(退出)時,守護(hù)進(jìn)程可以監(jiān)測到異常,停止喂狗操作,看門狗超時復(fù)位系統(tǒng)。嵌入式系統(tǒng)中,重啟是從故障中修復(fù)的最簡單有效的方法,通過在啟動的不同階段啟用硬件看門狗,可以有效保障系統(tǒng)異常時重啟。

5DM8168看門狗的管理

除了前文提到的Linux系統(tǒng)下看門狗的基礎(chǔ)管理,DM8168芯片的硬件看門狗外圍輸出引腳,可以同時支持Reset和Interrupt信號,功能更加強(qiáng)大。

如果只是期望看門狗超時后能重啟復(fù)位板卡,參考前節(jié)提到的方法,依次在Linux啟動的各個階段啟用及管理看門狗即可,因?yàn)榭撮T狗的溢出引腳直接連接電源及復(fù)位管理模塊。

此外,如果想在看門狗超時溢出時增加一些額外的處理,可以采用捕獲中斷信號的方法。具體流程如下:

① 注冊硬件看門狗中斷處理函數(shù),實(shí)現(xiàn)程序?yàn)?/p>

omap_irq=platform_get_resource(pdev,IORESOURCE_IRQ,0);

// 獲得中斷標(biāo)號

ret=request_irq(omap_irq,omap_wdt_irqhdl,0,pdev->name,wdev);

//注冊中斷

其中omap_wdt_irqhdl為看門狗的中斷處理函數(shù)。

② 在硬件看門狗中斷處理函數(shù)中可以增加一些附加的處理,需要注意的是,此時需要設(shè)置另外一組寄存器WDT_WDLY,以保證在復(fù)位前捕獲到中斷信號。

中斷處理函數(shù)omap_wdt_irqhdl的關(guān)鍵實(shí)現(xiàn)程序?yàn)椋?/p>

static irqreturn_t omap_wdt_irqhdl(int irq,void *dev_id){

……

u32 i=_ _raw_readl(base+ OMAP_WATCHDOG_IRQSTAT);

__raw_writel(i,base+ OMAP_WATCHDOG_IRQSTAT);

//重啟開發(fā)板

arm_machine_restart (NULL, NULL);

……

}

采用此方法后,看門狗超時產(chǎn)生中斷信號,系統(tǒng)捕獲到中斷信號后自動觸發(fā)中斷響應(yīng)函數(shù),可以更靈活地處理(比如不復(fù)位系統(tǒng),保留現(xiàn)場以便定位問題)。

結(jié)語

本文以TI公司的TMS320DM8168芯片為例,詳細(xì)介紹了Linux系統(tǒng)從U-Boot啟動、內(nèi)核啟動到文件系統(tǒng)加載及用戶程序啟動過程中看門狗的啟用及管理,通過不同階段管理看門狗,可以保證系統(tǒng)在任何一個可能出現(xiàn)問題的階段,自動重啟以修復(fù)故障,從而有效提高系統(tǒng)的可

參考文獻(xiàn)

[1] 嵌入式系統(tǒng)中看門狗的使用總結(jié)[EB/OL].[2015-07].http://blog.chinaunix.net/uid-20543672-id-3156564.html.

[2] 使用watchdog構(gòu)建高可用性的Linux系統(tǒng)及應(yīng)用[EB/OL].[2015-07].http://www.ibm.com/developerworks/cn/linux/l-cn-watchdog/index.html.

[3] ARM-Linux驅(qū)動--Watch Dog Timer(看門狗)驅(qū)動分析[EB/OL].[2015-07].http://blog.csdn.net/yming0221/article/details/6595265.

[4] TI.TMS320DM816x 達(dá)芬奇數(shù)字媒體處理器 [EB/OL].[2015-07].http://www.ti.com.cn/cn/lit/ds/symlink/tms320dm8168.pdf.

[5] TI.TMS320DM816x DaVinci Video Processors Technical Reference Manual[EB/OL].[2015-07].http://www.ti.com.cn/cn/lit/ug/sprugx8c/sprugx8c.pdf.

劉永紅(工程師),主要從事通信、計(jì)算機(jī)視覺等領(lǐng)域嵌入式軟件開發(fā)工作。

ARM在北京大學(xué)成立智能硬件創(chuàng)新聯(lián)合實(shí)驗(yàn)室

ARM將為大學(xué)提供全新支持云計(jì)算的教學(xué)套件,持續(xù)助力中國物聯(lián)網(wǎng)產(chǎn)業(yè)蓬勃發(fā)展。學(xué)生可通過ARM物聯(lián)網(wǎng)教學(xué)套件學(xué)習(xí)如何使用ARM mbed 物聯(lián)網(wǎng)設(shè)備平臺(ARM mbed IoT Device Platform)創(chuàng)建智能手機(jī)應(yīng)用程序、控制互聯(lián)設(shè)備,如機(jī)器人或操控迷你氣象站收集溫度、濕度和氣壓數(shù)據(jù)。

該套件在北京大學(xué)全新PKU-ARM-ST-Nordic智能硬件創(chuàng)新聯(lián)合實(shí)驗(yàn)室的揭幕儀式上正式發(fā)布。物聯(lián)網(wǎng)教學(xué)套件與創(chuàng)新實(shí)驗(yàn)室設(shè)施,皆由ARM及其合作伙伴意法半導(dǎo)體 和Nordic 公司共同捐贈。

ARM首席技術(shù)官M(fèi)ike Muller表示:“基于ARM的技術(shù)為全球物聯(lián)網(wǎng)部署奠定了基礎(chǔ)。我們相信,為來自全球各地的青年工程師提供相同的基礎(chǔ)技術(shù)和知識尤為重要。該教學(xué)套件圍繞物聯(lián)網(wǎng)構(gòu)建,為學(xué)生提供與真實(shí)應(yīng)用場景相同的技術(shù)和工具, 使學(xué)生走出校門就即刻成為能應(yīng)對行業(yè)挑戰(zhàn)的工程師?!?/p>

ARM物聯(lián)網(wǎng)教學(xué)套件

ARM物聯(lián)網(wǎng)教學(xué)套件包含意法半導(dǎo)體和Nordic的ARM mbed Enabled開發(fā)板、 ARM Keil MDK開發(fā)工具軟件授權(quán)以及一整套教學(xué)資料。該套件能夠幫助教師針對重要的物聯(lián)網(wǎng)技術(shù)開設(shè)實(shí)踐性課程,其中包括如何使用ARM mbed設(shè)備平臺——基于ARM Cortex-M物聯(lián)網(wǎng)設(shè)備最廣泛使用的開發(fā)平臺,并針對藍(lán)牙智能等技術(shù)以及當(dāng)前的行業(yè)標(biāo)準(zhǔn)展開深入研究。

PKU-ARM-ST-Nordic智能硬件創(chuàng)新聯(lián)合實(shí)驗(yàn)室

北京大學(xué)全新的創(chuàng)新實(shí)驗(yàn)室將向200多名電子工程和計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生開放,并提供移動計(jì)算、數(shù)字系統(tǒng)設(shè)計(jì)、嵌入式系統(tǒng)和數(shù)字信號處理等配套課程。該實(shí)驗(yàn)室由ARM以及ARM的合作伙伴ST(意法半導(dǎo)體)和Nordic Semiconductor共同提供支持。同時,ARM大學(xué)計(jì)劃項(xiàng)目還將為創(chuàng)新實(shí)驗(yàn)室的一系列學(xué)術(shù)課題(包括物聯(lián)網(wǎng)技術(shù)的相關(guān)課程),提供專業(yè)指導(dǎo)和配套課件。

Linux Watchdog Management and Application on DM8168

Liu Yonghong

(VTRON Technologies co.,Ltd.,Guangzhou 510670,China)

Abstract:With the popularity of the embedded devices such as smart phone and tablet,the reliability requriement is getting higher.Taking TI TMS320DM8168 as an example,the start and management of the watchdog are introduced during the process of U-Boot start and kernel boot to the file system load and user program startup of Linux.The system can automatic restart to restore the fault in any stage through managing the watchdog in different stages,so the realibility of the system can be improved.

Key words:Linux;watchdog;DM8168

收稿日期:(責(zé)任編輯:薛士然2015-07-06)

中圖分類號:TP311

文獻(xiàn)標(biāo)識碼:A

猜你喜歡
看門狗
把他叫醒
一種采用FPGA實(shí)現(xiàn)的通用看門狗電路
大眾科技(2015年11期)2015-11-24 01:57:16
把它叫醒
把它叫醒
硬件看門狗電路在熱泵熱水機(jī)上的應(yīng)用
河南科技(2014年10期)2014-02-27 14:09:18
ARM+Linux下看門狗應(yīng)用
電子世界(2012年24期)2012-12-17 10:49:06
遂宁市| 花垣县| 江阴市| 武安市| 禹州市| 甘洛县| 彝良县| 利辛县| 定兴县| 丹棱县| 沂源县| 米脂县| 合肥市| 枣阳市| 汶川县| 黔东| 元江| 曲沃县| 老河口市| 五指山市| 常德市| 成都市| 余庆县| 凤冈县| 南部县| 尤溪县| 巨鹿县| 嘉峪关市| 新竹市| 崇信县| 习水县| 临洮县| 萝北县| 新乡市| 同心县| 巴林右旗| 龙川县| 裕民县| 临泽县| 丹寨县| 沐川县|