在kernel的中重启kernel
来源:互联网 发布:wifi破解软件电脑版 编辑:程序博客网 时间:2024/06/04 19:42
需求
其实很简单,就想再特定情况下重启内核。当时拿到这个需求时首先想到的就是kernel_restart,经过测试发现无效;最后使用的是machine_restart;我们来看看这两个接口有啥区别。
kernel_restart
先看看实现:
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); machine_restart(cmd); //实际重启}
从上面可以看出来,在kernel重启前,内核要先做些处理即:
kernel_restart_prepare(cmd);看看kernel_restart_prepare的实现:
void kernel_restart_prepare(char *cmd){blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);system_state = SYSTEM_RESTART;usermodehelper_disable();device_shutdown();syscore_shutdown();}
从上面代码可以看出,如果你是再驱动中调用kernel_restart,很有可能是执行不成功的。
因为他不能shutdown self。此时如果要实现重启的功能,请看machine_restart。
machine_restart
实现
void machine_restart(char *cmd){machine_ops.restart(cmd);}
从上面可知,machine_restart是直接调用arch的reset函数(具体的实现自己去arch/下查找)。
参考
Linux设备驱动简析—PC重启源码分析:http://hi.baidu.com/qingmugong/item/8da4cafbf62d7cc80dd1c8db
窥探 kernel --- 分析sys_reboot :http://blog.csdn.net/muge0913/article/details/7518576
0 0
- 在kernel的中重启kernel
- android 在kernel中获取启动kernel命令行的参数
- Kernel
- kernel
- kernel
- kernel
- kernel
- kernel
- kernel
- Kernel
- 在kernel中编译单独的.ko
- 卡在Starting kernel...的原因分析
- 关于kernel-devel、kernel-header和kernel src的区别
- android kernel 对 标准kernel 的改动
- android kernel 对 标准kernel 的改动
- Android kernel与普通kernel的区别
- can如何在kernel里面修改,保证编译的kernel是支持can驱动的
- 0.11内核编译出错 kernel/kernel.o:在函数‘copy_process’中:对'memcpy'未定义的引用。
- UVa 10250 另两棵树
- android xmlReader解析RSS(中文乱码解决)
- 记住!房子千万不要这样装
- YII中在CDetailView中结合CHtml::image()实现图片的查看
- vijos1101题解
- 在kernel的中重启kernel
- char* 修改问题
- 蓝桥杯基础练习--十六进制转八进制
- codeforces div2 round#231 A
- Delphi的format使用总结
- 空间更宽阔港口股份控股
- 多研究些问题,少谈些主义
- jQuery技术内幕:深入解析jQuery架构设计与实现原理
- 影响站点排名的53个因素