odroid-xu4:application_note:software:linux_watchdog

Hardware Watchdog on Linux/Ubuntu

Watchdog timers are commonly found in embedded systems and other computer-controlled equipment where humans cannot easily access the equipment or would be unable to react to faults in a timely manner.
In such systems, the computer cannot depend on a human to reboot it if it hangs; it must be self-reliant.
ODROID-XU3/XU4 kernel support s3c2410_wdt to control the Power Management Unit (PMU).
s3c2410_wdt driver is built-in so that watchdog daemon can configure the driver.

Note..
If you are using the 3.10.y kernel, kernel update 3.10.106-xxx or higher.
If you are using the 4.9.y kernel, kernel update 4.9.51-xxx or higher.
If you are using the 5.4.y kernel, kernel update 5.4.211-xxx or higher.

target
odroid@odroid:~$ uname -a
Linux odroid 3.10.106+ #4 SMP PREEMPT Tue Sep 26 11:58:27 KST 2017 armv7l armv7l armv7l GNU/Linux
target
odroid@odroid:~$ uname -a
Linux odroid 4.9.51-64 #1 SMP PREEMPT Sat Sep 23 03:28:28 UTC 2017 armv7l armv7l armv7l GNU/Linux
target
odroid@odroid:~# uname -a
Linux odroid 4.14.5-92 #1 SMP PREEMPT Mon Dec 11 15:48:15 UTC 2017 armv7l armv7l armv7l GNU/Linux
target
odroid@odroid:~# uname -a
Linux odroid 5.4.211-407 #1 SMP PREEMPT Fri Aug 26 16:27:02 UTC 2022 armv7l armv7l armv7l GNU/Linux

To install watchdog daemon

target
odroid@odroid:~$ sudo apt-get install watchdog

Append the default watchdog configuration. /etc/default/watchdog

target
odroid@odroid:~$ cat /etc/default/watchdog
# Start watchdog at boot time? 0 or 1
run_watchdog=1
# Start wd_keepalive after stopping watchdog? 0 or 1
run_wd_keepalive=1
# Load module before starting watchdog
watchdog_module="none"
# Specify additional watchdog options here (see manpage).
watchdog_options="-s -v -c /etc/watchdog.conf"

Note: Watchdog drivers start automatically as it's buildin, but only if a watchdog daemon to configure the times.

You need to edit the /etc/watchdog.conf file to un-comment and so actually use the /dev/watchdog device access to the module. Otherwise the watchdog will not use the hardware and rely only on its internal code to soft-reboot a broken machine

target
odroid@odroid:~$ cat /etc/watchdog.conf
#ping                   = 172.31.14.1
#ping                   = 172.26.1.255
#interface              = eth0
#file                   = /var/log/messages
#change                 = 1407
 
# Uncomment to enable test. Setting one of these values to '0' disables it.
# These values will hopefully never reboot your machine during normal use
# (if your machine is really hung, the loadavg will go much higher than 25)
#max-load-1             = 24
#max-load-5             = 18
#max-load-15            = 12
 
# Note that this is the number of pages!
# To get the real size, check how large the pagesize is on your machine.
#min-memory             = 1
#allocatable-memory     = 1
 
#repair-binary          = /usr/sbin/repair
#repair-timeout         = 
#test-binary            = 
#test-timeout           = 
 
watchdog-device = /dev/watchdog
 
# Defaults compiled into the binary
#temperature-device     =
#max-temperature        = 120
 
# Defaults compiled into the binary
#admin                  = root
#interval               = 1
#logtick                = 1
#log-dir                = /var/log/watchdog
 
# This greatly decreases the chance that watchdog won't be scheduled before
# your machine is really loaded
realtime                = yes
priority                = 1
 
# Check if rsyslogd is still running by enabling the following line
#pidfile                = /var/run/rsyslogd.pid  
target
odroid@odroid:~$ cat /etc/watchdog.conf
# ====================================================================                                                                                                                                             
# Configuration for the watchdog daemon. For more information on the                                                                                                                                               
# parameters in this file use the command 'man watchdog.conf'                                                                                                                                                      
# ====================================================================                                                                                                                                             
 
