?

Linux看門狗管理及在DM8168芯片上的應用

2016-01-26 09:40劉永紅
單片機與嵌入式系統應用 2015年12期
關鍵詞:看門狗

劉永紅

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

?

Linux看門狗管理及在DM8168芯片上的應用

劉永紅

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

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

關鍵詞:Linux;看門狗;DM8168

引言

隨著智能終端及移動互聯網的發展,Linux系統被應用到越來越多的嵌入式設備中,如移動通信基站、Android(基于Linux內核)智能手機、智能手環等。不同領域的應用都對Android/Linux系統的可靠性及可用性有嚴格的要求。在嵌入式系統中,CPU必須可靠工作,即使因為某種錯誤或異常進入錯誤狀態,系統應該可以自動復位,看門狗也可以在系統進入錯誤狀態后的一段時間內重啟復位,以實現系統自動從故障恢復。

1看門狗的概念

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

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

2Linux系統對看門狗的支持

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

Linux系統下的硬件看門狗,必須有硬件電路支持,設備節點/dev/watchdog對應著真實的物理設備,不同類型的硬件看門狗設備由相應的硬件驅動管理。

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

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

Linux系統下面的軟件、硬件看門狗對應用程序而言是透明的。應用程序操作軟件看門狗的方式如下:打開設備/dev/watchdog,在設定的時間間隔內對/dev/watchdog設備執行寫操作。在任意時刻, 只能有一個看門狗驅動模塊被加載,管理/dev/watchdog 設備節點。如果系統沒有硬件看門狗電路,可以加載軟件看門狗驅動模塊。

3Linux系統下看門狗的訪問

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

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

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

圖2 Linux看門狗訪問層次圖

Linux系統訪問硬件接口需通過設備驅動程序接口實現,硬件看門狗也不例外。

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

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

② Kernel Layer—內核層,內核通過設備驅動程序訪問并控制硬件設備;

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

4Linux系統下看門狗的管理

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

4.1U-Boot啟動階段

開發板上電后,執行U-Boot的第一條指令,然后順序執行U-Boot啟動函數。U-Boot啟動內核的過程如下:

① 硬件設備初始化。

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

③ 設置好堆棧,跳轉到start_armboot函數入口。

④ start_armboot是U-Boot執行的第一個C語言函數。

⑤ 初始化本階段使用的硬件設備。

⑥ 檢測系統內存映射。

⑦ 將內核從Flash讀取到RAM中。

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

__raw_writel(0xBBBB, WDT_WSPR);

__raw_writel(0x4444, WDT_WSPR);

__raw_writel(wdt_trgr_time,WDT_WTGR);

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

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

__raw_writel(0xAAAA, WDT_WSPR);

__raw_writel(0x5555, WDT_WSPR);

若收到用戶中斷,U-Boot自動啟動的命令后,關閉看門狗,以方便用戶調試U-Boot、設置內核相關參數等信息。

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

4.2內核啟動階段

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

在內核啟動時,內核程序會注冊硬件看門狗的驅動程序,并執行probe探針函數,此時,內核接管U-Boot階段的看門狗,即先關閉看門狗,然后再重新打開看門狗,并加載新的超時時長,此處設置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);

這樣可以保證文件系統在掛載或解壓出錯時,看門狗沒有進行喂狗操作,從而導致120 s超時后重啟。

在注冊完硬件驅動程序之后,內核會掛載根文件系統并進行解壓。

4.3應用程序啟動階段

文件系統啟動后,用戶的應用進程也會開始啟動。在這個階段,通常會創建一個獨立的守護進程,來接管看門狗。守護進程啟動時,首先關閉內核階段啟動的看門狗,并重新啟動看門狗設置超時時長,實現接管內核階段看門狗的功能。在看門狗啟動后,守護進程可以周期性地進行喂狗操作,并通過心跳的方式同用戶進程通信,在收不到用戶進程的心跳包消息時,即停止喂狗操作,這樣看門狗會超時溢出導致系統重啟,以進行故障修復。

