新路程------imx6q的reboot过程
来源:互联网 发布:淘宝图库素材网 编辑:程序博客网 时间:2024/06/05 10:36
之前的看门狗时好时坏,最后发现是输出wdog_B的电容过小导致低电平时间太短,于是看了一下为什么reboot命令最后会以拉低这个gpio为结果,参考代码分析:
reboot先来到
/kernel/sys.c中
void kernel_restart(char *cmd)
{
kernel_restart_prepare(cmd);
if (!cmd)
printk(KERN_EMERG "Restarting system.\n");
else
printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
kmsg_dump(KMSG_DUMP_RESTART);
machine_restart(cmd);
}
然后到了arch/arm/kernel/process.c里
void machine_restart(char *cmd)
{
machine_shutdown();
arm_pm_restart(reboot_mode, cmd);
}
然后到了void (*arm_pm_restart)(char str, const char *cmd) = arm_machine_restart,
然后是
arch_reset(mode, cmd);
然后到了System.c (arch\arm\plat-mxc):void arch_reset(char mode, const char *cmd)
然后
void arch_reset(char mode, const char *cmd)
{
unsigned int wcr_enable;
arch_reset_special_mode(mode, cmd);
#ifdef CONFIG_ARCH_MX6
/* wait for reset to assert... */
if (enable_ldo_mode == LDO_MODE_BYPASSED) {
/*On Sabresd board use WDOG2 to reset external PMIC, so here do
* more WDOG2 reset.*/
wcr_enable = 0x14;
__raw_writew(wcr_enable, IO_ADDRESS(MX6Q_WDOG2_BASE_ADDR));
__raw_writew(wcr_enable, IO_ADDRESS(MX6Q_WDOG2_BASE_ADDR));
} else
wcr_enable = (1 << 2);
__raw_writew(wcr_enable, wdog_base);
/* errata TKT039676, SRS bit may be missed when
SRC sample it, need to write the wdog controller
twice to avoid it */
__raw_writew(wcr_enable, wdog_base);
/* wait for reset to assert... */
mdelay(500);
printk(KERN_ERR "Watchdog reset failed to assert reset\n");
return;
#endif到了最后去动了watchdog2的wdog_B输出,请参考watchdog的寄存器这个功能是
- 新路程------imx6q的reboot过程
- 新路程------hi3516a的reboot过程
- 新路程------关于imx6q uart的杂谈
- 新路程------imx6q 新增spi设备
- 新路程------hi3516a的i2c_read调用过程
- 新的路程
- reboot.exe的制作过程
- 铺展新一天的路程
- 新路程------rtl8188的配置
- 新路程------SN74CB3Q3257的选择
- 新的博客新的路程
- 新路程------英飞凌imx6的lvds驱动
- 新路程------imx6的uart小结(1)
- 新路程------rtc bq32002的porting
- 新路程------调试路上遇到的坑
- 新路程------makefile的M一定要大写。。。。
- 新路程-----hi3516a遇到的编译警告
- 又开始了一段新的路程
- SpringMVC与前/后台的json数据交互
- for test
- Backbone入门指南(四):Model(数据模型)
- G
- 反射中getClass()和class的区别
- 新路程------imx6q的reboot过程
- 安卓百度地图开发
- 实验1.4
- 僵尸对象导致crash(Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT))
- Codeforces Round #450 (Div. 2)
- eclipse svn的安装
- 2017年全国的贫困县名单
- 绘图: matplotlib核心剖析
- 表达式引擎——OGNL