即使有完美的引导装载机可供使用,我也在业余时间一次打开和关闭作为教育练习.我遇到了一个问题.
我能够执行初始启动和链接加载其他扇区没有问题.如果我正在编写自己的操作系统,我会很高兴.:)相反,我正在尝试引导Linux.我所面临的挑战是双重的.
我知道我需要将内核(Linux)加载到0x100000的内存中.我知道我应该在内核的偏移量0x202处找到"HdrS"签名.我也知道起始地址应该是0x214.但是,当我跳到该位置的地址时,它会停止.显然,围绕这个包装调试器非常困难.:) 我是否遗漏了确定内核正确起始地址所必需的这一系列事实?
我怀疑(1)的答案可能与需要用硬件发现信息填充一些内存区域有关.我已经在OSDev Wiki上看到了几个对此的引用,但我似乎错过了这里,并且确切地说需要哪些数据. 引导加载程序是否负责硬件发现?如果是这样,需要将哪些数据放在哪里?
需要注意的另一点是我已经处于32位保护模式,因为我正在处理创建EFI启动系统,因此16位实模式在这里不是一个真正的选项,从而消除了实际模式的起始位置.核心.