基本概念
kernel/Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
1 | Generic SYSCON mapped register reset driver |
这个是使用 syscon 去映射重启寄存器的驱动.
通过 syscon 基地址加上偏移地址 (这个在 reboot 节点中有定义)
kernel/Documentation/devicetree/bindings/power/reset/reboot-mode.txt
1 | Generic reboot mode core map driver |
这个驱动获取 reboot mode 的参数, 并且调用写接口在特定的寄存器或者ram中存储魔数 , 然后 bootloader 可以获取魔数并采取相应的动作.
所有的 property 都是由 vendor 确定的, 这些 property 会告诉 bootloader 在重启时进行怎样的操作, 这些 property 的格式是mode-xxx = <magic>
, 比如 recovery 模式是 mode-recovery = <BOOT_RECOVERY>
代码分析
DTS
1 | reboot-mode { |
Driver
代码在 kernel/drivers/power/reset
由 defconfig 中的CONFIG_SYSCON_REBOOT_MODE
控制
1 | obj-$(CONFIG_SYSCON_REBOOT_MODE) += syscon-reboot-mode.o |
代码流程
reboot mode 注册:
1 | syscon_reboot_mode_probe -> |
reboot 调用:
1 | kernel_restart -> |
重启开机判断是在 uboot 中完成的:
1 | static void fbt_handle_reboot(const char *cmdbuf) |