2个不稳定版本
0.2.0 | 2022年3月28日 |
---|---|
0.1.0 | 2021年9月14日 |
#911 in Unix APIs
10KB
198 代码行(不包括注释)
realjump
realjump
是一个小巧的#![no_std]
crate,可以从您的x86-64内核加载和引导实模式代码(MBR,GRUB2等)。它将系统从长模式回到实模式并跳转到代码。
但是为什么这样做呢?
它主要用于快速从您的操作系统返回Linux,因为服务器硬件上的引导过程可能非常缓慢,您也太懒于在内核中实现一些类似kexec的功能。
使用方法
- 禁用中断。
- 将内存的前1MiB身份映射为可执行。
- 停止所有其他处理器。
- 调用
realjump::boot(your_mbr_slice, 0x7c00).unwrap()
。 realjump
将处理其余部分。它将加载自己的GDT并将系统完全回退到实模式。
INT 13h
当您返回实模式时,某些BIOS服务(如INT 13h)可能不再工作。对于GRUB2,您可以通过直接使用realjump::boot_grub2
加载core.img
来解决这个问题。