# =================== The hardware timer settings ====================                                                                                                                                             
#                                                                                                                                                                                                                  
# For this daemon to be effective it really needs some hardware timer                                                                                                                                              
# to back up any reboot actions. If you have a server then see if it                                                                                                                                               
# has IPMI support. Otherwise for Intel-based machines try the iTCO_wdt                                                                                                                                            
# module, otherwise (or if that fails) then see if any of the following                                                                                                                                            
# module load and work:                                                                                                                                                                                            
#                                                                                                                                                                                                                  
# it87_wdt it8712f_wdt w83627hf_wdt w83877f_wdt w83977f_wdt                                                                                                                                                        
#                                                                                                                                                                                                                  
# If all else fails then 'softdog' is better than no timer at all!                                                                                                                                                 
# Or work your way through the modules listed under:                                                                                                                                                               
#                                                                                                                                                                                                                  
# /lib/modules/`uname -r`/kernel/drivers/watchdog/                                                                                                                                                                 
#                                                                                                                                                                                                                  
# To see if they load, present /dev/watchdog, and are capable of                                                                                                                                                   
# resetting the system on time-out.                                                                                                                                                                                
 
# Uncomment this to use the watchdog device driver access "file".                                                                                                                                                  
 
watchdog-device         = /dev/watchdog                                                                                                                                                                            
 
# Uncomment and edit this line for hardware timeout values that differ                                                                                                                                             
# from the default of one minute.                                                                                                                                                                                  
 
watchdog-timeout        = 15                                                                                                                                                                                       
 
# If your watchdog trips by itself when the first timeout interval                                                                                                                                                 
# elapses then try uncommenting the line below and changing the                                                                                                                                                    
# value to 'yes'.                                                                                                                                                                                                  
 
#watchdog-refresh-use-settimeout        = auto                                                                                                                                                                     
 
# If you have a buggy watchdog device (e.g. some IPMI implementations)                                                                                                                                             
# try uncommenting this line and setting it to 'yes'.                                                                                                                                                              
 
#watchdog-refresh-ignore-errors = no                                                                                                                                                                               
 
# ====================== Other system settings ========================                                                                                                                                            
#                                                                                                                                                                                                                  
# Interval between tests. Should be a couple of seconds shorter than                                                                                                                                               
# the hardware time-out value.                                                                                                                                                                                     
 
#interval               = 1                                                                                                                                                                                        
 
# The number of intervals skipped before a log message is written (i.e.                                                                                                                                            
# a multiplier for 'interval' in terms of syslog messages)                                                                                                                                                         
 
#logtick        = 1                                                                                      
 
# Directory for log files (probably best not to change this)
 
#log-dir                = /var/log/watchdog
 
# Email address for sending the reboot reason. This needs sendmail to
# be installed and properly configured. Maybe you should just enable
# syslog forwarding instead?
 
#admin                  = root
 
# Lock the daemon in to memory as a real-time process. This greatly
# decreases the chance that watchdog won't be scheduled before your
# machine is really loaded.
 
realtime                = yes
priority                = 1
 
...

For more configuration please follow link below. http://www.sat.dundee.ac.uk/psc/watchdog/watchdog-configure.html

on Ubuntu 16.04.x enable watchdog service status

In order to start watchdog service we need to create soft links of service as below.

target
sudo ln -s  /lib/systemd/system/watchdog.service /etc/systemd/system/multi-user.target.wants/watchdog.service

enable watchdog service status

In order to start service we need to append /etc/rc.local service watchdog restart Watchdog service somehow doesn't start automatically. For now if the service doesn't start, it can be started with small HACK.

target
root@odroid:~# cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
 
service watchdog restart
 
if [ -f /aafirstboot ]; then /aafirstboot start ; fi
 
 
if [ -f /aafirstboot ]; then /aafirstboot start ; fi
 
exit 0

In order to start service we need input commands.

target
root@odroid:~# systemctl enable watchdog.service
root@odroid:~# systemctl start watchdog.service

Verify watchdog service in running correctly

