能力值:
( LV13,RANK:410 )
2 楼
能力值:
( LV2,RANK:10 )
3 楼
谢谢~~~~
能力值:
(RANK:260 )
4 楼
关键在于“不重新启动”计算机,“重新启动”的定义如何。
根据
流程:bios --> linux --> windows xp或者dos
来看,应该是说不经过bios代码就满足条件。
kexec这个系统调用可以理解为对内核的exec()调用。这是正解。
如果权限足够了,也可以直接进入内核。
写一个内核模块,将其载入内核,先将内核调度器关闭,然后从硬盘加载DOS BOOT RECORD到正确的物理地址,恢复BIOS参数块,然后重新初始化CPU到实模式,手动BOOT即可。
以上是我突然想到的,理论上可行,实际并不可行,比如BIOS参数块,Linux内核并没有保留它,因此说恢复,其实无法恢复。而且直接写物内存的方法也有问题。
所以,forget about it ,就说说kexec()调用吧。
1.内核版本必需为 2.6.13 或以上,并且要保证编译内核时该选项是打开的。
一般发行版都是打开的,egrep KEXEC /boot/config-2.6.xxxxxxx 结果是y就可以
而自己编译的内核,配置路径是
Processor type and features --->
[*] kexec system call (EXPERIMENTAL)
2.系统需要安装 kexec-tools
3.kexec通过一些数据结构来识别inux的内核映像,必须是elf32格式,所以还必须写一个“伪内核”来实现dos loader的功能。
能力值:
( LV2,RANK:10 )
5 楼
你这里说的编译内核是指要切换到的内核是吗?如果是的话, 这内核是我们要转换到的,它应该不需要具有kexec的功能哈 请大哥解惑
能力值:
( LV2,RANK:10 )
6 楼
BIOS的信息这时候还在内存里。
如果复位CPU(应该不算重启计算机,重启应该指的是CPU以及大部分外设都掉电了)让它从头加载BIOS执行,就不好控制了。
还是直接去加载NTLDR好了,放到合适的内存位置,然后执行。 引导扇区,NTLDR的源码网上都有吧,nt4源码里面有ntldr的源码
reactOS里面也有,估计都差不多。