Embededlinux之reboot

 reboot命令

//kernel\sys.c

magic1、magic2,两个int类型的“魔力数”,用于防止误操作。具体在“include/ua     pi   /     linux   /reboot.h”中定义。

cmd,reboot方式。

//include\linux\reboot.h

#define LINUX_REBOOT_CMD_RESTART 0x01234567
#define LINUX_REBOOT_CMD_HALT 0xCDEF0123
#define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
#define LINUX_REBOOT_CMD_CAD_OFF 0x00000000
#define LINUX_REBOOT_CMD_POWER_OFF 0x4321FEDC
#define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
#define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
#define LINUX_REBOOT_CMD_KEXEC 0x45584543

arg,其它的额外参数。

SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg)

{

...

switch (cmd)

{

case LINUX_REBOOT_CMD_RESTART:
kernel_restart(NULL);
break;

case LINUX_REBOOT_CMD_CAD_ON:
C_A_D = 1;
break;

case LINUX_REBOOT_CMD_CAD_OFF:
C_A_D = 0;
break;

case LINUX_REBOOT_CMD_HALT:
kernel_halt();
do_exit(0);
panic("     can   not halt");

case LINUX_REBOOT_CMD_POWER_OFF:
kernel_power_off();
do_exit(0);
break;

case LINUX_REBOOT_CMD_RESTART2:
if (strncpy_f     rom   _user(&buffer[0], arg, sizeof(buffer) - 1) < 0)

{

ret = -EFAULT;
break;
}
buffer[sizeof(buffer) - 1] = '\0';

kernel_restart(buffer);
break;

#ifdef CONFIG_KEXEC
case LINUX_REBOOT_CMD_KEXEC:
ret = kernel_kexec();
break;
#endif

#ifdef CONFIG_HIBERNA     TI   ON
case LINUX_REBOOT_CMD_SW_SUSPEND:
ret = hiberna     te   ();
break;
#endif

default:
ret = -EINVAL;
break;

...

}

//kernel\sys.c

void kernel_restart(char *cmd)

{

...

machine_restart(cmd);

}

//arch\     arm   \kernel\process.c

void machine_restart(char *cmd)

{

...

arm_pm_restart(reboot_mode, cmd);

...

}

//arch\arm\kernel\setup.c

void __init setup_arch(char **cmdline_p)

{

struct machine_desc *mdesc;

...

mdesc = setup_machine_fdt(__atags_pointer);

...

if (mdesc->restart)

arm_pm_restart = mdesc->restart;

...

}

//arch\arm\mach-hi3516a\core.c

MACHINE_START(HI3516A, "hi3516a")

.atag_offset = 0x100,
.map_io = hi3516a_map_io,
.init_early = hi3516a_init_early,
.init_irq = hi3516a_gic_init_irq,
.handle_irq = gic_handle_irq,
.  TI mer = &hi3516a_sys_  TI mer,
.init_machine = hi3516a_init,
.reserve = hi3516a_reserve,
.restart = hi3516a_restart,
MACHINE_END

//arch\arm\mach-hi3516a\core.c

void hi3516a_restart(char mode, const char *cmd)

{
__raw_writel(~0, IO_ADDRESS(SYS_CTRL_BASE) + REG_SC_SYSRES);
}

//drive     rs   \mtd\devices\hisfc350\hisfc350_hi3516a.c

#define SYS_CTRL_BASE (0x20050000)

//arch\arm\mach-hi3535\include\mach\platform.h

#define REG_SC_SYSRES 0x4

 Embededlinux之reboot_设计制作_模拟技术

 Embededlinux之reboot_设计制作_模拟技术



59
169
0
69

相关资讯

  1. 1、热巴网购被认出?客服:是你吗李长歌?热巴的回答笑翻全场3234
  2. 2、刚刚辟谣就被实锤?陈羽凡百口莫辩,白百何最后微博意味深长!5068
  3. 3、误读张爱玲被群嘲,马思纯的文青人设崩了?2843
  4. 4、《如懿传》霍建华演绎最渣皇帝,风流成性,网友:活该他孤独终老5158
  5. 5、《斗罗大陆》肖战和吴宣仪感情戏太寡淡,还是陈年三角恋更上头99
  6. 6、韩国清纯玉女24岁自杀她遭遇的潜规则比张紫妍更变态1914
  7. 7、77岁“白骨精”杨春霞,被骗拍摄了西游记,至今记恨杨洁未能释怀2340
  8. 8、《家园防线》首曝预告杰森斯坦森铁拳回归4302
  9. 9、《鲁豫有约》发哥自嘲是“票房毒药”,一句电影对白走出丧女之痛3196
  10. 10、百花奖为何不受关注?4年前的一次评选,导致口碑严重下滑_杨颖2736
全部评论(0)
我也有话说
0
收藏
点赞
顶部