Во встроенной системе, использующей BSP linux 3.2 на sitara AM3359, при запуске приложения я хочу определить, что вызвало последнюю перезагрузку и сохранить этот статус в одном из двух счетчики: сброс сторожевого таймера и сброс при включении.Последнее обнаружение перезагрузки на PhyCORE-AM335x-PD13.1.2 Linux 3.2
Обычно в MCU, я испытываю сторожевой зарезервировав места в оперативной памяти и написать специальный ключ на первую загрузку и сброс с помощью сторожевого таймера. Если нет, то при перезагрузке он включается, если он там, это перезагрузка сторожевого таймера.
Мой первый вопрос: как сохранить ключевые переменные в ОЗУ, которые выдержат перезагрузку или сброс сторожевого таймера?
Кажется, что что-то чистое в баране при загрузке ... могу ли я отключить это?
Обычно существует регистр с этой информацией. На AM335x есть бит PRM_RSTST с битом (WDT1_RST), я использую ioctl() с WDIOC_GETBOOTSTATUS, чтобы проверить, вызвана ли последняя загрузка вызванным сторожевым устройством или его перезагрузкой. Этот призыв не возвращает мне то, что я могу понять. Может кто-нибудь объяснить это? Как я могу получить этот регистр ...
Power ON: test1: 1076092848 test2: 1076113328 test3: 1075589040 test4: 1076203440 watchdog: test5: 1076481968 test6: 1075732400 test7: 1075965872
код использования:
/* Check if last boot is caused by watchdog */ if (ioctl(fd, WDIOC_GETBOOTSTATUS, &bootstatus) == 0) { fprintf(stdout, "Last boot is caused by : %s, bootstatus= %d\n", (bootstatus != 0) ? "Watchdog" : "Power-On-Reset", bootstatus); } else { fprintf(stderr, "Error: Cannot read watchdog status\n"); exit(EXIT_FAILURE); }
Есть еще один способ, чтобы получить эту информацию (MMAP, написать драйвер, SYS, и т.д.)?
Спасибо за ваш ответ. Возможно, мне придется это сделать, чтобы проверить сторожевого таймера при загрузке. – Phil