我正在开发一个操作系统的内核。为了执行它,我决定使用GRUB。目前,我已经将一个脚本和GRUB的stage1
、stage2
、一个pad文件以及内核组合在一起,使其可启动。唯一的问题是,当我运行它时,你必须手动告诉GRUB内核在哪里以及它有多大,然后才能启动它,像这样:
kernel 200+KERNELSIZE boot
KERNELSIZE
是内核占用的块数。这对于初始阶段来说还可以,但是有没有可能在二进制文件中获得这些值并使GRUB自动启动内核?有什么建议吗?
我正在开发一个操作系统的内核。为了执行它,我决定使用GRUB。目前,我已经将一个脚本和GRUB的stage1
、stage2
、一个pad文件以及内核组合在一起,使其可启动。唯一的问题是,当我运行它时,你必须手动告诉GRUB内核在哪里以及它有多大,然后才能启动它,像这样:
kernel 200+KERNELSIZE boot
KERNELSIZE
是内核占用的块数。这对于初始阶段来说还可以,但是有没有可能在二进制文件中获得这些值并使GRUB自动启动内核?有什么建议吗?
http://www.gnu.org/software/grub/manual/grub.html#Embedded-data提供了关于GRUB中块列表存储的一些概括信息。最重要的是,它提到块列表存储在stage2中定义良好的位置。
您可能需要查看GRUB源代码来确定确切的位置。
我想你可以自己制作一个menu.lst配置文件,使用“configfile /path/to/menu.lst”在grub shell中加载该文件,然后根据需要替换值执行“setup (hd0)”操作。不过这只是我的猜测...无法确定你的自定义设置有何差异。