色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

電源管理入門:Watchdog看門狗

yzcdx ? 來源:OS與AUTOSAR研究 ? 2023-11-29 10:11 ? 次閱讀

看門狗,又叫 watchdogtimer,是一個定時器電路, 一般有一個輸入,叫喂狗,一個輸出到MCURST端,MCU正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給 WDT 清零,如果超過規定的時間不喂狗,(一般在程序跑飛時),WDT 定時超過,就會給出一個復位信號到MCU,是MCU復位. 防止MCU死機. 看門狗的作用就是防止程序發生死循環,或者說程序跑飛。

watchdog的操作就是reset,所以跟電源是有聯系的。

1. 軟硬件watchdog的區別

通常情況下,watchdog需要硬件支持,但是如果確實沒有相應的硬件,還想使用watchdog功能,則可以使用liunx模擬的watchdog,即軟件watchdog。

硬件watchdog必須有硬件電路支持, 設備節點/dev/watchdog對應著真實的物理設備, 不同類型的硬件watchdog設備由相應的硬件驅動管理。軟件watchdog由一內核模塊softdog.ko 通過定時器機制實現,/dev/watchdog并不對應著真實的物理設備,只是為應用提供了一個與操作硬件watchdog相同的接口

硬件watchdog比軟件watchdog有更好的可靠性。軟件watchdog基于內核的定時器實現,當內核或中斷出現異常時,軟件watchdog將會失效。而硬件watchdog由自身的硬件電路控制, 獨立于內核。無論當前系統狀態如何,硬件watchdog在設定的時間間隔內沒有被執行寫操作,仍會重新啟動系統。

一些硬件watchdog卡如WDT501P 以及一些Berkshire卡還可以監測系統溫度,提供了 /dev/temperature接口。

對于應用程序而言, 操作軟件、硬件watchdog的方式基本相同:打開設備/dev/watchdog, 在重啟時間間隔內對/dev/watchdog執行寫操作。即軟件、硬件watchdog對應用程序而言基本是透明的。

在任一時刻, 只能有一個watchdog驅動模塊被加載,管理/dev/watchdog 設備節點。如果系統沒有硬件watchdog電路,則可以加載軟件watchdog驅動softdog.ko。

2. 軟件看門狗

2.1 kernel watchdog

kernel watchdog是用來檢測Lockup 的。所謂lockup,是指某段內核代碼占著CPU不放。Lockup嚴重的情況下會導致整個系統失去響應。Lockup有幾個特點:

首先只有內核代碼才能引起lockup,因為用戶代碼是可以被搶占的,不可能形成lockup(只有一種情況例外,就是SCHED_FIFO優先級為99的實時進程即使在用戶態也可能使[watchdog/x]內核線程搶不到CPU而形成soft lockup)

其次內核代碼必須處于禁止內核搶占的狀態(preemption disabled),因為Linux是可搶占式的內核,只在某些特定的代碼區才禁止搶占(例如spinlock),在這些代碼區才有可能形成lockup。

2.1.1 soft lockup

Lockup分為兩種:soft lockup 和 hard lockup,它們的區別是 hard lockup 發生在CPU屏蔽中斷的情況下。而soft lockup則是單個CPU被一直占用的情況(中斷仍然可以響應)。

NMI,即非可屏蔽中斷。即使在內核代碼中設置了屏蔽所有中斷的時候,NMI也是不可以被屏蔽的。

可屏蔽中斷包含時鐘中斷,外設中斷(比如鍵盤中斷,I/O設備中斷,等等),當我們處理中斷處理程序的時候,在中斷處理程序top half時候,在不允許嵌套的情況下,需要關閉中斷。

但NMI就不一樣了,即便在關閉中斷的情況下,他也能被響應。觸發NMI的條件一般都是ECC error之類的硬件Error。但NMI也給我們提供了一種機制,在系統中斷被誤關閉的情況下,依然能通過中斷處理程序來執行一些緊急操作,比如kernel panic

