如何写一个uboot 看门狗驱动
时间: 2024-05-23 16:03:49 浏览: 111
以下是一个简单的uboot看门狗驱动的示例代码:
1. 首先,在uboot目录下的include/configs/目录下添加一个新的配置文件(例如:myboard.h),并在其中添加以下宏定义:
#define CONFIG_HW_WATCHDOG
#define CONFIG_HW_WATCHDOG_TIMEOUT_MS 10000 //看门狗超时时间为10秒
2. 在uboot目录下的drivers/watchdog/目录下添加一个新的文件(例如:myboard_wdt.c),并添加以下代码:
#include <common.h>
#include <watchdog.h>
#define WDT_BASE_ADDR 0x10000000 //看门狗控制器的基地址
#define WDT_CR 0x00 //看门狗控制寄存器
static void myboard_reset_watchdog(void)
{
writel(0x1, WDT_BASE_ADDR + WDT_CR); //重置看门狗计数器
}
static int myboard_init_wdt(void)
{
writel(CONFIG_HW_WATCHDOG_TIMEOUT_MS * 2, WDT_BASE_ADDR + WDT_CR); //设置看门狗超时时间
writel(0x3, WDT_BASE_ADDR + WDT_CR); //使能看门狗
return 0;
}
static const struct watchdog_ops myboard_wdt_ops = {
.start = myboard_init_wdt,
.reset = myboard_reset_watchdog,
};
U_BOOT_DEVICE(myboard_wdt) = {
.name = "myboard_wdt",
.ops = &myboard_wdt_ops,
};
3. 在uboot目录下的common/board_f.c文件中添加以下代码:
#ifdef CONFIG_HW_WATCHDOG
extern void watchdog_init(void);
void watchdog_init(void)
{
watchdog_register_device(&myboard_wdt);
}
#endif
4. 编译uboot,并将生成的u-boot.bin烧写到开发板中。现在,uboot就支持看门狗了,当uboot在指定的时间内没有收到喂狗信号时,开发板将会自动重启。
阅读全文