12

I am developing a kernel for an operating system. In order to execute it, I've decided to use GRUB. Currently, I have a script attached to GRUB's stage1, stage2, a pad file and the kernel itself together which makes it bootable. The only problem is that when I run it, you have to let GRUB know where the kernel is and how big it is manually and then boot it, like this:

kernel 200+KERNELSIZE
boot

KERNELSIZE is the size of the kernel in blocks. This is fine and alright for a start, but is it possible to get these values in the binary and make GRUB boot the kernel automatically? Any suggestions on how to accomplish that?

Cristián Romo
  • 9,814
  • 12
  • 50
  • 50
  • 1
    The conventional approach is to put your kernel itself on a filesystem grub can read; any particular reason you aren't doing that? – Charles Duffy Oct 19 '08 at 04:52
  • I agree with Charles here. Put your OS an existing file system until your OS has a file system of its own. – Jason Dagit Oct 19 '08 at 10:27
  • Well, for testing, we have the final binary (including GRUB) as a file on disk to be used in an emulator. How would I make a disk image that has a filesystem on it? – Cristián Romo Dec 05 '08 at 18:51

2 Answers2

3

http://www.gnu.org/software/grub/manual/grub.html#Embedded-data gives some general information about block list storage in GRUB. Most importantly, it mentions that block lists are stored in well defined locations in stage2.

You will probably want to look at the GRUB source code to figure out the exact location.

user29480
  • 367
  • 2
  • 3
2

I would imagine you could just make your own menu.lst conf file, load that at the grub shell with "configfile /path/to/menu.lst" and then do "setup (hd0)" replacing values as needed. I'm just guessing though.. no telling what the differences are on your custom setup.

  • It turns out we were using an old tutorial that told us to it the way we were. We've since taken Charles's advice and moved the bootable image to an ISO. – Cristián Romo May 27 '09 at 16:37