檢測soft lockup的原理是給每個CPU分配一個定時執行的內核線程[watchdog/x],如果該線程在設定的期限內沒有得到執行的話就意味著發生了soft lockup,[watchdog/x]是SCHED_FIFO實時進程,優先級為最高的99,擁有優先運行的特權。

系統會有一個高精度的計時器hrtimer(一般來源于APIC),該計時器能定期產生時鐘中斷,該中斷對應的中斷處理例程是kernel/watchdog.c: watchdog_timer_fn(),在該例程中:

要遞增計數器hrtimer_interrupts,這個計數器同時為hard lockup detector用于判斷CPU是否響應中斷;

還要喚醒[watchdog/x]內核線程,該線程的任務是更新一個時間戳;

soft lock detector檢查時間戳,如果超過soft lockup threshold一直未更新,說明[watchdog/x]未得到運行機會,意味著CPU被霸占,也就是發生了soft lockup。

linux kernel會自動檢測softlockup,在發生softlockup情況下,系統默認會打印相關warning信息。如果需要出發panic的話,可以設置

echo 1 > /proc/sys/kernel/softlockup_panic

可以同時設置 watchdog_thresh參數來定義發現softlockup以后系統panic的時間,默認是10s, 也就是說20s后系統panic。最大能設到60s,也就是說,120s后啟動系統panic。

一般來說,在production system上,不建議使用softlockup_panic選項(有可能誤傷)。可以在調試系統上使用。

2.1.1 hard lockup

Hard lockup比soft lockup更加嚴重,CPU不僅無法執行其它進程,而且不再響應中斷。檢測hard lockup的原理利用了PMU的NMI perf event,因為NMI中斷是不可屏蔽的,在CPU不再響應中斷的情況下仍然可以得到執行,它再去檢查時鐘中斷的計數器hrtimer_interrupts是否在保持遞增,如果停滯就意味著時鐘中斷未得到響應,也就是發生了hard lockup

Linux kernel設計了一個檢測lockup的機制,稱為NMI Watchdog,是利用NMI中斷實現的,用NMI是因為lockup有可能發生在中斷被屏蔽的狀態下,這時唯一能把CPU搶下來的方法就是通過NMI,因為NMI中斷是不可屏蔽的。

NMI watchdog會利用到之前講到的hrtimer。它的觸發條件是基于PMU的NMI perf event,當PMU的計數器溢出時會觸發NMI中斷,對應的中斷處理例程是 kernel/watchdog.c: watchdog_overflow_callback(),hard lockup detector就在其中,它會檢查上述hrtimer的中斷次數(hrtimer_interrupts)是否在保持遞增,如果停滯則表明hrtimer中斷未得到響應,也就是發生了hard lockup。

這里面,被watch的對象是hrtimer,而watchdog則是由PMU設備發起的NMI中斷處理程序 watchdog_overflow_callback()

hardlockup的檢測需要啟動NMI watchdog。可以通過設置內核參數實現:

echo 1 > /proc/sys/kernel/nmi_watchdog 1 在發生hardlockup情況下,如果我們需要系統panic,可以設置(默認已設定)

echo 1 > /proc/sys/kernel/hardlockup_panic

2.2 用戶態watchdog

用戶程序有可能占著臨界資源無法釋放,系統太忙,疲于響應各種中斷,導致無法執行調度程序。這都可能導致系統無法正常使用。

在這種情況下,時鐘中斷和NMI中斷仍然能夠被響應,所以內核lockup檢測機制無法檢查出來。但由于系統已經無法正常工作,我們需要一種機制,一種用戶態的watchdog,來檢測這種系統掛起的狀態,并作出相應的動作。

用戶態watchdog,自然檢測的對象是用戶態的程序(是否能被調度)。這里面,基于硬件支持程度不同,我們分為hardware watchdog和software watchdog。后者簡稱softdog。

