public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Haojian Zhuang <haojian.zhuang@linaro.org>
To: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Cc: Fathi Boudra <fathi.boudra@linaro.org>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	okuji@enbug.org, grub-devel@gnu.org
Subject: Re: GRUB issue on device priority
Date: Wed, 8 Nov 2017 13:46:13 +0800	[thread overview]
Message-ID: <3239f02f-73ce-0bd3-681b-494d378d3ebd@linaro.org> (raw)
In-Reply-To: <CAEaD8JPD1qPot_GMzJ02-=8WyTiwfnEmhmHmEq+Y=wKDB95DDQ@mail.gmail.com>

On 2017/11/7 23:14, Vladimir 'phcoder' Serbinenko wrote:
> 
> 
> On Tue, Nov 7, 2017, 15:23 Haojian Zhuang <haojian.zhuang@linaro.org 
> <mailto:haojian.zhuang@linaro.org>> wrote:
> 
>     Hi all,
> 
>     It seems there's a device priority issue in GRUB.
> 
> Please use mailing list for grub, not just messaging random people some 
> of whom have left project 10 years ago.

Sure. Just find the mailing account. Loop grub-devel@gnu.org.

> 
> 
>     All block io handles are linked into the list in edk2, and GRUB could
>     fetch it. Then GRUB creates its own ascending on HD priority.
> 
> What do you mean by "priority"? It's just disk numbers that don't change 
> anything.

Yes, it's disk numbers and it causes an issue.

In edk2, I organize all handles in sequence. For example, eMMC is the 
first BlockIO device, and SD is the second BlockIO device.

In GRUB, it resorts the sequence by ascending order on UUID (device 
path). Since both eMMC and SD controllers are varient of one IP, use the 
same device driver for these two devices. Then UUIDs are in below. GRUB 
names SD with HD0 and eMMC with HD1. The disk numbers are inverted by GRUB.

> 
>     add_device():
>         for (p = devices; *p; p = &((*p)->next)) {
>           ret = grub_efi_compare_device_paths
>     (grub_efi_find_last_device_path
>     ((*p->device_path),
>                               
>     grub_efi_find_last_device_path->device_path));
>           if (ret == 0) {
>             ret = grub_efi_compare_device_paths ((*p)->device_path,
>                                                  d->device_path);
>           }
>           if (ret == 0) {
>             return;
>           } else if (ret > 0) {
>             break;
>           }
>         }
>         ...
> 
>     In the HiKey platform, I prepared the same driver for both eMMC and SD.
>     So the device paths are in below.
>     SD: /HardwareVendor(0d51905b-b77e-452a-a2c0-eca0
>     cc8d514a)[9: 00 e0 23 f7 00 00 00 00 00 ]/UnknownMessaging(1a)/EndEntire
>     eMMC: /HardwareVendor(0d51905b-b77e-452a-a2c0-eca0
>     cc8d514a)[9: 00 d0 23 f7 00 00 00 00 00
>     ]/UnknownMessaging(1d)/Ctrl(0)/EndEntire
> 
>     #define MSG_SD_DP                   0x1A
>     #define MSG_EMMC_DP                 0x1D
> 
>     In the second level, the device paths are different.
> 
>     And GRUB resort the sequence by ascending order (with above code). So SD
>     device always gets higher priority than eMMC device.
> 
>     If we always use installer to install OS, it may not an issue. Since
>     installer could create grub.cfg by itself. But it imports another issue
>     on lacking of persistent variable storage. And we need to deploy system
>     without installer on embedded device.
> 
>     How to fix the priority issue? Fix in GRUB or something else?
> 
> You shouldn't rely on any particular GRUB device ordering. The easiest 
> way is to use UUID.

I failed to find root by uuid. I don't know why. But I found that I can 
make use of "-hint" with multiple parameters. Then this issue could be 
fixed.

Great thanks for your help.

Best Regards
Haojian


  parent reply	other threads:[~2017-11-08  6:03 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-07 14:02 GRUB issue on device priority Haojian Zhuang
     [not found] ` <CAEaD8JPD1qPot_GMzJ02-=8WyTiwfnEmhmHmEq+Y=wKDB95DDQ@mail.gmail.com>
2017-11-08  5:46   ` Haojian Zhuang [this message]
2017-11-08 13:44     ` Leif Lindholm
2017-11-08 13:53 ` Leif Lindholm
2017-11-09  8:41   ` Haojian Zhuang
2017-11-16 16:08     ` Leif Lindholm

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3239f02f-73ce-0bd3-681b-494d378d3ebd@linaro.org \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox