On Thu, May 05, 2016 at 10:21:25PM +0200, Alexander Graf wrote: > On 05.05.16 17:21, Grant Likely wrote: > > On Thu, May 5, 2016 at 12:45 PM, Marcin Juszkiewicz > > <marcin.juszkiew...@linaro.org> wrote: > >> Recently my angry post on Google+ [1] got so many comments that it was > >> clear > >> that it would be better to move to some mailing list with discussion. > >> > >> As it is about boot loaders and Linaro has engineers from most of SoC > >> vendor > >> companies I thought that this will be best one. > >> > >> 1. https://plus.google.com/u/0/+MarcinJuszkiewicz/posts/J79qhndV6FY > >> > >> > >> All started when I got Pine64 board (based on Allwinner A64 SoC) and had > >> same issue as on several boards in past - boot loader written in some > >> random > >> place on SD card. > >> > >> Days where people used Texas Instruments SoC chips were great - in-cpu boot > >> loader knew how to read MBR partition table and was able to load 1st stage > >> boot loader (called MLO) from it as long it was FAT filesystem. > >> > >> GPU used by Raspberry/Pi is able to read MBR, finds 1st partition and reads > >> firmware files from there as long it is FAT. > >> > >> Chromebooks have some SPI flash to keep boot loaders and use GPT > >> partitioning to find where from load kernel (or another boot loader). > >> > >> And then we have all those boards where vendors decided that SPI flash for > >> boot loader is too expensive so it will be read from SD card instead. From > >> any random place of course... > >> > >> > >> Then we have distributions. And instead of generating bunch of images per > >> board they want to make one clean image which will be able to handle as > >> much > >> as possible. > >> > >> If there are UEFI machines on a list of supported ones then GPT > >> partitioning > >> will be used, boot loader will be stored in "EFI system area" and it boots. > >> This is how AArch64 SBSA/SBBR machines work. > >> > >> But there are also all those U-Boot (or fastboot/redboot/whateverboot) > >> ones. > >> They are usually handled by taking image from previous stage and adding > >> boot > >> loader(s) by separate script. And this is where "fun" starts... > >> > >> GPT takes first 17KB of storage media as it allow to store information > >> about > >> 128 partitions. Sure, no one is using so many on such devices but still > >> space is reserved. > >> > >> But most of chips expects boot loader(s) to be stored: > >> > >> - right after MBR > >> - from 1KB > >> - from 8KB > >> - any other random place > >> > >> So scripts start to be sets of magic written to handle all those SoCs... > >> > >> Solution for existing SoCs is usually adding 1MB of SPI flash during design > >> phase of device and store boot loader(s) there. But it is so expensive > >> someone would say when it is in 10-30 cents range... > >> > > > > To try and summarize, what you're asking for is to define the usage > > model for eMMC/SD when both the firmware* and OS are stored on the > > same media. Some argue that these things should always be on separate > > devices, but while the debate is interesting, it doesn't match the > > reality of how hardware is being built. In which case, the derived > > requirements are: > > > > 1) Co-exist with MBR partitioning > > 2) Co-exist with GPT partitioning > > 3) Be detectable --- partitioning tools must respect it > > 4) Be speced. Write it down so that tool and SoC developers can see it > > as a requirement > > 5) Be usable regardless of firmware type (UEFI, U-Boot, Little Kernel, etc) > > 6) Support some form of firmware non-volatile storage (variable storage) > > > > It would be really nice if we could also have: > > 7) Support SoCs that hardcode boot code to specific locations > > (after-MBR, 1K, 8K, random) > > - May not be able to support all variants, but it is a worthy design goal. > > > > Agreed? > > > > * I'm ignoring eMMC's separate boot area because that solution has > > firmware and OS logically separated. Strong recommendation is for SoCs > > to boot from boot area. Then normal GPT/MBR partitioning works just > > fine. The rest of this discussion only applies If the SoC cannot do > > that > > > > (For the following discussion, I refer to the UEFI spec because that > > is where GPT is defined, but the expectation is that anything > > described here can equally be used by non-UEFI platforms) > > > > I've just read through the UEFI GPT spec, and here are the constraints: > > - MBR must be at the start of LBA0 (0 - 0.5k) > > - Primary GPT must be at the start of LBA1 (0.5k to 4k, but may > > collide with fw), > > - It /seems/ like the GPT Header and GPT table can be separated by > > some blocks. The GPT header has a PartitionEntryLBA field which > > describes where the actual table of partitions starts. > > - GPTHeader is only 92 bytes. > > - It should be possible to have: GPTHeader @ start of LBA1 and > > GPTPartitionTable @ an LBA that doesn't conflict with firmware. > > > > I think we have everything we need to work around the location of the > > FW boot image without breaking the UEFI spec. The biggest problem is > > making sure partitioning tools don't go stomping over required > > firmware data and rendering systems unbootable. I *think* we can solve > > that problem by extending the MBR definition to block out a required > > region and then work around that. Tools can generically see the > > special region in the MBR and work around it accordingly. > > So what's the goal here? Are we trying to force GPT on systems whose > vendors never intended them to run with GPT? > > It really shouldn't matter at the end of the day whether we use GPT or > MBR. All uEFI firmware implementations I'm aware of support both. So if > you have a device whose bootloader collides with the GPT, just use MBR. > > As for the "protection" mechanism, I don't think it's a problem either. > IIRC parted starts to create partitions with a sensible alignment (1 or > 2MB). Most boot loaders fit perfectly fine within that gap. > > So this really boils down to > > - use GPT for systems that were designed for it or > - use MBR with alignment gap to first partition > > end of story. There shouldn't be any middle ground. At least I haven't > seen any so far :).
This, for many use cases is also true. A reason that various SoCs pick a magic location that is MBR compatible and not strictly GPT compatible is that they don't see a use case for GPT-not-MBR being used. By-and-large saying your SD card shall have an MBR and shall leave a gap that is also well aligned for the card anyhow is enough for (enough) firmware to reside in the magic locations. -- Tom _______________________________________________ cross-distro mailing list cross-distro@lists.linaro.org https://lists.linaro.org/mailman/listinfo/cross-distro