2.2.1 softdog

使用softdog很簡單,只需要:

安裝 watchdog rpm

啟動softdog服務
-systemctl start softdog.service

默認情況下,watchdog程序會通過softdog.ko創建一個叫做/dev/watchdog1的設備(timer 設備),并且定期往它寫東西(用于更新時間戳)。

位于內核的softdog會模擬timer設備(通過時鐘中斷的方式模擬),并執行相應的中斷處理例程,該例程的目的是檢查timer 設備(即/dev/watchdog1)是否timeout。如果timeout,則執行相應動作(默認為panic)。

2.2.1 hardware watchdog

通過BMC實現、通過iTCO實現

3. 硬件看門狗

3.1 硬件寄存器介紹

看門狗主要由寄存器、計數器和狗叫模塊構成,通過寄存器對看門狗進行基本設置,計數器計算狗叫時間,狗叫模塊決定看門狗超時后發出的中斷或復位方式。

QOTOM Q300P自帶硬件看門狗,由SuperIO芯片提供,這里簡單實現一下看門狗的復位功能,只需要對看門狗的配置寄存器組和數據寄存器組進行操作。

WDTCTRL:Watch Dog Timer Control Register (Index=71h, Default=00h) 控制寄存器,主要是設置中斷,這里不涉及

WDTCONF:Watch Dog Timer Configuration Register (Index=72h, Default=001s0000b) 配置寄存器 Bit6 or Bit4設置為1即可開啟看門狗功能,這里使用Bit6脈沖信號

36904ce4-8dda-11ee-939d-92fbcf53809c.pngWDTVALLSB:Watch Dog Timer Time-out Value (LSB) Register (Index=73h, Default=38h) 低位數據寄存器WDTVALMSB:Watch Dog Timer Time-out Value (MSB) Register (Index=74h, Default=00h) 高位數據寄存器

3.2 喂狗操作

samples/watchdog/watchdog-simple.c中有一個簡單的例子:

int main(void)
{
int fd = open("/dev/watchdog", O_WRONLY);
int ret = 0;
if (fd == -1) {
perror("watchdog");
exit(EXIT_FAILURE);
}
while (1) {
ret = write(fd, "?", 1);
if (ret != 1) {
ret = -1;
break;
}
sleep(10);
}
close(fd);
return ret;
}

3.3 watchdog硬件驅動編寫

例如:drivers/watchdog/imx_sc_wdt.c中 imx_sc_wdt_probe中會調用devm_watchdog_register_device

#define DEFAULT_TIMEOUT 60
#define MAX_TIMEOUT 128

