This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/TMS320DM8168:CAN#39;t 禁用 DM8168 DVRRDK 中的看门狗

Guru**** 2587365 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/637239/linux-tms320dm8168-can-t-disable-the-watchdog-in-dm8168-dvrrdk

器件型号:TMS320DM8168

工具/软件:Linux

您好、香榭丽舍

客户使用了 dm8168+dvrrdk4.0.0.3、他希望 通过看门狗重置整个芯片、包括 A8+DSP+M3、但他没有重新路由 WD_OUT 引脚、他使用了软件看门狗。  

他进行了以下测试:

如果时间<10s、系统将不会复位。  

/sawatchdog 15,如果时间大于10s,系统将复位。  

但我无法使用 Ctrl+c 或 killall sawatchdog 重置系统。

下面是测试代码。  

intfd;
voidcatch_int(intsignum)
{
        signal(SIGINT, catch_int);
        printf("In signal handler\n");
        if(0 != close(fd))
                printf("Close failed in signal handler\n");
        else
                printf("Close succeeded in signal handler\n");
}
intmain(intargc, constchar*argv[]) {
        
        intsleep_time = atoi(argv[1]);
        intdata = 0;
        intret_val;
        //signal(SIGINT, catch_int);
        fd=open("/dev/watchdog",O_WRONLY);      
        if(fd==-1) {
                perror("watchdog");
                return1;
        }
        ret_val = ioctl (fd, WDIOC_GETTIMEOUT, &data);
        if(ret_val) {
                printf("\nWatchdog Timer : WDIOC_GETTIMEOUT failed");
        }
        else{
                printf("\nCurrent timeout value is : %d seconds\n", data);
        }
        data = 10;
        ret_val = ioctl (fd, WDIOC_SETTIMEOUT, &data);
        if(ret_val) {
                printf("\nWatchdog Timer : WDIOC_SETTIMEOUT failed");
        }
        else{
                printf("\nNew timeout value is : %d seconds", data);
        }
        ret_val = ioctl (fd, WDIOC_GETTIMEOUT, &data);
        if(ret_val) {
                printf("\nWatchdog Timer : WDIOC_GETTIMEOUT failed");
        }
        else{
                printf("\nCurrent timeout value is : %d seconds\n", data);
        }
        while(1)
        {
            if(1 != write(fd, "\0", 1))
                    {
                            printf("Write failed\n");
                            break;
                    }
                    else
                        printf("Write succeeded\n");
            sleep(sleep_time);
        }
    
    if(0 != close (fd))
                printf("Close failed\n");
        else
                printf("Close succeeded\n");
        return0;
}

Thanks.

Rgds
Shine
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shine、

    根据我的理解、您希望在基址0x480C2000上使用软件看门狗、而不是系统看门狗计时器(WDTimer1)。  为此、您是否在.config 文件中启用了 CONFIG_SOFT_Watchdog 并禁用了 CONFIG_OMAP-Watchdog?

    [引用 user="Shine">他执行了以下测试:

    如果时间<10s、系统将不会复位。  

    /sawatchdog 15,如果时间大于10s,系统将复位。  [/报价]

    这些结果符合预期、对吧? 确保您已与以下 wiki 保持一致:

    [引用 user="Shine"]但我无法使用 Ctrl+c 或 killall 锯切带重置系统。

    从哪里可以找到有关 Ctrl+c 应该重置 DM816x 器件的信息?  从哪里可以找到 killall 应重置 DM816x 设备的信息?

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    闪耀、

    如果需要使用 Ctrl-c 和/或 killall 禁用软件看门狗,请确保第一个看门狗作为进程映射。

    一旦打开‘/dev/watchdog’,看门狗就会自动启动。 要停止看门狗、您需要:

    1.将‘V’字符写入‘/dev/watchdog’,以防止看门狗意外停止
    2.关闭‘/dev/watchdog’文件

    在内核配置中启用了‘CONFIG_Watchdog_NOWAYOUT’时,通过关闭文件来停止看门狗会出现异常。 启用此选项后、看门狗根本无法停止。 因此、您将需要始终馈送/启动它、否则它将重置系统。

    如果器件/dev/watchdog 已正确关闭、则可以停止看门狗守护程序、而不会导致重新启动、除非您的内核已在启用 CONFIG_Watchdog_NOWAYOUT 选项的情况下进行编译。



    有关更多信息、请参阅以下指针:

    processors.wiki.ti.com/.../Multithreaded_Debugging_Made_Easier_by_Forcing_Core_Dumps
    www.thegeekstuff.com/.../

    www.kernel.org/.../watchdog-api.txt
    linux.die.net/.../watchdog
    www.systutorials.com/.../
    embeddedfreak.wordpress.com/.../
    stackoverflow.com/.../linux-software-watchdog

    此致、
    帕维尔