系统重启和原因获取使用参考
1. 概述¶
本文档介绍了SigmaStar平台进行系统重启,以及获取重启原因的接口和命令的使用方法。本平台SoC包含一颗ARM CPU和一颗RISCV CPU,支持重启整个SoC、单独重启ARM以及单独重启RISCV。
本平台在ARM上运行U-Boot/Linux,在RISCV上运行FreeRTOS。下面分别对U-Boot/Linux/FreeRTOS进行说明。
2. U-Boot API参考¶
API名 | 功能 |
---|---|
drv_reboot_read_rtc_io1 | 读取RTC IO1的电平状态。 |
drv_reboot_read_rtc_io3 | 读取RTC IO3的电平状态。 |
drv_reboot_get_wakeup_source | 获取系统的唤醒源。 |
drv_reboot_get_reason | 获取重启原因。 |
drv_reboot_read_kernel_panic_flag | 读取kernel panic标记。 |
drv_reboot_clear_kernel_panic_flag | 清除kernel panic标记。 |
drv_reboot_reset | 重启整个SoC。 |
drv_reboot_poweroff | 让SoC下电。 |
drv_riscv_reset | 停止RISCV FreeRTOS。 |
drv_riscv_start | 启动RISCV FreeRTOS。 |
reboot reason枚举类型 | 定义 |
---|---|
REBOOT_HW_RESET | 表示Hardware Reset。 |
REBOOT_WDT_RESET | 表示Watchdog Reset。 |
REBOOT_SW_RESET | 表示Software Reset。 |
REBOOT_ARM_CORE_RESET | 表示ARM Core Reset。 |
wakeup source枚举类型 | 定义 |
---|---|
RTC_IO1_WAKEUP | 表示唤醒源是RTC IO1。 |
RTC_IO3_WAKEUP | 表示唤醒源是RTC IO3。 |
RTC_ALARM_WAKEUP | 表示唤醒源是RTC ALARM。 |
2.1. drv_reboot_read_rtc_io1¶
-
功能
读取RTC IO1当前的电平状态。
-
语法
status = drv_reboot_read_rtc_io1();
-
形参
无
-
返回值
-
0: 表示RTC IO1当前是低电平。
-
1: 表示RTC IO1当前是高电平。
-
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.2. drv_reboot_read_rtc_io3¶
-
功能
读取RTC IO3当前的电平状态。
-
语法
status = drv_reboot_read_rtc_io3();
-
形参
无
-
返回值
-
0: 表示RTC IO3当前是低电平。
-
1: 表示RTC IO3当前是高电平。
-
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.3. drv_reboot_get_wakeup_source¶
-
功能
获取系统的唤醒源。
-
语法
wakeup_source = drv_reboot_get_wakeup_source();
-
形参
无
-
返回值
-
RTC_IO1_WAKEUP: 表示唤醒源是RTC IO1。
-
RTC_IO3_WAKEUP: 表示唤醒源是RTC IO3。
-
RTC_ALARM_WAKEUP: 表示唤醒源是RTC ALARM。
-
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.4. drv_reboot_get_reason¶
-
功能
获取系统本次启动/重启的原因。
-
语法
reason = drv_reboot_get_reason();
-
形参
无
-
返回值
-
REBOOT_HW_RESET: 表示本次是硬件上电启动。
-
REBOOT_WDT_RESET: 表示本次是Watchdog触发的重启。
-
REBOOT_SW_RESET: 表示本次是软件触发的重启。
-
REBOOT_ARM_CORE_RESET: 表示本次是单独重启ARM触发的重启。
-
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.5. drv_reboot_read_kernel_panic_flag¶
-
功能
读取kernel panic标记。
-
语法
status = drv_reboot_read_kernel_panic_flag();
-
形参
无
-
返回值
-
0: 表示此次重启前没有发生kernel panic。
-
1: 表示此次重启前发生了kernel panic。
-
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.6. drv_reboot_clear_kernel_panic_flag¶
-
功能
清除kernel panic标记。
-
语法
drv_reboot_clear_kernel_panic_flag();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.7. drv_reboot_reset¶
-
功能
重启整个SoC。
-
语法
drv_reboot_reset();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.8. drv_reboot_poweroff¶
-
功能
让SoC下电。
-
语法
drv_reboot_poweroff();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/reboot/drv_reboot.h
-
注意
无
2.9. drv_riscv_reset¶
-
功能
停止RISCV FreeRTOS。
-
语法
drv_riscv_reset();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/riscv/drv_riscv.h
-
注意
- 调用drv_riscv_reset()停止RISCV FreeRTOS之后,可以再调用drv_riscv_start()启动RISCV FreeRTOS。
2.10. drv_riscv_start¶
-
功能
启动RISCV FreeRTOS。
-
语法
drv_riscv_start();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/riscv/drv_riscv.h
-
注意
- 需要先调用drv_riscv_reset()停止RISCV FreeRTOS,然后再调用drv_riscv_start()启动RISCV FreeRTOS。
3. U-Boot 命令行参考¶
命令 | 功能 |
---|---|
reboot io1 | 读取RTC IO1的电平状态。 |
reboot io3 | 读取RTC IO3的电平状态。 |
reboot wakeup_source | 获取系统的唤醒源。 |
reboot reason | 获取重启原因。 |
reboot kernel_panic | 读取kernel panic标记。 |
reboot clear_kernel_panic | 清除kernel panic标记。 |
reboot reset | 重启整个SoC。 |
reboot poweroff | 让SoC下电。 |
riscv stop | 停止RISCV FreeRTOS。 |
riscv start | 启动RISCV FreeRTOS。 |
3.1. 读取RTC IO1的电平状态¶
-
命令
reboot io1
-
打印
-
"io1: 0" 表示RTC IO1当前是低电平。
-
"io1: 1" 表示RTC IO1当前是高电平。
-
-
注意
无
3.2. 读取RTC IO3的电平状态¶
-
命令
reboot io3
-
打印
-
"io3: 0" 表示RTC IO3当前是低电平。
-
"io3: 1" 表示RTC IO3当前是高电平。
-
-
注意
无
3.3. 获取系统的唤醒源¶
-
命令
reboot wakeup_source
-
打印
-
"wakeup source: io1" 表示唤醒源是RTC IO1。
-
"wakeup source: io3" 表示唤醒源是RTC IO3。
-
"wakeup source: alarm" 表示唤醒源是RTC ALARM。
-
-
注意
无
3.4. 获取系统本次启动/重启的原因¶
-
命令
reboot reason
-
打印
-
"reason: hw reset" 表示本次是硬件上电启动。
-
"reason: wdt reset" 表示本次是Watchdog触发的重启。
-
"reason: sw reset" 表示本次是软件触发的重启。
-
"reason: arm core reset" 表示本次是单独重启ARM触发的重启。
-
-
注意
无
3.5. 读取kernel panic标记¶
-
命令
reboot kernel_panic
-
打印
-
"kernel_panic: 0" 表示此次重启前没有发生kernel panic。
-
"kernel_panic: 1" 表示此次重启前发生了kernel panic。
-
-
注意
无
3.6. 清除kernel panic标记¶
-
命令
reboot clear_kernel_panic
-
打印
无
-
注意
无
3.7. 重启整个SoC¶
-
命令
reboot reset
-
打印
无
-
注意
无
3.8. 让SoC下电¶
-
命令
reboot poweroff
-
打印
无
-
注意
无
3.9. 停止RISCV FreeRTOS¶
-
命令
riscv stop
-
打印
无
-
注意
- 执行riscv stop停止RISCV FreeRTOS之后,可以再执行riscv start启动RISCV FreeRTOS。
3.10. 启动RISCV FreeRTOS¶
-
命令
riscv start
-
打印
无
-
注意
- 需要先执行riscv stop停止RISCV FreeRTOS,然后再执行riscv start启动RISCV FreeRTOS。
4. Linux 命令行参考¶
命令 | 功能 |
---|---|
reboot | 重启整个SoC。 |
poweroff | 让SoC下电。 |
cat /sys/class/sstar/msys/REBOOT_TYPE | 获取重启原因。 |
cat /sys/class/sstar/msys/KERNEL_PANIC | 读取kernel panic标记。 |
echo 2 > /sys/class/sstar/riscv/reset | 停止RISCV FreeRTOS。 |
echo 1 > /sys/class/sstar/riscv/reset | 重启RISCV FreeRTOS。 |
4.1. 重启整个SoC¶
-
命令
reboot
-
打印
无
-
注意
无
4.2. 让SoC下电¶
-
命令
poweroff
-
打印
无
-
注意
无
4.3. 获取重启原因¶
-
命令
cat /sys/class/sstar/msys/REBOOT_TYPE
-
打印
-
"Reboot_Type: hard" 表示本次是硬件上电启动。
-
"Reboot_Type: watchdog" 表示本次是Watchdog触发的重启。
-
"Reboot_Type: reboot" 表示本次是软件触发的重启。
-
"Reboot_Type: arm_core" 表示本次是单独重启ARM触发的重启。
-
-
注意
无
4.4. 读取kernel panic标记¶
-
命令
cat /sys/class/sstar/msys/KERNEL_PANIC
-
打印
-
"Kernel_Panic: 0" 表示此次重启前没有发生kernel panic。
-
"Kernel_Panic: 1" 表示此次重启前发生了kernel panic。
-
-
注意
无
4.5. 停止RISCV FreeRTOS¶
-
命令
echo 2 > /sys/class/sstar/riscv/reset
-
打印
无
-
注意
- 执行echo 2 > /sys/class/sstar/riscv/reset停止RISCV FreeRTOS之后,可以再执行echo 1 > /sys/class/sstar/riscv/reset重启RISCV FreeRTOS。
4.6. 重启RISCV FreeRTOS¶
-
命令
echo 1 > /sys/class/sstar/riscv/reset
-
打印
无
-
注意
-
直接执行echo 1 > /sys/class/sstar/riscv/reset的效果是重启RISCV FreeRTOS。
-
可以先执行echo 2 > /sys/class/sstar/riscv/reset停止RISCV FreeRTOS,然后再执行echo 1 > /sys/class/sstar/riscv/reset重启RISCV FreeRTOS。
-
5. FreeRTOS API参考¶
API名 | 功能 |
---|---|
drv_reboot_read_rtc_io1 | 读取RTC IO1的电平状态。 |
drv_reboot_read_rtc_io3 | 读取RTC IO3的电平状态。 |
drv_reboot_get_wakeup_source | 获取系统的唤醒源。 |
drv_reboot_get_reason | 获取重启原因。 |
drv_reboot_reset | 重启整个SoC。 |
drv_reboot_reset_riscv | 重启RISCV FreeRTOS。 |
drv_reboot_stop_arm | 停止ARM Linux。 |
drv_reboot_reset_arm | 重启ARM Linux。 |
drv_reboot_poweroff | 让SoC下电。 |
reboot reason枚举类型 | 定义 |
---|---|
REBOOT_HW_RESET | 表示Hardware Reset。 |
REBOOT_WDT_RESET | 表示Watchdog Reset。 |
REBOOT_SW_RESET | 表示Software Reset。 |
REBOOT_RISCV_CORE_ACTIVE_RESET | 表示RISCV Core主动Reset。 |
REBOOT_RISCV_CORE_PASSIVE_RESET | 表示RISCV Core被动Reset。 |
wakeup source枚举类型 | 定义 |
---|---|
RTC_IO1_WAKEUP | 表示唤醒源是RTC IO1。 |
RTC_IO3_WAKEUP | 表示唤醒源是RTC IO3。 |
RTC_ALARM_WAKEUP | 表示唤醒源是RTC ALARM。 |
5.1. drv_reboot_read_rtc_io1¶
-
功能
读取RTC IO1当前的电平状态。
-
语法
status = drv_reboot_read_rtc_io1();
-
形参
无
-
返回值
-
0: 表示RTC IO1当前是低电平。
-
1: 表示RTC IO1当前是高电平。
-
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
5.2. drv_reboot_read_rtc_io3¶
-
功能
读取RTC IO3当前的电平状态。
-
语法
status = drv_reboot_read_rtc_io3();
-
形参
无
-
返回值
-
0: 表示RTC IO3当前是低电平。
-
1: 表示RTC IO3当前是高电平。
-
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
5.3. drv_reboot_get_wakeup_source¶
-
功能
获取系统的唤醒源。
-
语法
wakeup_source = drv_reboot_get_wakeup_source();
-
形参
无
-
返回值
-
RTC_IO1_WAKEUP: 表示唤醒源是RTC IO1。
-
RTC_IO3_WAKEUP: 表示唤醒源是RTC IO3。
-
RTC_ALARM_WAKEUP: 表示唤醒源是RTC ALARM。
-
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
5.4. drv_reboot_get_reason¶
-
功能
获取系统本次启动/重启的原因。
-
语法
reason = drv_reboot_get_reason();
-
形参
无
-
返回值
-
REBOOT_HW_RESET: 表示本次是硬件上电启动。
-
REBOOT_WDT_RESET: 表示本次是Watchdog触发的重启。
-
REBOOT_SW_RESET: 表示本次是软件触发的重启。
-
REBOOT_RISCV_CORE_ACTIVE_RESET: 表示本次是单独重启RISCV触发的重启,并且发起者是RISCV FreeRTOS。
-
REBOOT_RISCV_CORE_PASSIVE_RESET: 表示本次是单独重启RISCV触发的重启,并且发起者是ARM Linux。
-
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
5.5. drv_reboot_reset¶
-
功能
重启整个SoC。
-
语法
drv_reboot_reset();
-
形参
无
-
返回值
无
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
5.6. drv_reboot_reset_riscv¶
-
功能
重启RISCV FreeRTOS。
-
语法
drv_reboot_reset_riscv();
-
形参
无
-
返回值
无
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
5.7. drv_reboot_stop_arm¶
-
功能
停止ARM Linux。
-
语法
drv_reboot_stop_arm();
-
形参
无
-
返回值
无
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
- 调用drv_reboot_stop_arm()停止ARM Linux之后,可以再调用drv_reboot_reset_arm()重启ARM Linux。
5.8. drv_reboot_reset_arm¶
-
功能
重启ARM Linux。
-
语法
drv_reboot_reset_arm();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/riscv/drv_riscv.h
-
注意
-
直接调用drv_reboot_reset_arm()的效果是重启ARM Linux。
-
可以先调用drv_reboot_stop_arm()停止ARM Linux,然后再调用drv_reboot_reset_arm()重启ARM Linux。
-
5.9. drv_reboot_poweroff¶
-
功能
让SoC下电。
-
语法
drv_reboot_poweroff();
-
形参
无
-
返回值
无
-
依赖
- 头文件:sc/driver/sysdriver/reboot/drv/pub/drv_reboot.h
-
注意
无
6. FreeRTOS 命令行参考¶
命令 | 功能 |
---|---|
reboot io1 | 读取RTC IO1的电平状态。 |
reboot io3 | 读取RTC IO3的电平状态。 |
reboot wakeup_source | 获取系统的唤醒源。 |
reboot reason | 获取重启原因。 |
reboot reset | 重启整个SoC。 |
reboot reset_riscv | 重启RISCV FreeRTOS。 |
reboot stop_arm | 停止ARM Linux。 |
reboot reset_arm | 重启ARM Linux。 |
reboot poweroff | 让SoC下电。 |
6.1. 读取RTC IO1的电平状态¶
-
命令
reboot io1
-
打印
-
"io1: 0" 表示RTC IO1当前是低电平。
-
"io1: 1" 表示RTC IO1当前是高电平。
-
-
注意
无
6.2. 读取RTC IO3的电平状态¶
-
命令
reboot io3
-
打印
-
"io3: 0" 表示RTC IO3当前是低电平。
-
"io3: 1" 表示RTC IO3当前是高电平。
-
-
注意
无
6.3. 获取系统的唤醒源¶
-
命令
reboot wakeup_source
-
打印
-
"wakeup source: io1" 表示唤醒源是RTC IO1。
-
"wakeup source: io3" 表示唤醒源是RTC IO3。
-
"wakeup source: alarm" 表示唤醒源是RTC ALARM。
-
-
注意
无
6.4. 获取系统本次启动/重启的原因¶
-
命令
reboot reason
-
打印
-
"reason: hw reset" 表示本次是硬件上电启动。
-
"reason: wdt reset" 表示本次是Watchdog触发的重启。
-
"reason: sw reset" 表示本次是软件触发的重启。
-
"reason: riscv core active reset" 表示本次是单独重启RISCV触发的重启,并且发起者是RISCV FreeRTOS。
-
"reason: riscv core passive reset" 表示本次是单独重启RISCV触发的重启,并且发起者是ARM Linux。
-
-
注意
无
6.5. 重启整个SoC¶
-
命令
reboot reset
-
打印
无
-
注意
无
6.6. 重启RISCV FreeRTOS¶
-
命令
reboot reset_riscv
-
打印
无
-
注意
无
6.7. 停止ARM Linux¶
-
命令
reboot stop_arm
-
打印
无
-
注意
- 执行reboot stop_arm停止ARM Linux之后,可以再执行reboot reset_arm重启ARM Linux。
6.8. 重启ARM Linux¶
-
命令
reboot reset_arm
-
打印
无
-
注意
-
直接执行reboot reset_arm的效果是重启ARM Linux。
-
可以先执行reboot stop_arm停止ARM Linux,然后再执行reboot reset_arm重启ARM Linux。
-
6.9. 让SoC下电¶
-
命令
reboot poweroff
-
打印
无
-
注意
无