[edk2-devel] [edk2-platforms: PATCH v2 1/1] Platform/RPi3: Add Debian 10 installation in Systems.md

Pete Batard pete at akeo.ie
Wed Aug 7 14:24:10 UTC 2019


Hi Leif,

On 2019.08.06 18:25, Leif Lindholm wrote:
> Minor suggestions inline:
> 
> On Thu, Jul 25, 2019 at 04:22:48PM +0100, Pete Batard wrote:
>> This documents the installation of vanilla Debian 10.0 ARM64 (netinst),
>> which we validated for both Model B and Model B+.
>> Also fix an erroneous reference in an RPi3.fdf comment.
>>
>> Signed-off-by: Pete Batard <pete at akeo.ie>
>> ---
>>   Platform/RaspberryPi/RPi3/RPi3.fdf   |   2 +-
>>   Platform/RaspberryPi/RPi3/Readme.md  |   4 +-
>>   Platform/RaspberryPi/RPi3/Systems.md | 124 +++++++++++++++++++-
>>   3 files changed, 123 insertions(+), 7 deletions(-)
>>
>> diff --git a/Platform/RaspberryPi/RPi3/RPi3.fdf b/Platform/RaspberryPi/RPi3/RPi3.fdf
>> index c7c3f7a2ab8c..c62d649834c7 100644
>> --- a/Platform/RaspberryPi/RPi3/RPi3.fdf
>> +++ b/Platform/RaspberryPi/RPi3/RPi3.fdf
>> @@ -300,7 +300,7 @@ [FV.FvMain]
>>     INF Platform/RaspberryPi/$(PLATFORM_NAME)/Drivers/LogoDxe/LogoDxe.inf
>>   
>>     #
>> -  # FDT (GUID matches mRaspberryPiFfsFileGuid in RaspberryPiPlatformDxe)
>> +  # FDT (GUID matches gRaspberryPiFdtFileGuid in FdtDxe)
>>     #
>>     FILE FREEFORM = DF5DA223-1D27-47C3-8D1B-9A41B55A18BC {
>>       SECTION RAW = Platform/RaspberryPi/$(PLATFORM_NAME)/DeviceTree/bcm2710-rpi-3-b.dtb
>> diff --git a/Platform/RaspberryPi/RPi3/Readme.md b/Platform/RaspberryPi/RPi3/Readme.md
>> index 624f3a8d287a..797da1bab4a9 100644
>> --- a/Platform/RaspberryPi/RPi3/Readme.md
>> +++ b/Platform/RaspberryPi/RPi3/Readme.md
>> @@ -18,8 +18,8 @@ Raspberry Pi is a trademark of the [Raspberry Pi Foundation](http://www.raspberr
>>   
>>   This firmware, that has been validated to compile against the current
>>   [edk2](https://github.com/tianocore/edk2)/[edk2-platforms](https://github.com/tianocore/edk2-platforms),
>> -should be able to boot Linux (SUSE, Ubuntu), NetBSD, FreeBSD as well as Windows 10 ARM64
>> -(full GUI version).
>> +should be able to boot Linux (Debian, Ubuntu, SUSE), NetBSD, FreeBSD as well as Windows
>> +10 ARM64 (full GUI version).
>>   
>>   It also provides support for ATF ([Arm Trusted Platform](https://github.com/ARM-software/arm-trusted-firmware)).
>>   
>> diff --git a/Platform/RaspberryPi/RPi3/Systems.md b/Platform/RaspberryPi/RPi3/Systems.md
>> index f6410eb25f0d..4a0c6f3e4de3 100644
>> --- a/Platform/RaspberryPi/RPi3/Systems.md
>> +++ b/Platform/RaspberryPi/RPi3/Systems.md
>> @@ -1,5 +1,125 @@
>>   # Tested Operating Systems
>>   
>> +## Debian
>> +
>> +[Debian 10](https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/) netinst has been
>> +tested and confirmed to work, both on the Model B and Model B+, including installation in
>> +either wired or wireless mode.
>> +
>> +Below are steps you can follow to install Debian 10 onto an SD card:
>> +* Partition the media as MBR and create a ~300 MB partition on it with MBR type `0x0e`.
>> +  __Note:__ Make sure that the partition scheme is MBR (not GPT) and the type `0x0e` (not
>> +  `0xef` for instance), as the ondie Broadcom bootloader supports neither the GPT scheme nor
> 
> ondie -> on-die (or on-SoC may be even more clear to civilians).

I think I'll use "on-CPU" then, as this should be even more explicit.

>> +  the ESP MBR type.
>> +* Set the partition as active/bootable. This is needed as the Debian partition manager can
>> +  not detect it as ESP otherwise, which we need for GRUB installation. If using `fdisk` on
>> +  Linux, you can use the `a` command to set a partition as active. On Windows, you can use
>> +  `DISKPART` and then type `active` after selecting the relevant disk and partition.
>> +* Format the partition as FAT. Here again you should make sure that you use FAT rather than
>> +  FAT32 else the Debian partition manager will not detect the partition as ESP. If you
>> +  are using Windows `DISKPART` then `format fs=fat quick` should do it. On Linux, `mkfs.vfat`
>> +  with the default options should do the same as long as the partition isn't too large.
> 
> It would be preferable if we could have an actual number here - the
> 12-bit, 16-bit and 32-bit fat size switchover points are known. I
> assume it is the 32-bit breakpoint (2 or 4Gb?) we want to avoid?

The switchover point actually depends of the utility, since there is 
overlap between 12, 16 and 32. But that's not actually a problem with 
diskpart on Windows as 'fs=fat' does force FAT16 so you'll get an error 
if the partition is too large and can only accommodate FAT32 (which 
should usually occur past the 2 GB point).

In other words, the only potential issue here is with Linux' mkfs.vfat. 
But there too we can add a switch (-F 16) to force FAT16, so I'll alter 
the documentation to have that, plus a note that mentions that the 
partition should be under 2 GB.

I'll also take this opportunity to stress out that the only reason we 
are trying to force FAT16 here is because the Debian installer's 
partition manager is very temperamental with regards to its detection of 
an ESP that doesn't have either the relevant GUID for GPT or type 0xef 
for MBR, none of which can be used on a Pi. There are actually cases 
where I have seen that utility also detect a FAT32 MBR partition without 
type 0xef as an ESP. However, I have found out that, in most cases, the 
presence of FAT32 vs FAT16 acts as a switch to demote the partition from 
ESP, which is the reason why the notes promote the use of FAT16 over 
FAT32. But as mentioned in the additional notes however, it's still 
relatively easy to fix the ESP issue if you use FAT32 and/or if the 
Debian partition manager fails to detect it as ESP.

Now, one can only wish that Broadcom had anticipated UEFI usage for 
their hardcoded boot loader, as they'd only needed to have added 0xef, 
alongside the other FAT based MBR partition types they recognize for 
this whole annoyance to be avoided...

I'll send a v3 when I get a chance.

Regards,

/Pete

> 
> /
>      Leif
> 
>> +* Copy the UEFI firmware files (`RPI_EFI.fd`, `bootcode.bin`, `fixup.dat` and `start.elf`)
>> +  as well as an appropriate `config.txt` onto the FAT partition. If needed you can download
>> +  the non UEFI binary files from https://github.com/raspberrypi/firmware/tree/master/boot.
>> +* (Optional) If you plan to install through WiFi, you will need to download relevant non-free
>> +   WLAN firmware binaries from your WLAN interface (`brcmfmac43430-sdio.txt` and
>> +  `brcmfmac43430-sdio.bin` for a Raspberry Pi 3 Model B, `brcmfmac43455-sdio.txt` and
>> +  `brcmfmac43455-sdio.bin` for a Raspberry Pi 3 Model B+). You may also want to obtain the
>> +  relevant `.clm_blob` (`brcmfmac43430-sdio.clm_blob` or `brcmfmac43455-sdio.clm_blob`),
>> +  though wireless networking should work even if you do not provide these files. Copy these
>> +  files either at the root of your FAT partition or into a `firmware/` directory there.
>> +* Download the latest `debian-##.#.#-arm64-netinst.iso` from
>> +  https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/
>> +* Extract the full content of the ISO onto the FAT partition you created.
>> +* Insert the media and power up the Raspberry Pi device.
>> +* On the GRUB menu select `Install` and let the Debian Installer process start.
>> +  __Note:__ In case anything goes wrong during the install process, you can use
>> +  <kbd>Alt</kbd>-<kbd>F4</kbd> to check the installation log.
>> +* Select your Language, Country and Keyboard and let the installer proceed until it reports
>> +  that `No Common CD-ROM drive was detected.`
>> +* On `Load CD-ROM drivers from removable media` select `No`.
>> +* On `Manually select a CD-ROM module and device` select `Yes`.
>> +* On `Module needed for accessing the CD-ROM` select `none`.
>> +* On `Device file for accessing the CD-ROM` type the following exactly:
>> +  ```
>> +  -t vfat -o rw /dev/mmcblk0p1
>> +  ```
>> +* (Optional) If you have copied the non-free WLAN firmware binaries, and plan to install
>> +  through wireless, you can let the installer select the firmware files. Please be mindful
>> +  that you may be asked multiple times as there are multiple files to provide.
>> +* If requested by the installer, set up your network by choosing the network interface you
>> +  want to use for installation and (optionally) your access point and credentials.
>> +* Go through the hostname, user/password set up and customize those as you see fit.
>> +* Let the installer continue until you get to the `Partition disks` screen. There, for
>> +  `Partitioning method` select `Manual`. You __should__ see something like this:
>> +  ```
>> +  MMC/SD card #1 (mmcblk0) - 16.0 GB SD 2WCGO
>> +       #1  primary  314.6 MB  B  K  ESP
>> +           pri/log                  FREE SPACE
>> +  ```
>> +  In other words, the partition manager should already detect your existing partition as
>> +  `ESP`, with the `B` (bootable) and `K` (keep data) flags. If that is not the case, (e.g.
>> +  if it says `fat16` or `fat32` instead of `ESP`) then it probably means you either didn't
>> +  format the partition to FAT or you forgot to set the bootable flag. If that is the case,
>> +  refer to the _Additional Notes:_ below.
>> +* Select `FREE SPACE` → `Create a new partition` and create a `1 GB` primary `swap`
>> +  partition.
>> +* Select `FREE SPACE` → `Create a new partition` and allocate the rest to a primary
>> + `ext4` root partition (mountpoint = `/`)
>> +* After doing the above, your partition report should look like this:
>> +  ```
>> +  MMC/SD card #1 (mmcblk0) - 16.0 GB SD 2WCGO
>> +       #1  primary  314.6 MB  B  K  ESP
>> +       #2  primary    1.0 GB     f  swap    swap
>> +       #3  primary   14.7 GB     f  ext4    /
>> +  ```
>> +* Select `Finish partitioning and write changes to disk` and then `Yes` and let the
>> +  installer continue with the base system installation.
>> +* After a while, the installer should produce a message that states:
>> +  ```
>> +  [!!] Configure the package manager
>> +
>> +  apt-configuration problem
>> +  An attempt to configure apt to install additional packages from the CD failed.
>> +  ```
>> +  This is a __benign__ message that you can safely ignore by selecting `Continue` (The
>> +  reason it is benign is we are running a net install and won't need to access the "CD-ROM"
>> +  files post install).
>> +* Once you have dimissed the message above, pick the mirror closest to your geographical
>> +  location and let the installer proceed with some more software installation.
>> +* Finally, at the `Software selection` screen, choose any additional software package you
>> +  wish to install. `Debian desktop environment` should work out of the box if you choose to
>> +  install it.
>> +* Let the process finalize the software and GRUB bootloader installation and, provided you
>> +  didn't run into the partition manager issue described above (installation partition not
>> +  seen as `ESP`) you can reboot your machine when prompted, which, once completed, should
>> +  bring you to your newly installed Debian environment.
>> +
>> +### Additional Notes for Debian
>> +
>> +The reason we use `-t vfat -o rw /dev/mmcblk0p1` for the source media (i.e. "CD-ROM" device)
>> +is because, whereas the first partition on the SD card is indeed `/dev/mmcblk0p1`, we also
>> +need to provide additional parameters for the `mount` command that the installer invokes
>> +behind the scenes. For instance, if we don't use `-t vfat`, then ISO-9660 is forced as the
>> +file system, and if we don't use `-o rw` then the partition will be mounted as read-only
>> +which then prevents the same partition from being remounted when locating the non-free
>> +firmware files or when setting up `/efi/boot`.
>> +
>> +With regards to fixing the partitioning if you don't see `B  K  ESP` when entering the
>> +partition manager, what you need to do is:
>> +* Before you create the additional partitions, select the first partition and change its
>> +  type to `ESP`. Note however that doing this will change the type of the partition to `0xef`
>> +  which is precisely what we're trying to avoid by having the partition manager already
>> +  detect it as ESP, as type `0xef` is __unbootable__ by the Broadcom CPU.
>> +* To fix this then, before you choose `Continue` on the `Installation complete` prompt you
>> +  need to open a new console (<kbd>Alt</kbd>-<kbd>F2</kbd>) and then type:
>> +  ```
>> +  chroot /target fdisk /dev/mmcblk0
>> +  ```
>> +  Then press <kbd>t</kbd>, <kbd>1</kbd>, <kbd>e</kbd> <kbd>w</kbd>, to reset the partition
>> +  to type `0x0e` (FAT16 LBA).
>> +
>>   ## Ubuntu
>>   
>>   [Ubuntu 18.04 LTS](http://releases.ubuntu.com/18.04/) has been tested and confirmed to work,
>> @@ -35,10 +155,6 @@ Then, to have your changes applied run `update-grub` and reboot.
>>   
>>   ## Other Linux distributions
>>   
>> -* Debian ARM64 does not currently work, most likely due to missing required module support
>> -  in its kernel. However its installation process works, so it may be possible to get it
>> -  running with a custom kernel.
>> -
>>   * OpenSUSE Leap 42.3 has been reported to work on Raspberry 3 Model B.
>>   
>>   * Other ARM64 Linux releases, that support UEFI boot and have the required hardware support
>> -- 
>> 2.21.0.windows.1
>>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#45006): https://edk2.groups.io/g/devel/message/45006
Mute This Topic: https://groups.io/mt/32599164/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list