衡山派开发板看门狗(WDT)驱动测试指南:从复位到喂狗的完整功能验证
衡山派开发板看门狗(WDT)驱动测试指南从复位到喂狗的完整功能验证大家好我是衡山派开发板的老用户了。最近在项目里用到了看门狗功能发现很多刚开始接触Luban-Lite系统的朋友对如何测试看门狗驱动有点摸不着头脑。看门狗是嵌入式系统里防止程序“跑飞”的“保险丝”测试它是否正常工作至关重要。今天我就结合自己的经验带大家手把手走一遍衡山派开发板上看门狗驱动的完整测试流程从最简单的复位验证到复杂的喂狗、预超时设置保证你跟着做一遍就能彻底掌握。1. 测试前的准备工作在开始“玩转”看门狗之前咱们得先把测试环境搭建好。这就像做实验前要准备好烧杯和试剂一样准备工作做扎实了后面的测试才能顺利进行。1.1 硬件准备硬件方面很简单你只需要衡山派开发板主角就是它。USB转串口线用于连接开发板和你的电脑。电脑用来操作和观察。1.2 软件配置软件配置是重点我们需要在Luban-Lite操作系统中打开看门狗的测试功能。首先通过串口终端软件比如MobaXterm、SecureCRT或者Putty连接到你的开发板确保能正常进入系统命令行。接下来我们要编译一个包含看门狗测试命令的系统镜像。操作步骤如下进入你的Luban-Lite源代码根目录。在终端里输入配置命令scons --menuconfig这个命令会打开一个图形化的配置界面。在配置界面中按照下面的路径找到看门狗测试选项并打开它首先进入Drivers options ---然后进入Drivers examples ---最后找到[*] Enable WDT driver test command这一项按空格键选中它前面会出现一个*号。注意这个步骤是在你的开发主机通常是电脑上进行的目的是修改编译配置而不是在开发板的串口终端里操作。配置完成后保存并退出配置界面。然后重新编译整个Luban-Lite系统scons将新编译好的系统镜像烧录到衡山派开发板上并重启。完成以上步骤后你的系统里就包含了我们接下来要用的reboot和test_wdt这两个测试命令了。2. 复位功能测试验证看门狗的“终极手段”看门狗最核心、最终极的功能是什么就是在系统“卡死”的时候强制重启它让系统恢复活力。所以我们的第一个测试就是验证这个复位功能是否有效。在衡山派的Luban-Lite驱动中看门狗模块注册了一个简单的reboot命令。这个命令会直接触发看门狗复位系统是验证复位通路是否畅通的最直接方法。测试步骤非常简单确保开发板系统已启动并进入了命令行界面通常提示符是aic /。在命令行中直接输入reboot命令然后按回车。aic / reboot预期结果与解读当你输入命令后串口终端会立刻打印出重启信息Restarting system ...紧接着你会看到熟悉的系统启动日志滚动出现比如DDR初始化、U-Boot启动等。01-01 08:05:22 I/WDT: Restarting system ... Pre-Boot Program ... (2023-03-02 14:20:30) Going to init DDR2. freq: 504MHz, size: 64MB. DDR2 initialized PBP done U-Boot SPL 2021.10-00008-g13511a4f-dirty (Apr 17 2023 - 13:25:13 0800) ...看到这个就说明看门狗的复位功能是正常的这个命令虽然简单但它证明了从软件触发到硬件重启的整个链路是通的这是所有高级功能的基础。3. 综合功能测试深入看门狗的“高级玩法”通过了基础复位测试咱们来点更深入的。看门狗不仅仅是个“重启按钮”它还有很多可配置的参数比如超时时间、预超时中断、喂狗窗口等。这些功能都通过test_wdt命令来测试。首先我们来看看这个命令有哪些“招式”。在命令行输入aic / test_wdt -u-u参数代表usage即打印使用帮助。你会看到如下信息Usage: test_wdt [-s timeout] [-p pretimeout] [-c clear threshold] [-g] [-k] [-u] -s, --set-timeout Set a timeout, in second -p, --set-pretimeout Set a pretimeout, in second -c, --set-clear threshold Set clear threshold,in second(0~3) -g, --get-timeout Get the current timeout, in second -k, --keepalive Keepalive the watchdog -u, --usage我来给大家翻译一下每个参数是干嘛的-s设置看门狗的超时时间单位秒。设置后会立即启动看门狗如果不在超时前喂狗系统就会复位。-p设置预超时时间单位秒。这个功能很实用它会在真正复位前比如提前3秒产生一个中断给你一个“最后处理”的机会比如保存关键数据。-c设置清除阈值或喂狗窗口单位秒范围0~3。这是一个安全机制防止程序错误地、过于频繁地喂狗。设置了之后只有在超时前的这个时间窗口内喂狗才有效。-g获取当前设置的超时时间。-k执行一次“喂狗”操作重置看门狗计数器。-u就是显示上面这个帮助信息。下面我通过几个典型的测试场景带你玩转这些功能。3.1 场景一测试超时复位这是最经典的测试验证看门狗能否在指定时间后复位系统。设置并启动看门狗我们设置一个较短的超时时间比如3秒。aic / test_wdt -s 3执行这条命令后看门狗计数器就开始从3秒倒计时了。什么也不做等待结果接下来的3秒内不要进行任何喂狗操作。你会观察到大约3秒后系统自动重启了串口再次打印启动日志。这说明看门狗超时复位功能完美生效。踩坑提醒第一次测试时建议超时时间设短一点如3-5秒快速验证功能。如果设成60秒你得等一分钟才能看到结果。3.2 场景二测试喂狗功能看门狗不能光会重启还得能被“安抚”喂狗才行。这个测试验证我们能否在超时前阻止复位。启动看门狗同样先设置一个超时时间比如10秒给自己充足的操作时间。aic / test_wdt -s 10在超时前喂狗等待几秒比如过了5秒然后执行喂狗命令aic / test_wdt -k执行后看门狗的计数器会被重置重新从10秒开始倒计时。重复喂狗你可以多次执行test_wdt -k。只要两次喂狗的间隔小于10秒系统就永远不会重启。这就模拟了正常程序中主循环定期喂狗以保证系统正常运行的情况。3.3 场景三测试喂狗窗口清除阈值这是一个高级安全特性。想象一下如果你的程序跑飞了但错误地进入了一个疯狂喂狗的循环看门狗就失效了。喂狗窗口就是为了防止这种情况。设置喂狗窗口我们设置清除阈值为3秒。aic / test_wdt -c 3这个设置的含义是只有在超时前的最后3秒内喂狗才是有效的。提前喂狗会被忽略。设计测试假设超时时间设为10秒test_wdt -s 10。错误操作在启动看门狗后第2秒就喂狗-k。因为此时距离超时还有8秒不在3秒的窗口内所以这次喂狗无效。系统仍会在第10秒重启。正确操作在启动看门狗后第8秒或更晚但在第10秒前喂狗。此时已进入最后3秒的窗口喂狗成功系统不会重启。这个功能测试需要你更精细地计时但它对于构建高可靠性的系统非常重要。3.4 场景四获取与验证配置你可以随时使用-g参数来查询当前看门狗的超时时间设置用于验证你的配置是否生效。aic / test_wdt -g命令会返回当前设置的超时时间值。4. 测试心得与注意事项走完整个测试流程相信你对衡山派看门狗驱动的功能已经有了直观的理解。最后分享几个我在实际项目中总结的点测试顺序建议先测reboot再测test_wdt -s和-k最后再尝试-c清除阈值和-p预超时中断这些高级功能。由简入繁理解更深刻。超时时间设置在实际产品代码中超时时间的设置需要仔细权衡。设得太短可能因为某个稍长的正常任务导致误复位设得太长系统“死”了太久才恢复可能失去意义。需要根据你的任务最坏执行时间来评估。喂狗的位置在你的应用程序中喂狗操作test_wdt -k对应的函数调用应该放在主循环中确保系统在正常运行。但要避免在中断服务程序里喂狗因为即使主程序卡死中断可能还在响应这会让看门狗失效。预超时的利用-p参数设置的预超时中断是一个很好的“临终关怀”机会。你可以在这个中断服务程序里把最重要的系统状态、数据紧急保存到非易失性存储器中这样即使接下来复位了也能知道上次是怎么“死”的。好了关于衡山派开发板看门狗驱动的测试指南就到这里。最好的学习方式就是动手赶紧连接你的开发板把上面的命令都敲一遍吧。遇到问题多看看串口打印的日志那里面往往藏着答案。