Hi Marek,
Am 23.05.2017 um 11:25 schrieb Belisko Marek marek.belisko@gmail.com:
Hi Nikoalus,
On Tue, May 23, 2017 at 10:42 AM, H. Nikolaus Schaller hns@goldelico.com wrote:
Hi, I recently flashed the eMMC of the OMAP5EVM and the Pyra and now a subtle issue has surfaced.
If I boot without SD card from eMMC everything is fine.
But if I boot from the SD card it works fine for U-Boot and loading the kernel, but the kernel loaded from SD card mounts the rootfs from eMMC and does not find any loadable modules (unless kernels are exactly the same version).
I could trace the u-boot-kernel interaction down to the uboot environment
finduuid=part uuid mmc ${mmcdev}:2 uuid args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
I was facing similar issue yesterday but my root looks like root=LABEL=rootfsA. I just drop LABEL=rootfsA and replace by /dev/sdb2 (in my case) and it works fine.
Yes, this is the "old style" way of defining the root by a hard-coded name.
But the problem is that there is no guarantee any more in modern kernels that sdb2 is not sdc2 on next boot. Depending on which other devices are plugged in.
And I want the bootargs to somehow be the same if I boot from eMMC or SD card. Or we have to ask users to configure uEnv.txt each time they plug in different cards...
As long as the device just has one device of each type it is stable.
I was trying shortly look to kernel source and I cannot find anything related to LABEL but for your case it should work (please loon for comment for function name_to_dev_t in ini/do_mounts.c) Hope this helps.
The problem with LABEL is that they all have the same label by the way the makesd script is doing the partitioning. It creates a "boot" and one "rootfs" partition. And then we have the same problem: the eMMC provides a "rootfs" partition as well as the SD card that is plugged in.
And, I can't make the label match the numbering scheme U-Boot is assuming (mmc 0:2 vs. mmc 1:2).
The UUID approach was invented to solve all these issues. But for that it should work...
This is not at all wrong and should do what it is intended for: map the mmc device numbers from U-Boot in a way that the kernel can assign a different order (and it does!).
This is done by translating the device numbers into a unique code, i.e. the UUID.
Now why does it not work in my setup?
Breaking into the U-Boot console shows the problem:
=> part list mmc 0
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type 1 128 778233 00000000-01 0c Boot 2 778361 14786439 00000000-02 83 => part list mmc 1
Partition Map for MMC device 1 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type 1 128 386656 00000000-01 0c Boot 2 386784 7346464 00000000-02 83 =>
Both, the eMMC and the SD card have the same UUIDs i U-Boot and therefore the kernel picks up the wrong one...
Now how can they have the same UUID? It should be unique, shouldn't it?
That is strange since after booting into Linux (still without kernel modules), I can look up how Linux sees the storage partitions:
root@letux:~# blkid /dev/mmcblk0p1: LABEL="boot" UUID="E052-71A6" TYPE="vfat" /dev/mmcblk0p2: LABEL="rootfs" UUID="5db8fefe-f8d2-46e4-828a-ab4fe1b8f9b4" TYPE="ext3" /dev/mmcblk1p1: LABEL="boot" UUID="ED66-B684" TYPE="vfat" /dev/mmcblk1p2: LABEL="rootfs" UUID="cd5f3d4c-c562-4aa0-893c-9fa9e9bd64a9" TYPE="ext3" /dev/mmcblk0: PTTYPE="dos" /dev/mmcblk1: PTTYPE="dos" root@letux:~#
And there, we have nice UUIDs!
Looks as if U-Boot does not recognize them. But the kernel still can mount some rootfs by "root=PARTUUID=00000000-02". Strange.
I have digged a little into the U-Boot code and the 'part list' command
http://git.goldelico.com/?p=gta04-uboot.git;a=blob;f=cmd/part.c;h=414031e6f3...
calls part_print().
There appear to be different part_print subfunctions for each partition scheme.
iMac:src hns$ fgrep part_print -R System.map System.map:8001b084 T part_print System.map:8001b744 T part_print_dos System.map:8001bc58 t part_print_iso System.map:8001c118 T part_print_efi iMac:src hns$
And since I format the SD cards by MBR format, I guess part_print_dos() is called.
http://git.goldelico.com/?p=gta04-uboot.git;a=blob;f=disk/part_dos.c;h=ed783...
This finally calls
http://git.goldelico.com/?p=gta04-uboot.git;a=blob;f=disk/part_dos.c;h=ed783...
There it simply prints %08x-%02x which corresponds to our PARTUUID=00000000-02
So it appears as if U-Boot is not capable of detecting the full UUID of an ext3 partition on a MBR disk while the kernel does.
What I have seen while going through the code: there is some CONFIG_PARTITION_TYPE_GUID Maybe we need to define it?
BR Nikolaus