該階段關閉看門狗的操作如下:

……

static unsigned char food = 0;

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

……

守護進程接收中斷信號的實現如下:

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 ");

……

}

看門狗超時的中斷響應函數:

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

……

unsigned int warn_value=info->si_int%2;

if(warn_ value==SIGNAL_CRITICAL){

……

//處理關鍵信號

}

……

}

守護進程通過看門狗中斷響應函數,實現重啟系統等操作,以恢復系統可用性。

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

4.4看門狗管理小結

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

5DM8168看門狗的管理

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

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

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

① 注冊硬件看門狗中斷處理函數,實現程序為

omap_irq=platform_get_resource(pdev,IORESOURCE_IRQ,0);

// 獲得中斷標號

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

//注冊中斷

其中omap_wdt_irqhdl為看門狗的中斷處理函數。

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

中斷處理函數omap_wdt_irqhdl的關鍵實現程序為:

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);

//重啟開發板

arm_machine_restart (NULL, NULL);

……

}

采用此方法后,看門狗超時產生中斷信號,系統捕獲到中斷信號后自動觸發中斷響應函數,可以更靈活地處理(比如不復位系統,保留現場以便定位問題)。

結語

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

參考文獻

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

[2] 使用watchdog構建高可用性的Linux系統及應用[EB/OL].[2015-07].http://www.ibm.com/developerworks/cn/linux/l-cn-watchdog/index.html.

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

[4] TI.TMS320DM816x 達芬奇數字媒體處理器 [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.

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

ARM在北京大學成立智能硬件創新聯合實驗室

ARM將為大學提供全新支持云計算的教學套件,持續助力中國物聯網產業蓬勃發展。學生可通過ARM物聯網教學套件學習如何使用ARM mbed 物聯網設備平臺(ARM mbed IoT Device Platform)創建智能手機應用程序、控制互聯設備,如機器人或操控迷你氣象站收集溫度、濕度和氣壓數據。

該套件在北京大學全新PKU-ARM-ST-Nordic智能硬件創新聯合實驗室的揭幕儀式上正式發布。物聯網教學套件與創新實驗室設施,皆由ARM及其合作伙伴意法半導體 和Nordic 公司共同捐贈。

ARM首席技術官Mike Muller表示:“基于ARM的技術為全球物聯網部署奠定了基礎。我們相信,為來自全球各地的青年工程師提供相同的基礎技術和知識尤為重要。該教學套件圍繞物聯網構建,為學生提供與真實應用場景相同的技術和工具, 使學生走出校門就即刻成為能應對行業挑戰的工程師?!?/p>

ARM物聯網教學套件

ARM物聯網教學套件包含意法半導體和Nordic的ARM mbed Enabled開發板、 ARM Keil MDK開發工具軟件授權以及一整套教學資料。該套件能夠幫助教師針對重要的物聯網技術開設實踐性課程,其中包括如何使用ARM mbed設備平臺——基于ARM Cortex-M物聯網設備最廣泛使用的開發平臺,并針對藍牙智能等技術以及當前的行業標準展開深入研究。

PKU-ARM-ST-Nordic智能硬件創新聯合實驗室

北京大學全新的創新實驗室將向200多名電子工程和計算機科學專業的學生開放,并提供移動計算、數字系統設計、嵌入式系統和數字信號處理等配套課程。該實驗室由ARM以及ARM的合作伙伴ST(意法半導體)和Nordic Semiconductor共同提供支持。同時,ARM大學計劃項目還將為創新實驗室的一系列學術課題(包括物聯網技術的相關課程),提供專業指導和配套課件。

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

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

中圖分類號:TP311

文獻標識碼:A

猜你喜歡
看門狗
一種嵌入式計算機系統的看門狗設計
把他叫醒
一種VxWorks平臺下的軟件看門狗設計缺陷及改進方法
把它叫醒
把它叫醒
淺談“看門狗”的應用及設計思路
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合