powerpc平台watchdog總結

2021-06-25 13:48:19 字數 3013 閱讀 6616

這裡使用了adm706晶元,wdi餵狗引腳與cpugpio3相連。

wdo看門狗超時復位訊號輸出引腳,與/mr手動復位輸入相連,也就是會產生乙個reset訊號。

原理圖如下所示:

首先需要在include/configs/***.h檔案中,新增乙個巨集定義:

#defineconfig_hw_watchdog

啟動hw_watchdog功能。

因為在include/watchdog.h中有watchdog巨集定義如下:

#ifdefconfig_hw_watchdog

#if defined(__assembly__)

#define watchdog_reset blhw_watchdog_reset

#else

extern voidhw_watchdog_reset(void);

#define watchdog_resethw_watchdog_reset

#endif /* __assembly__ */

#else

/** maybe a software watchdog?

*/#if defined(config_watchdog)

#if defined(__assembly__)

#define watchdog_resetbl watchdog_reset

#else

extern voidwatchdog_reset(void);

#define watchdog_resetwatchdog_reset

#endif

#else

/** no hardware or softwarewatchdog.

*/#if defined(__assembly__)

#define watchdog_reset/**** do_not_del_this_comment*/

#else

#definewatchdog_reset() {}

#endif /* __assembly__ */

#endif /* config_watchdog &&!__assembly__ */

#endif/* config_hw_watchdog */

在定義了config_hw_watchdog巨集之後,系統就會使用hw_watchdog_reset()函式,二者個函式就定義在arch/powerpc/cpu/mpc85xx/cpu.c檔案中,這裡使用的是powerpc的p2020晶元,也就是mpc85xx系列晶元。

新增watchdog功能**實現如下:

#ifdefconfig_hw_watchdog

#definegpio_reg_base   0xffe0f000

#definegpio_reg_gpdir  (gpio_reg_base + 0x00)

#definegpio_reg_gpodr  (gpio_reg_base + 0x04)

#definegpio_reg_gpdat  (gpio_reg_base + 0x08)

#definegpio_3_offset   0x10000000

void

watchdog_adm_reset(void)

void

hw_watchdog_reset(void)

#endif

uboot中基本是到處都使用了乙個watchdog_reset巨集,基本上每執行一段時間就會呼叫這個巨集來餵狗,這樣實現的乙個看門狗偽狗功能。

這個驅動很簡單,就是新增乙個定時器,每隔一段時間就餵狗一次。

**如下:

/**     driver for gpio-controlled adm706 hardware watchdogs.**/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#definegpio_reg_base   0xffe0f000

#definegpio_reg_gpdir  (gpio_mem + 0x00)

#definegpio_reg_gpodr  (gpio_mem + 0x04)

#definegpio_reg_gpdat  (gpio_mem + 0x08)

#definegpio_3_offset   0x10000000

staticvoid *gpio_mem;

void

watchdog_adm_reset(void)

staticstruct adm_wdt_device;

staticvoid adm_wdt_trigger(unsigned long unused)

staticvoid adm_wdt_start(void)

staticint __init adm_wdt_init(void)

arch_initcall(adm_wdt_init);

staticvoid __exit adm_wdt_exit(void)

module_exit(adm_wdt_exit);

module_author("xiaohaixu");

module_description("driverfor gpio controlled adm706 watchdogs");

module_license("gpl");

module_alias_miscdev(watchdog_minor);

module_alias("adm706gpio-controlled watchdog");

PowerPC簡單了解

powerpc相對於arm優勢 powerpc晶元憑藉其出色的效能和高度整合和技術先進特性在網路通訊應用,工業控制應用,家用數位化,網路儲存領域,軍工領域,電力系統控制等都具有非常廣泛的應用 由於powerpc相對arm器件來說 稍貴,另外arm開 發工具盜版到處都是,所以在中國目前來說powerp...

PowerPC組合語言

在了解指令集本身之前,有兩項關於組合語言的關鍵內容需要理解,也就是記憶體模型和獲取 執行週期。記憶體模型非常簡單。記憶體只儲存一種東西 固定範圍內的數字,也稱為位元組 在大多數計算機上,這是乙個 0 到 255 之間的數字 每個儲存單元都使用乙個有序位址定位。設想乙個龐大的空間,其中有許多信箱。每個...

PowerPC開發資源

1 developerworks power architecture 專區是了解有關 power 和 powerpc 晶元及其相關技術的最佳資源。2 powerpc體系結構學習筆記 3 powerpc 體系結構開發者指南 介紹powerpc比較經典的入門級別文章,雖然文章不長,但內容還是比較豐富的...