target
root@odroid:~# service watchdog status
☢ watchdog.service - watchdog daemon
   Loaded: loaded (/lib/systemd/system/watchdog.service; static; vendor preset: 
   Active: active (running) since Fri 2017-09-22 01:24:08 UTC; 44min ago
  Process: 2186 ExecStopPost=/bin/sh -c [ $run_wd_keepalive != 1 ] || false (cod
  Process: 2265 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin/wa
  Process: 2262 ExecStartPre=/bin/sh -c [ -z "${watchdog_module}" ] || [ "${watc
 Main PID: 2267 (watchdog)
   CGroup: /system.slice/watchdog.service
           ╢╢2267 /usr/sbin/watchdog -s -v -c /etc/watchdog.conf
 
Sep 22 02:08:34 odroid watchdog[2267]: still alive after 2653 interval(s)
Sep 22 02:08:35 odroid watchdog[2267]: still alive after 2654 interval(s)
Sep 22 02:08:36 odroid watchdog[2267]: still alive after 2655 interval(s)
Sep 22 02:08:37 odroid watchdog[2267]: still alive after 2656 interval(s)
Sep 22 02:08:38 odroid watchdog[2267]: still alive after 2657 interval(s)
Sep 22 02:08:39 odroid watchdog[2267]: still alive after 2658 interval(s)

Once the watchdog demon is configured it tries to continuously reset the watchdog timer. When/if it fails to do it (because of unresponsive system), the timer will expire and the board will reboot.

WARNING !!

If the watchdog service does not work and you modify the boot.ini file, it will reboot continuously.

s3c2410_wdt driver have per-configurable parameters.

  • tmr_margin - Watchdog tmr_margin in seconds.
  • tmr_atboot - Watchdog is started at boot time if set to 1
  • nowayout - Watchdog cannot be stopped once started
  • soft_noboot - Watchdog action, set to 1 to ignore reboots

Append the s3c2410_wdt parameters. boot.ini file.

setenv wdt “s3c2410-wdt.tmr_margin=30 s3c2410-wdt.tmr_atboot=1 s3c2410-wdt.nowayout=0 s3c2410-wdt.debug=1”

setenv bootargs “${bootrootfs} ${videoconfig} ${hdmi_phy_control} ${hid_quirks} msc95xx.macaddr=${macaddr} ${external_watchdog} governor=${governor} ${wdt}”

target
root@odroid:~# cat /media/boot/boot.ini
ODROIDXU-UBOOT-CONFIG
 
# U-Boot Parameters
setenv initrd_high "0xffffffff"
setenv fdt_high "0xffffffff"
 
# Mac address configuration
setenv macaddr "00:1e:06:61:7a:39"
 
# --- Screen Configuration for HDMI --- # 
# ---------------------------------------
# Uncomment only ONE line! Leave all commented for automatic selection.
# Uncomment only the setenv line!
# ---------------------------------------
# ODROID-VU forced resolution
# setenv videoconfig "video=HDMI-A-1:1280x800@60"
# -----------------------------------------------
# ODROID-VU forced EDID
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1280x800.bin"
# -----------------------------------------------
# 1920x1200 60hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1920x1200_60hz.bin"
# -----------------------------------------------
# 1920x1200 30hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1920x1200_30hz.bin"
# -----------------------------------------------
# 1920x1080 (1080P) with monitor provided EDID information. (1080p-edid)
# setenv videoconfig "video=HDMI-A-1:1920x1080@60"
# -----------------------------------------------
# 1920x1080 (1080P) without monitor data using generic information (1080p-noedid)
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1920x1080.bin"
# -----------------------------------------------
# 1920x1080 50hz (1080P) with monitor provided EDID information. (1080p 50hz-edid)
# setenv videoconfig "video=HDMI-A-1:1920x1080@50"
# -----------------------------------------------
# 1920x1080 50hz (1080P) without monitor data using generic information (1080p 50hz-noedid)
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1920x1080_50hz.bin"
# -----------------------------------------------
# 1920x800 60hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1920x800.bin"
# -----------------------------------------------
# 1792x1344 60hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1792x1344.bin"
# -----------------------------------------------
# 1680x1050 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1680x1050.bin"
# -----------------------------------------------
# 1600x1200 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1600x1200.bin"
# -----------------------------------------------
# 1600x900 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1600x900.bin"
# -----------------------------------------------
# 1400x1050 60hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1400x1050.bin"
# -----------------------------------------------
# 1440x900 with monitor provided EDID information.
# setenv videoconfig "video=HDMI-A-1:1440x900@60"
# -----------------------------------------------
# 1440x900 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1440x900.bin"
# -----------------------------------------------
# 1366x768 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1366x768.bin"
# -----------------------------------------------
# 1360x768 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1360x768.bin"
# -----------------------------------------------
# 1280x1024 without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1280x1024.bin"
# -----------------------------------------------
# 1280x768 60hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1280x768.bin"
# -----------------------------------------------
# 1280x720 (720P) with monitor provided EDID information. (720p-edid)
# setenv videoconfig "video=HDMI-A-1:1280x720@60"
# -----------------------------------------------
# 1280x720 (720P) without monitor data using generic information (720p-noedid)
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1280x720.bin"
# -----------------------------------------------
# 1152x864 75hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1152x864_75hz.bin"
# -----------------------------------------------
# 1024x768 without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1024x768.bin"
# -----------------------------------------------
# 1024x600 without monitor data using generic information (ODROID VU7+)
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/1024x600.bin"
# -----------------------------------------------
# 800x600 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/800x600.bin"
# -----------------------------------------------
# 848x480 60hz without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/848x480.bin"
# -----------------------------------------------
# 800x480 without monitor data using generic information (ODROID 7")
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/800x480.bin"
# -----------------------------------------------
# 720x576 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/720x576.bin"
# -----------------------------------------------
# 720x480 without monitor data using generic information 
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/720x480.bin"
# -----------------------------------------------
# 640x480 without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/640x480.bin"
# -----------------------------------------------
# 480x800 without monitor data using generic information
# setenv videoconfig "drm_kms_helper.edid_firmware=edid/480x800.bin"
 
# --- HDMI / DVI Mode Selection ---
# ------------------------------------------
# - HDMI Mode
setenv vout "hdmi"
# - DVI Mode (disables sound over HDMI as per DVI compat)
# setenv vout "dvi"
 
# --- HDMI CEC Configuration ---
# ------------------------------------------
setenv cecenable "false" # false or true
# set to true to enable HDMI CEC
 
# Enable/Disable ODROID-VU7 Touchsreen
setenv disable_vu7 "false" # false
 
# CPU Governor Selection
# Available governos: conservative, userspace, powersave, ondemand, performance, schedutil
setenv governor "performance"
 
# DRAM Frequency
# Sets the LPDDR3 memory frequency
# Supported values: 933 825 728 633 (MHZ)
setenv ddr_freq 825
 
# External watchdog board enable
setenv external_watchdog "false"
# debounce time set to 3 ~ 10 sec, default 3 sec
setenv external_watchdog_debounce "3"
 
setenv wdt "s3c2410-wdt.tmr_margin=30 s3c2410-wdt.tmr_atboot=1 s3c2410-wdt.nowayout=0 s3c2410-wdt.debug=1"
 
#------------------------------------------------------------------------------
#
# HDMI Hot Plug detection
#
#------------------------------------------------------------------------------
#
# Forces the HDMI subsystem to ignore the check if the cable is connected or 
# not.
# false : disable the detection and force it as connected.
# true : let cable, board and monitor decide the connection status.
# 
# default: true
# 
#------------------------------------------------------------------------------
setenv HPD "true"
 
#------------------------------------------------------------------------------------------------------
# Basic Ubuntu Setup. Don't touch unless you know what you are doing.
# --------------------------------
setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0"
 
 
# Load kernel, initrd and dtb in that sequence
fatload mmc 0:1 0x40008000 zImage
fatload mmc 0:1 0x42000000 uInitrd
if test "${board_name}" = "xu4"; then fatload mmc 0:1 0x44000000 exynos5422-odroidxu4.dtb; setenv fdtloaded "true"; fi
if test "${board_name}" = "xu3"; then fatload mmc 0:1 0x44000000 exynos5422-odroidxu3.dtb; setenv fdtloaded "true"; fi
if test "${board_name}" = "xu3l"; then fatload mmc 0:1 0x44000000 exynos5422-odroidxu3-lite.dtb; setenv fdtloaded "true"; fi
#failsafe
if test "${fdtloaded}" != "true"; then fatload mmc 0:1 0x44000000 exynos5422-odroidxu4.dtb; fi
 
fdt addr 0x44000000
 
setenv hdmi_phy_control "HPD=${HPD} vout=${vout}"
if test "${cecenable}" = "false"; then fdt rm /cec@101B0000; fi
if test "${disable_vu7}" = "false"; then setenv hid_quirks "usbhid.quirks=0x0eef:0x0005:0x0004"; fi
if test "${external_watchdog}" = "true"; then setenv external_watchdog "external_watchdog=${external_watchdog} external_watchdog_debounce=${external_watci
 
# final boot args
setenv bootargs "${bootrootfs} ${videoconfig} ${hdmi_phy_control} ${hid_quirks} smsc95xx.macaddr=${macaddr} ${external_watchdog} governor=${governor} ${wdt}"
 
# set DDR frequency
dmc ${ddr_freq}
 
# Boot the board
bootz 0x40008000 0x42000000 0x44000000

To test hardware watchdog.

Be careful when using these commands.

The commands below will cause the kernel to crash.

Use caution when following these steps, and by no means use them on a production machine.

echo c > /proc/sysrq-trigger

This will force the Linux kernel to crash. If the watchdog works properly, it will reboot the system after 30 seconds.

target
odroid@odroid:~$ su /* password : odroid */
root@odroid:~# echo c > /proc/sysrq-trigger
[  259.251079] sysrq: SysRq : Trigger a crash
[  259.253698] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[  259.261804] pgd = e3b7c000
[  259.264435] [00000000] *pgd=a708b835
[  259.267992] Internal error: Oops: 817 [#1] PREEMPT SMP ARM
[  259.273447] Modules linked in: fuse cpufreq_conservative cpufreq_userspace cpufreq_powersave spidev joydev spi_s3c64xx exynos_gpiomem ipv6
[  259.285842] CPU: 4 PID: 2041 Comm: bash Not tainted 4.9.51-64 #1
[  259.291818] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  259.297884] task: e3398000 task.stack: e3b3c000
[  259.302397] PC is at sysrq_handle_crash+0x24/0x2c
[  259.307071] LR is at sysrq_handle_crash+0x20/0x2c
[  259.311750] pc : [<c0413b30>]    lr : [<c0413b2c>]    psr: 60000013
[  259.311750] sp : e3b3dec0  ip : 00000000  fp : 000c475c
[  259.323187] r10: 00000000  r9 : e3b3c000  r8 : 00000000
[  259.328386] r7 : 00000063  r6 : 00000004  r5 : c0c1dea4  r4 : 00000001
[  259.334885] r3 : 00000000  r2 : 00000000  r1 : eedb73a0  r0 : 00000063
[  259.341385] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[  259.348490] Control: 10c5387d  Table: 63b7c06a  DAC: 00000051
[  259.354209] Process bash (pid: 2041, stack limit = 0xe3b3c210)
[  259.360015] Stack: (0xe3b3dec0 to 0xe3b3e000)
[  259.364350] dec0: c0c0cc60 c0413ff8 00000002 00000000 00000000 ee34c880 c0107984 c0414504
[  259.372495] dee0: c04144b0 c02736b0 e3192c00 c0273654 000ccc08 e3b3df88 c0107984 c0214f90
[  259.380640] df00: 00000000 00000000 00000000 e3b3df10 e3b3c000 c02271b8 000000f9 e318edd8
[  259.388785] df20: 0000000a ee89ae00 ede69000 0000000a 00000400 c0232d2c 00000000 eb0960c0
[  259.396930] df40: eb0960c0 0000000a 00000002 e3192c00 000ccc08 e3b3df88 c0107984 c0215db0
[  259.405076] df60: 00000001 0000000a 00000001 e3192c00 e3192c00 000ccc08 00000002 c0107984
[  259.413222] df80: e3b3c000 c0216dc0 00000000 00000000 00000000 00000002 000ccc08 b6f63d58
[  259.421367] dfa0: 00000004 c01077c0 00000002 000ccc08 00000001 000ccc08 00000002 00000000
[  259.429513] dfc0: 00000002 000ccc08 b6f63d58 00000004 00000000 000aa5c8 000c715c 000c475c
[  259.437658] dfe0: 00000000 beca78dc b6ec779b b6f030d6 00000030 00000001 00000000 00000000
[  259.445809] [<c0413b30>] (sysrq_handle_crash) from [<c0413ff8>] (__handle_sysrq+0xac/0x178)
[  259.454125] [<c0413ff8>] (__handle_sysrq) from [<c0414504>] (write_sysrq_trigger+0x54/0x64)
[  259.462446] [<c0414504>] (write_sysrq_trigger) from [<c02736b0>] (proc_reg_write+0x5c/0x84)
[  259.470765] [<c02736b0>] (proc_reg_write) from [<c0214f90>] (__vfs_write+0x20/0x118)
[  259.478474] [<c0214f90>] (__vfs_write) from [<c0215db0>] (vfs_write+0xa4/0x1ac)
[  259.485752] [<c0215db0>] (vfs_write) from [<c0216dc0>] (SyS_write+0x44/0x9c)
[  259.492773] [<c0216dc0>] (SyS_write) from [<c01077c0>] (ret_fast_syscall+0x0/0x3c)
[  259.500310] Code: e5834000 f57ff04e ebf40a73 e3a03000 (e5c34000) 
[  259.506441] ---[ end trace d10f190259e6913b ]---
[  259.510993] Kernel panic - not syncing: Fatal exception
[  259.516181] CPU1: stopping
[  259.518859] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G      D         4.9.51-64 #1
[  259.526217] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  259.532307] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  259.540005] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  259.547194] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  259.554559] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  259.562097] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  259.569546] Exception stack(0xee8c3f88 to 0xee8c3fd0)
[  259.574573] 3f80:                   00000001 00000000 00000000 c01194c0 ee8c2000 c0c030ec
[  259.582719] 3fa0: 00000002 c0c03140 00000000 00000000 c0b69078 c0c03148 00000000 ee8c3fd8
[  259.590863] 3fc0: c01082c0 c01082c4 600c0013 ffffffff
[  259.595893] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  259.603263] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  259.611491] [<c015f88c>] (cpu_startup_entry) from [<401014ec>] (0x401014ec)
[  259.618419] CPU0: stopping
[  259.621107] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G      D         4.9.51-64 #1
[  259.628469] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  259.634542] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  259.642253] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  259.649444] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  259.656809] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  259.664347] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  259.671797] Exception stack(0xc0c01f50 to 0xc0c01f98)
[  259.676825] 1f40:                                     00000001 00000000 00000000 c01194c0
[  259.684971] 1f60: c0c00000 c0c030ec 00000001 c0c03140 00000000 00000000 c0b69078 c0c03148
[  259.693116] 1f80: f0806340 c0c01fa0 c01082c0 c01082c4 60010013 ffffffff
[  259.699704] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  259.707070] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  259.715309] [<c015f88c>] (cpu_startup_entry) from [<c0b00c8c>] (start_kernel+0x3b0/0x3bc)
[  259.723443] CPU5: stopping
[  259.726136] CPU: 5 PID: 0 Comm: swapper/5 Tainted: G      D         4.9.51-64 #1
[  259.733501] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  259.739574] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  259.747284] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  259.754476] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  259.761840] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  259.769378] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  259.776830] Exception stack(0xee8cbf88 to 0xee8cbfd0)
[  259.781858] bf80:                   00000001 00000000 00000000 c01194c0 ee8ca000 c0c030ec
[  259.790002] bfa0: 00000020 c0c03140 00000000 00000000 c0b69078 c0c03148 c0c0d040 ee8cbfd8
[  259.798148] bfc0: c01082c0 c01082c4 60000013 ffffffff
[  259.803174] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  259.810541] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  259.818773] [<c015f88c>] (cpu_startup_entry) from [<401014ec>] (0x401014ec)
[  259.825707] CPU2: stopping
[  259.828384] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G      D         4.9.51-64 #1
[  259.835746] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  259.841819] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  259.849529] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  259.856721] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  259.864086] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  259.871624] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  259.879074] Exception stack(0xee8c5f88 to 0xee8c5fd0)
[  259.884102] 5f80:                   00000001 00000000 00000000 c01194c0 ee8c4000 c0c030ec
[  259.892248] 5fa0: 00000004 c0c03140 00000000 00000000 c0b69078 c0c03148 f0806540 ee8c5fd8
[  259.900391] 5fc0: c01082c0 c01082c4 600f0013 ffffffff
[  259.905420] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  259.912787] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  259.921017] [<c015f88c>] (cpu_startup_entry) from [<401014ec>] (0x401014ec)
[  259.927947] CPU3: stopping
[  259.930635] CPU: 3 PID: 0 Comm: swapper/3 Tainted: G      D         4.9.51-64 #1
[  259.937998] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  259.944071] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  259.951781] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  259.958972] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  259.966337] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  259.973876] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  259.981326] Exception stack(0xee8c7f88 to 0xee8c7fd0)
[  259.986354] 7f80:                   00000001 00000000 00000000 c01194c0 ee8c6000 c0c030ec
[  259.994500] 7fa0: 00000008 c0c03140 00000000 00000000 c0b69078 c0c03148 f0806640 ee8c7fd8
[  260.002644] 7fc0: c01082c0 c01082c4 60010013 ffffffff
[  260.007673] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  260.015039] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  260.023270] [<c015f88c>] (cpu_startup_entry) from [<401014ec>] (0x401014ec)
[  260.030199] CPU6: stopping
[  260.032894] CPU: 6 PID: 0 Comm: swapper/6 Tainted: G      D         4.9.51-64 #1
[  260.040258] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  260.046329] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  260.054039] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  260.061231] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  260.068595] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  260.076133] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  260.083585] Exception stack(0xee8cdf88 to 0xee8cdfd0)
[  260.088611] df80:                   00000001 00000000 00000000 c01194c0 ee8cc000 c0c030ec
[  260.096759] dfa0: 00000040 c0c03140 00000000 00000000 c0b69078 c0c03148 c219a3c4 ee8cdfd8
[  260.104901] dfc0: c01082c0 c01082c4 60070013 ffffffff
[  260.109929] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  260.117298] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  260.125528] [<c015f88c>] (cpu_startup_entry) from [<401014ec>] (0x401014ec)
[  260.132459] CPU7: stopping
[  260.135147] CPU: 7 PID: 0 Comm: swapper/7 Tainted: G      D         4.9.51-64 #1
[  260.142510] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[  260.148580] [<c010e630>] (unwind_backtrace) from [<c010b338>] (show_stack+0x10/0x14)
[  260.156291] [<c010b338>] (show_stack) from [<c039934c>] (dump_stack+0x94/0xa8)
[  260.163483] [<c039934c>] (dump_stack) from [<c010d874>] (handle_IPI+0x168/0x17c)
[  260.170847] [<c010d874>] (handle_IPI) from [<c0101454>] (gic_handle_irq+0x94/0x98)
[  260.178387] [<c0101454>] (gic_handle_irq) from [<c010be4c>] (__irq_svc+0x6c/0xa8)
[  260.185837] Exception stack(0xee8cff88 to 0xee8cffd0)
[  260.190863] ff80:                   00000001 00000000 00000000 c01194c0 ee8ce000 c0c030ec
[  260.199010] ffa0: 00000080 c0c03140 00000000 00000000 c0b69078 c0c03148 00000000 ee8cffd8
[  260.207155] ffc0: c01082c0 c01082c4 600f0013 ffffffff
[  260.212181] [<c010be4c>] (__irq_svc) from [<c01082c4>] (arch_cpu_idle+0x38/0x3c)
[  260.219548] [<c01082c4>] (arch_cpu_idle) from [<c015f88c>] (cpu_startup_entry+0x188/0x20c)
[  260.227781] [<c015f88c>] (cpu_startup_entry) from [<401014ec>] (0x401014ec)
[  260.234723] ---[ end Kernel panic - not syncing: Fatal exception
 
/* Once the watchdog demon is configured it tries to continuously reset the watchdog timer. When/if it fails to do it (because of unresponsive system), the timer will expire and the board will reboot. */
 
U-Boot 2017.05-15377-gedb23d4 (Aug 24 2017 - 07:09:51 -0300) for ODROID-XU4
 
CPU:   Exynos5422 @ 800 MHz
Model: Odroid XU4 based on EXYNOS5422
Board: Odroid XU4 based on EXYNOS5422
Type:  xu4
DRAM:  2 GiB
MMC:   EXYNOS DWMMC: 0, EXYNOS DWMMC: 1
MMC Device 0 (eMMC): 14.6 GiB
Info eMMC rst_n_func status = enabled
Card did not respond to voltage select!
mmc_init: -95, time 11
*** Warning - bad CRC, using default environment
 
In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
Press quickly 'Enter' twice to stop autoboot:  0
  • odroid-xu4/application_note/software/linux_watchdog.txt
  • Last modified: 2022/11/16 14:15
  • by steve.jeong