static int imx_sc_wdt_probe(struct platform_device *pdev)
{
struct watchdog_device *wdog;
struct device *dev = &pdev->dev;
int ret;

wdog = &imx_sc_wdd->wdd;
wdog->info = &imx_sc_wdt_info;
wdog->ops = &imx_sc_wdt_ops;
wdog->min_timeout = 1;
wdog->max_timeout = MAX_TIMEOUT;
wdog->parent = dev;
wdog->timeout = DEFAULT_TIMEOUT;

ret = imx_sc_wdt_set_timeout(wdog, wdog->timeout);
if (ret)
return ret;

return devm_watchdog_register_device(dev, wdog);

imx_sc_wdt_ops的定義為:

static const struct watchdog_ops imx_sc_wdt_ops = {
.owner = THIS_MODULE,
.start = imx_sc_wdt_start,
.stop  = imx_sc_wdt_stop,
.ping  = imx_sc_wdt_ping,
.set_timeout = imx_sc_wdt_set_timeout,
.set_pretimeout = imx_sc_wdt_set_pretimeout,
};

例如imx_sc_wdt_start的實現,使用了smc下發到BL31中處理,為了突出安全性。

static int imx_sc_wdt_start(struct watchdog_device *wdog)
{
struct arm_smccc_res res;

arm_smccc_smc(IMX_SIP_TIMER, IMX_SIP_TIMER_START_WDOG,
      0, 0, 0, 0, 0, 0, &res);
if (res.a0)
return -EACCES;

arm_smccc_smc(IMX_SIP_TIMER, IMX_SIP_TIMER_SET_WDOG_ACT,
      SC_TIMER_WDOG_ACTION_PARTITION,
      0, 0, 0, 0, 0, &res);
return res.a0 ? -EACCES : 0;
}

后記:

對于重要的驅動操作的寄存器,在ARM中需要放入BL31中,也就是說寄存器地址是在安全世界的,不能讓內核直接按地址操作,只暴露了通用的協議接口,就是一個約束,只能這么用,其他用法不行。暴露API而不是所有寄存器是安全世界和非安全世界的一個重要區別。“啥都懂一點,啥都不精通,

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17123

    瀏覽量

    350994
  • 看門狗
    +關注

    關注

    10

    文章

    560

    瀏覽量

    70790
  • 電源管理
    +關注

    關注

    115

    文章

    6177

    瀏覽量

    144452
  • 定時器
    +關注

    關注

    23

    文章

    3246

    瀏覽量

    114721

原文標題:電源管理入門-14 Watchdog

文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32中的獨立看門狗和窗口看門狗是什么

    在早期的MCU中是沒有看門狗這種東西的,所以產品就很容易出現死機,跑飛的情況。為了避免這種情況的出現,后期的MCU都集成了看門狗的功能。但是目前看門狗發展到今天基本上分為兩大類:獨立看門狗
    的頭像 發表于 02-20 17:47 ?2722次閱讀
    STM32中的獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>是什么

    什么是模擬看門狗?模擬看門狗有什么用處?

    看門狗大家應該再熟悉不過了,一旦忘記喂狗就會導致單片機復位,而在大部分stm32中都存在兩種類型的看門狗,Independent watchdog (IWDG)獨立看門狗和Window
    的頭像 發表于 11-22 09:40 ?1762次閱讀
    什么是模擬<b class='flag-5'>看門狗</b>?模擬<b class='flag-5'>看門狗</b>有什么用處?

    看門狗watchdog的理解

    轉帖1.什么是watchdog?watchdog,中文名稱叫做“看門狗”,全稱watchdog timer,從字面上我們可以知道其實它屬于一種定時器。然而它與我們平常所接觸的定時器在作
    發表于 12-15 09:38

    看門狗(WatchDog)是什么

    看門狗(WatchDog)是什么?看門狗簡介STM32 有兩個看門狗,一個是獨立看門狗,另外一個是窗口
    發表于 07-30 06:19

    看門狗(watchdog)的作用?STM32包含哪幾個看門狗

    1. 看門狗(watchdog)的作用:實時檢測單片機的程序運行狀態,防止程序跑飛造成無法預料的結果。2. STM32包含哪幾個看門狗(獨立看門狗和窗口
    發表于 01-10 06:54

    看門狗(WatchDog)

    LPC1138看門狗(WatchDog)。
    發表于 01-13 16:35 ?44次下載

    stm32看門狗時間計算 獨立看門狗和窗口看門狗的特性是什么

    本文為您講解STM看門狗時間計算(時限)與頻率計算,獨立看門狗和窗口看門狗的特性、區別與聯系。
    發表于 10-10 10:41 ?8762次閱讀

    看門狗(WatchDog

    看門狗(WatchDog
    發表于 10-11 14:55 ?18次下載
    <b class='flag-5'>看門狗</b>(<b class='flag-5'>WatchDog</b>

    什么是stm32看門狗?獨立看門狗和窗口看門狗工作原理解析

    stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。 獨立看門狗
    的頭像 發表于 11-06 11:48 ?2.7w次閱讀
    什么是stm32<b class='flag-5'>看門狗</b>?獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>工作原理解析

    STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

    stm32自帶兩個看門狗模塊,獨立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測和解決由軟件錯誤引起的故障;當計數器達到給定的超時值時,觸發一個中斷(僅適用于窗口型
    發表于 11-09 17:17 ?8438次閱讀
    STM32<b class='flag-5'>看門狗</b>配置(獨立<b class='flag-5'>看門狗</b>IWDG和窗口<b class='flag-5'>看門狗</b>WWDG)

    STM32:獨立看門狗、窗口看門狗的配置

    STM32單片機的看門狗有獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同。
    發表于 02-08 16:15 ?18次下載
    STM32:獨立<b class='flag-5'>看門狗</b>、窗口<b class='flag-5'>看門狗</b>的配置

    STM32中的獨立看門狗和窗口看門狗

    一、前言 在早期的MCU中是沒有看門狗這種東西的,所以產品就很容易出現死機,跑飛的情況。為了避免這種情況的出現,后期的MCU都集成了看門狗的功能。但是目前看門狗發展到今天基本上分為兩大類:獨立
    的頭像 發表于 12-22 16:58 ?2137次閱讀

    STM32中的獨立看門狗和窗口看門狗

    在早期的MCU中是沒有看門狗這種東西的,所以產品就很容易出現死機,跑飛的情況。為了避免這種情況的出現,后期的MCU都集成了看門狗的功能。但是目前看門狗發展到今天基本上分為兩大類:獨立看門狗
    的頭像 發表于 01-30 14:38 ?1368次閱讀
    STM32中的獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>

    什么是看門狗,工業路由器看門狗技術的功能優勢

    工業路由器大多都會配備看門狗技術,它是保證工業路由器傳輸過程中連續24小時不宕機的重要保護技術,那么,什么是看門狗呢?▍看門狗功能看門狗,又叫wat
    的頭像 發表于 03-27 10:16 ?1819次閱讀
    什么是<b class='flag-5'>看門狗</b>,工業路由器<b class='flag-5'>看門狗</b>技術的功能優勢

    看門狗”也有軟硬

    工業無線路由器、工業級無線DTU上“看門狗”技術為何如此受歡迎?今天我們就來搞懂它。一.什么是“看門狗看門狗,又叫watchdog,從本質上來說就是一個定時器電路,一般有一個輸入和一
    的頭像 發表于 09-08 09:52 ?1119次閱讀
    “<b class='flag-5'>看門狗</b>”也有軟硬
    主站蜘蛛池模板: 国产成人无码视频一区二区三区| FREE另类老女人| 永久免费看bbb| 一道本在线伊人蕉无码| 中文日产无乱码AV在线观| 7777色鬼xxxx欧美色夫| mxgs-877痉挛媚药按摩| 成人在免费观看视频国产| 国产精品久久一区二区三区蜜桃| 国产免费不卡| 精品视频免费在线| 毛片网站在线观看| 青青视频 在线 在线播放| 色偷偷影院| 亚洲色t图| 5580免费午夜福利院| 别插我B嗯啊视频免费| 国产精品一区二区在线观看| 饥渴的40岁熟妇完整版在线| 露露的性战k8经典| 日韩欧美国产免费看清风阁| 亚洲成人免费在线| 2022国产麻豆剧传媒剧情| YELLOW日本免费观看播放| 国产精品-区区久久久狼| 久久日本片精品AAAAA国产| 秋秋影视午夜福利高清| 亚洲 日本 欧美 中文字幕| 岳打开双腿开始配合日韩视频| a在线观看视频| 国产私拍福利精品视频| 浪潮AV色综合久久天堂| 少妇第一次交换| 一二三四电影完整版免费观看| CHINA篮球体育飞机2023 | 午夜十八岁禁| 在线观看国产高清免费不卡| 被同桌摸出水来了好爽的视频| 国语自产一区视频| 胖老太与人牲交BBWBBW高潮| 亚洲国产成人精品青青草原100 |