reboot的实现机制.docx

上传人:小飞机 文档编号:3165136 上传时间:2023-03-11 格式:DOCX 页数:3 大小:37.30KB
返回 下载 相关 举报
reboot的实现机制.docx_第1页
第1页 / 共3页
reboot的实现机制.docx_第2页
第2页 / 共3页
reboot的实现机制.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《reboot的实现机制.docx》由会员分享,可在线阅读,更多相关《reboot的实现机制.docx(3页珍藏版)》请在三一办公上搜索。

1、reboot的实现机制合肥优视科技 内部机密 reboot的实现机制 在以前的2410板子上,我们在shell下面,运行reboot,系统将重新启动,这是CPU自带的看门狗起的作用,下面我们对这个进行分析,首先我们介绍一下相应的寄存器。 图2 看门狗控制定时器 图3 看门狗数据寄存器 图4 看门狗计数寄存器 第一步:当系统上电后,第一件事就是调用ppcboot,ppcboot中相应的代码如下: /下面才是真正的上电复位的启动代码: /* * the actual reset code */ 合肥优视科技 内部机密 reset: /* turn off the watchdog */ #if d

2、efined(CONFIG_S3C2400) #define pWTCON 0x15300000 /* Interupt-Controller base addresses */ #define INTMSK 0x14400008 /* clock divisor register */ #define CLKDIVN 0x14800014 #elif defined(CONFIG_S3C2410) #define pWTCON 0x53000000 /Watchdog timer control register /* Interupt-Controller base addresses *

3、/ #define INTMSK 0x4A000008 #define INTSUBMSK 0x4A00001C /* clock divisor register */ #define CLKDIVN 0x4C000014 #define MPLLCON 0x4C000004 #define CLK_CTL_BASE 0x4C000000 #endif ldr r0, =pWTCON mov r1, #0x0 /Disable the reset function of the watchdog timer str r1, r0 可以看出,在系统以上电做的第一件事情就是使看门狗不起作用。 第

4、二步:当我们运行reboot,实际是调用了application/busybox/init/init.c里的init_reboot函数,该函数如下: if(pid = fork) = =0) message(CONSOLE | LOG, “reboot(magic=%08xn)”, magic); reboot(magic); _exit(0); 可以看出,该函数又调用了reboot函数。 第三步:该reboot会调用/kernel/kernel/sys.c里的sys_reboot函数,magic传递的参数是01234567和LINUX_REBOOT_CMD_RESTART相同,见下面代码:

5、switch(cmd) case LINUX_REBOOT_CMD_RESTART: . pirntk(KERN_EMERG “Restarting system.n”); machine_restart(NULL); _break; 可以看出,现在接着调用machine_restart函数。 合肥优视科技 内部机密 第四步:下面我们看一下machine_restart函数,该函数定义在kernel/arch/arm/kernel/process.c文件里,该函数又调用了arch_reset(reboot_mode)函数; 第五步:arch_reset函数是定义在kernel/include/asm-arm/arch-s3c2410/system.h文件里,该函数如下: if(mode = = s) cpu_reset(0); else WTCNT = 0x100; WTDAT = 0x100; WTCON = 0x8021; /使看门狗使能

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号