John Baldwin f352a0d45f First cut at support for booting a GPT labeled disk via the BIOS bootstrap
on i386 and amd64 machines.  The overall process is that /boot/pmbr lives
in the PMBR (similar to /boot/mbr for MBR disks) and is responsible for
locating and loading /boot/gptboot.  /boot/gptboot is similar to /boot/boot
except that it groks GPT rather than MBR + bsdlabel.  Unlike /boot/boot,
/boot/gptboot lives in its own dedicated GPT partition with a new
"FreeBSD boot" type.  This partition does not have a fixed size in that
/boot/pmbr will load the entire partition into the lower 640k.  However,
it is limited in that it can only be 545k.  That's still a lot better than
the current 7.5k limit for boot2 on MBR.  gptboot mostly acts just like
boot2 in that it reads /boot.config and loads up /boot/loader.  Some more
details:
- Include uuid_equal() and uuid_is_nil() in libstand.
- Add a new 'boot' command to gpt(8) which makes a GPT disk bootable using
  /boot/pmbr and /boot/gptboot.  Note that the disk must have some free
  space for the boot partition.
  - This required exposing the backend of the 'add' function as a
    gpt_add_part() function to the rest of gpt(8).  'boot' uses this to
    create a boot partition if needed.
- Don't cripple cgbase() in the UFS boot code for /boot/gptboot so that
  it can handle a filesystem > 1.5 TB.
- /boot/gptboot has a simple loader (gptldr) that doesn't do any I/O
  unlike boot1 since /boot/pmbr loads all of gptboot up front.  The
  C portion of gptboot (gptboot.c) has been repocopied from boot2.c.
  The primary changes are to parse the GPT to find a root filesystem
  and to use 64-bit disk addresses.  Currently gptboot assumes that the
  first UFS partition on the disk is the / filesystem, but this algorithm
  will likely be improved in the future.
- Teach the biosdisk driver in /boot/loader to understand GPT tables.
  GPT partitions are identified as 'disk0pX:' (e.g. disk0p2:) which is
  similar to the /dev names the kernel uses (e.g. /dev/ad0p2).
- Add a new "freebsd-boot" alias to g_part() for the new boot UUID.

MFC after:	1 month
Discussed with:	marcel (some things might still change, but am committing
			what I have so far)
2007-10-24 21:33:00 +00:00
..
2005-02-13 22:25:33 +00:00
2006-12-29 16:28:38 +00:00
2006-04-14 09:20:25 +00:00
2005-01-18 10:09:38 +00:00
2006-10-24 20:20:41 +00:00
2006-11-05 20:12:32 +00:00
2006-10-31 22:36:49 +00:00
2006-10-31 22:07:29 +00:00
2006-09-30 11:02:17 +00:00
2006-10-15 13:51:49 +00:00
2007-06-11 19:38:38 +00:00
2007-10-19 18:24:19 +00:00
2007-07-24 18:08:16 +00:00
2006-09-30 11:12:36 +00:00
2006-04-19 19:21:42 +00:00
2005-11-13 01:47:04 +00:00
2007-03-02 20:07:59 +00:00
2005-02-13 22:25:33 +00:00
2007-07-03 12:46:08 +00:00
2004-10-24 14:25:53 +00:00
2006-07-27 13:26:29 +00:00
2007-05-28 09:48:25 +00:00
2005-02-13 23:45:54 +00:00
2007-10-15 20:00:24 +00:00
2007-09-23 16:06:37 +00:00