首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PhyCORE-AM335x-PD13.1.2 Linux 3.2上的最后一次重新启动检测

PhyCORE-AM335x-PD13.1.2 Linux 3.2上的最后一次重新启动检测
EN

Stack Overflow用户
提问于 2014-11-21 02:45:28
回答 2查看 726关注 0票数 1

在sitara AM3359上使用BSPLinux3.2的嵌入式系统中,在应用程序启动时,我希望检测导致上次重新启动的原因,并将此状态保存在两个计数器中的一个:看门狗重置和电源启动重置。

  1. 通常在单片机中,我通过在内存中预留点来测试看门狗,并在第一次启动时写入特殊的密钥,然后使用看门狗进行重置。如果没有在那里,当重新启动,它是电源,如果它在那里,它是一个看门狗重置。 我的第一个问题是,如何保存内存中的关键变量,以便在重新启动或重新设置看门狗时存活下来?在boot...can上,这似乎是件很干净的事情--我禁用了它?
  2. 通常会有一个带有这些信息的登记簿。在AM335x上有位(WDT1_RST)的PRM_RSTST寄存器,我使用ioctl()和WDIOC_GETBOOTSTATUS来检查上一次引导是由看门狗引起的还是由电源复位引起的。这个电话回不了我能理解的东西。有人能解释一下吗?我怎么才能拿到这个登记簿..。 电源: test1: 1076092848 test2: 1076113328 test3: 1075589040 test4: 1076203440看门狗: test5: 1076481968 test6: 1075732400 test7: 1075965872 代码使用: /*检查上一次引导是否由看门狗*/ if (ioctl(fd,WDIOC_GETBOOTSTATUS和== 0) ==0引起){ fprintf(stdout,“最后一次引导是由:%s,bootstatus= %d\n”引起,(== != 0)?“看门狗”:“电源复位”,引导状态);}{ fprintf(stderr,“错误:不能读取看门狗状态\n”);退出(EXIT_FAILURE)};
  3. 是否还有其他方法来获取这些信息(mmap、写驱动程序、sys等)?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-25 13:51:53

我首先使用终端命令devmem0x44E00F08 (busybox)来查看读取物理内存是否有效,然后使用mmap()读取PRM_RSTST寄存器,并知道最后一次重置是否是看门狗重置。

票数 1
EN

Stack Overflow用户

发布于 2014-11-24 08:49:29

我建议您使用引导加载程序来查看处理器寄存器值(对于u-boot,我认为命令是reginfo)。对于存储看门狗键的内存,使用相同的方式(但使用另一个命令)。使用引导加载程序调试之后,您可以考虑将它们传递给内核。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27053311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档