Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Aug 2014 11:00:36 +0400
From:      "Andrey V. Elsukov" <bu7cher@yandex.ru>
To:        Marcel Moolenaar <marcel@xcllnt.net>
Cc:        Craig Rodrigues <rodrigc@FreeBSD.org>, freebsd-current Current <freebsd-current@freebsd.org>
Subject:   Re: mkimg used to create gpt image, problem booting
Message-ID:  <53FADF14.80904@yandex.ru>
In-Reply-To: <5003BFAC-D472-47CE-803B-F1AF8BF961B0@xcllnt.net>
References:  <CAG=rPVeucq%2BsMxe_NPe3Og939o=Sg4WGfYL7PjA1uXGU8uL=8g@mail.gmail.com> <853B0396-2C19-49DF-A8E8-8EB43D107597@xcllnt.net> <CAG=rPVes3Eq87hOE6W135yGvzRiAzHTbCGSxiyd0JBAs2ufqmA@mail.gmail.com> <7CE168C1-6AF3-4AD2-80DB-192AEC49FD2B@xcllnt.net> <CAG=rPVfe6pP08WWaYQ6enk7A6AkT3dBXVxNfK0JgJPaN_rJ_Uw@mail.gmail.com> <CAG=rPVe8Lh=P2MUdycM7%2B2mpSBPhe%2BkTvxR_bjnZfB1EkvK92Q@mail.gmail.com> <53F9AC50.1000000@yandex.ru> <5003BFAC-D472-47CE-803B-F1AF8BF961B0@xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 24.08.2014 19:23, Marcel Moolenaar wrote:
> 
> On Aug 24, 2014, at 2:11 AM, Andrey V. Elsukov <bu7cher@yandex.ru> wrote:
> 
>> On 24.08.2014 06:14, Craig Rodrigues wrote:
> 
>>> I did some further debugging inside the loader by doing the following.
>>>  -> I added "CFLAGS += -DPART_DEBUG" to sys/boot/common/Makefile.inc
>>>  -> I added DEBUG() statements all over sys/boot/common/part.c
>>>
>>> I observed that in sys/boot/common/part.c in the ptbl_gptread() function,
>>> that in this section:
>>>
>>>    305         ent = (struct gpt_ent *)tbl;
>>>    306         size = MIN(hdr.hdr_entries * hdr.hdr_entsz,
>>>    307             MAXTBLSZ * table->sectorsize);
>>>    308         for (i = 0; i < size / hdr.hdr_entsz; i++, ent++) {
>>>    309                 if (uuid_equal(&ent->ent_type, &gpt_uuid_unused, NULL))
>>>    310                         continue;
>>>
>>> ent->ent_type is all 0's, which matches gpt_uuid_unused, so it bails
>>> out of the loop and never adds the gpt partitions to the list of partitions
>>> that the loader can access.
>>
>> Yes, the problem is in the ptable_gptread() function. I'll commit the fix.
>>
> 
> Actually, no. There is *a* problem in that function:
> The function does not respect hdr.hdr_entsz when it
> needs the next entry. It simply uses "ent++", which
> is fixed our definition of struct gpt_ent and may
> not match the definition of the writer.

Yes, you are right. I'll fix this. Thanks.

> I don't see how the loader is responsible for *the*
> problem. All I see in qemu is that the loader, when
> it reads a sector, isn't getting the actual sector
> data that's in the image.
> 
> Just do a ktrace on qemu and you'll see what I mean.
> YMMV of course,

Also there is bootparttest utility in the tools/tools/bootparttest. I
think it can be useful for debugging.

-- 
WBR, Andrey V. Elsukov



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53FADF14.80904>