[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: grub-probe fails to find PC partition due to Apple disklabel
From: |
Chris Knadle |
Subject: |
Re: grub-probe fails to find PC partition due to Apple disklabel |
Date: |
Tue, 22 Jul 2008 22:53:49 -0400 |
User-agent: |
KMail/1.9.9 |
Felix Zielcke asked me about the Apple/PC hybrid disk problem, so I'm trying
to figure out how to fix it. Sorry for letting this fall through the cracks;
this is from three months ago.
On Monday 14 April 2008, Pavel Roskin wrote:
> On Mon, 2008-04-14 at 10:21 -0400, Chris Knadle wrote:
> > Instead of probing for partmaps in a particular order, it seems that
> > solving for this might best be done by probing for all of the possible
> > partmaps for the architecture and trying to figure out which one best
> > fits. grub2's grub-probe is clearly already doing this; _however_,
> > somehow the PC partmap probe is subtly different depending on whether
> > partmap/apple.c is included in the search.
>
> Apple and PC partition maps can coexist. The place occupied by the
> PC partition and the PC magic is not used by the Apple partition.
Yeah, I see -- this includes the Apple magic of 0xAA55 that's placed in
Sector 0, so searching for that won't help.
> The way to differentiate them would be to check at the first sector. If
> it starts with 0x45 0x52, then it's an Apple partition. A PC partition
> would have an executable entry there. The Apple magic would decode to:
>
> inc %bp
> push %dx
>
> It's highly unlikely to be used in the first two instructions of the PC
> boot code.
>
> partmap/apple.c starts reading with the second sector (unsigned pos =
> GRUB_DISK_SECTOR_SIZE). Perhaps it should read the first sector to
> check the magic.
I see where you got 0x4552 from; it's the HFS+ magic descriptor. For the
moment I'm using the following #define for that:
#define GRUB_APPLE_FIRST_SECTOR_MAGIC 0x4552
I'm trying to figure out how to get grub to check the first sector. Mainly
I'm asking for hints. I think it involves running a new instance of
grub_disk_read for the first sector (sector 0 of the partition) within the
apple_partition_map_iterate function -- something like:
grub_disk_read(&raw, 0, 0, sizeof (struct grub_apple_part), (char *)&apart))
But then I want to check the first block against 0x4552, and
apart.first_phys_block is 32-bits. Since I want the first (high) 16 bits, I
think I need to make the comparison in a way such as:
if ((apart.first_phys_block & 0xFFFF0000) == (0x4552 << 16))
Is this vaguely on the right track?
Thanks.
-- Chris
--
Chris Knadle
address@hidden
- Re: grub-probe fails to find PC partition due to Apple disklabel,
Chris Knadle <=
- Re: grub-probe fails to find PC partition due to Apple disklabel, Pavel Roskin, 2008/07/22
- Re: grub-probe fails to find PC partition due to Apple disklabel, Chris Knadle, 2008/07/23
- Re: grub-probe fails to find PC partition due to Apple disklabel, Chris Knadle, 2008/07/23
- Re: grub-probe fails to find PC partition due to Apple disklabel, Robert Millan, 2008/07/25
- Re: grub-probe fails to find PC partition due to Apple disklabel, Chris Knadle, 2008/07/25
- Re: grub-probe fails to find PC partition due to Apple disklabel, Felix Zielcke, 2008/07/27
- Re: grub-probe fails to find PC partition due to Apple disklabel, Felix Zielcke, 2008/07/27
- Re: grub-probe fails to find PC partition due to Apple disklabel, Chris Knadle, 2008/07/28
- Re: grub-probe fails to find PC partition due to Apple disklabel, Felix Zielcke, 2008/07/28
- Re: grub-probe fails to find PC partition due to Apple disklabel, Chris Knadle, 2008/07/28