大家好,我是本期栏目编辑小友,现在为大家讲解Embeded linux之reboot问题。
重新启动命令
//内核\sys.c
magic1、magic2、两个(同国际组织)国际组织类型的"魔力数",用于防止误操作。具体在"包含/uapi/linux/reboot.h "中定义。
cmd,重新启动方式。
//包含\ linux \重新启动. h
#定义LINUX _ REOT _ CMD _ RESTART0x 01234567
#定义LINUX _ REBOOT _ CMD _ HALT0xCDEF0123
#定义LINUX _ REOT _ CMD _ CAD _ ON0x 89 abcdef
#定义LINUX _ REOT _ CMD _ CAD _ OFF0x 00000000
#定义LINUX _ REOT _ CMD _ POWER _ OFF0x 4321 FeDC
#定义LINUX _ REOT _ CMD _ RESTART 20x1b2c 3d 4
#定义FCE 2
#定义LINUX _ REBOOT _ CMD _ KEXEC0x 45584543
啊,其它的额外参数。
SYSCALL _ definee 4(重新启动,int,magic1,int,magic2,无符号int,cmd,void __user *,arg)
{
.
开关(cmd)
{
案例LINUX _ REBOOT _ CMD _ RESTART:
内核_重启(空);
打破;
案例LINUX _ REBOOT _ CMD _ CAD _ ON:
c _ A _ D=1;
打破;
案例LINUX _ REBOOT _ CMD _ CAD _ OFF:
c _ A _ D=0;
打破;
案例LINUX _ REBOOT _ CMD _ HALT:
kernel _ halt();
do _ exit(0);
恐慌("无法停止");
案例LINUX _ REBOOT _ CMD _ POWER _ off :
kernel _ power _ off();
do _ exit(0);
打破;
案例LINUX _ REBOOT _ CMD _ RESTART2:
if (strncpy_from_user(缓冲区[0],arg,sizeof(缓冲区)- 1) 0)
{
ret=-EFAULT;
打破;
}
缓冲区[sizeof(buffer)-1]=' 0 ';
内核_重启(缓冲);
打破;
#ifdef CONFIG_KEXEC
案例LINUX _ REBOOT _ CMD _ KEXEC:
ret=kernel _ kexec();
打破;
#endif
# ifdef CONFIG _ HIBERNATION
案例SUSP
ret=休眠();
打破;
#endif
默认值:
ret=-EINVAL;
打破;
.
}
//内核\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 * * cmd line _ p)
{
struct machine _ desc * mde sc;
.
mde sc=setup _ machine _ FDT(_ _ ATA _ GS _ pointer);
.
if(mde sc-重启)
arm _ pm _ restart=mde sc-restart;
.
}
//arch\arm\mach-hi3516a\core.c
机器_启动(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。TImer=hi3516a_sys_TImer。init_machine=hi3516a_init。reserve=hi3516a_reserve。restart=hi3516a_restart,
机器_结束
//arch\arm\mach-hi3516a\core.c
void hi3516a_restart(char模式,常量字符*cmd)
{
__raw_writel(~0,IO _ ADDRESS(SYS _ CTRL _ BASE)REG _ SC _ SYSRES);
}
//驱动程序\ MTD \设备\ his fc 350 \ his fc 350 _ hi 3516 a . c
#定义SYS_CTRL_BASE(0x20050000)
//arch \ arm \ mach-hi 3535 \包括\ mach \平台。h
#定义REG_SC_SYSRES0x4
标签:
版权声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢您的支持与理解。