~~tag> Edge2 Uboot UEFI boot~~
===== Edge2 Uboot UEFI =====
We recommend start 1st partition from 32768 block
```
sfdisk --dump /dev/mmcblk0 | grep -e first -e start=
first-lba: 32768
/dev/mmcblk0p1 : start= 32768,
```
UEFI bootloader for [[:Edge2]] can be fixed/updated via [[/software/oowow/how-to/online-scripts]]
UEFI bootloader for [[:Edge2]] can be installed via [[:OOWOW]] online images
Problems was solved: [[#solution]], after we can start EFI loader and boot up next system
eMMC storage From **16384** to **32768** block must be reserved for boot-loader
===== Default Boot problem =====
OOWOW SPL loader can't find FIT-image at **0x4000** sector eMMC | SD
```log OOWOW SPL boot log
U-Boot SPL board init
U-Boot SPL 2017.09 (May 12 2023 - 11:40:17)
Failed to set cpub01
Failed to set cpub23
I2c2 speed: 100000Hz
MCU: boot mode 0x20: 1, flag 0x92: 3
MCU: boot flag < 83
board_boot_order: /chosen found, using spl_boot_device()
!!! same-as-spl:
+++ /mmc@fe2e0000:
!!! /mmc@fe2c0000:
!!! /mmc@fe2e0000:
!!! /spi@fe2b0000/flash@1:
Trying to boot from MMC1 :: 0
Trying fit image at 0x4000 sector
Not fit magic
...
```
===== Solution =====
Write FIT image to eMMC or SD **0x4000** sector
```sh write-uefi-bootloader-to-emmc
EFI=edge2_UEFI_Release_v0.7.1.img
wget https://github.com/edk2-porting/edk2-rk3588/releases/download/v0.7.1/$EFI
DISK=${DISK:-/dev/mmcblk0}
dd skip=2048 seek=$((0x4000)) count=$((0x4000)) of=$DISK if=$EFI conv=fsync,notrunc
```
For example 1st write https://dl.khadas.com/.test/edge2_UEFI_Release_3676af4b.img
to USB flash, start OOWOW going into shell...
```sh copy FIT image to eMMC
dd if=/dev/sda skip=2048 count=$((0x4000)) seek=$((0x4000)) of=/dev/mmcblk0
```
or just using oowow with Internet, start OOWOW going into shell...
```shell oowow copy EFI loader to eMMC
root@edge2-00000:/# curl -jkL \
https://dl.khadas.com/.test/edge2_UEFI_Release_3676af4b.img \
-r$((2048*512))-$(((2048+3440)*512)) | dd seek=$((0x4000)) of=$(mmc_disk)
```
```shell check eMMC EFI Image header
root@edge2-00000:/# dd if=/dev/mmcblk0 skip=$((0x4000)) count=1 2>/dev/null \
| hexdump -C | grep "00000080 49 6d 61"
```
```shell check eMMC
root@edge2-00000:/# dd if=/dev/mmcblk0 skip=$((0x4000)) count=1 | hexdump -C
1+0 records in
1+0 records out
512 bytes copied, 0.000668208 s, 766 kB/s
00000000 d0 0d fe ed 00 00 08 b3 00 00 00 38 00 00 07 e8 |...........8....|
00000010 00 00 00 28 00 00 00 11 00 00 00 10 00 00 00 00 |...(............|
00000020 00 00 00 cb 00 00 07 b0 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 |................|
00000040 00 00 00 03 00 00 00 04 00 00 00 a7 00 00 00 00 |................|
00000050 00 00 00 03 00 00 00 04 00 00 00 9d 00 1a da 57 |...............W|
00000060 00 00 00 03 00 00 00 04 00 00 00 93 64 5d 13 d5 |............d]..|
00000070 00 00 00 03 00 00 00 1f 00 00 00 00 46 49 54 20 |............FIT |
00000080 49 6d 61 67 65 20 77 69 74 68 20 41 54 46 2f 4f |Image with ATF/O|
00000090 50 2d 54 45 45 2f 55 45 46 49 00 00 00 00 00 03 |P-TEE/UEFI......|
000000a0 00 00 00 04 00 00 00 0c 00 00 00 01 00 00 00 01 |................|
000000b0 69 6d 61 67 65 73 00 00 00 00 00 01 75 62 6f 6f |images......uboo|
000000c0 74 00 00 00 00 00 00 03 00 00 00 04 00 00 00 c1 |t...............|
000000d0 00 10 00 00 00 00 00 03 00 00 00 04 00 00 00 b5 |................|
000000e0 00 00 00 00 00 00 00 03 00 00 00 05 00 00 00 00 |................|
000000f0 55 45 46 49 00 00 00 00 00 00 00 03 00 00 00 0b |UEFI............|
00000100 00 00 00 20 73 74 61 6e 64 61 6c 6f 6e 65 00 00 |... standalone..|
00000110 00 00 00 03 00 00 00 06 00 00 00 25 61 72 6d 36 |...........%arm6|
00000120 34 00 00 00 00 00 00 03 00 00 00 07 00 00 00 2a |4..............*|
00000130 55 2d 42 6f 6f 74 00 00 00 00 00 03 00 00 00 05 |U-Boot..........|
00000140 00 00 00 2d 6e 6f 6e 65 00 00 00 00 00 00 00 03 |...-none........|
00000150 00 00 00 04 00 00 00 39 00 20 00 00 00 00 00 01 |.......9. ......|
00000160 68 61 73 68 00 00 00 00 00 00 00 03 00 00 00 20 |hash........... |
00000170 00 00 00 af 43 5a 62 74 4c df d5 01 33 2d 58 d0 |....CZbtL...3-X.|
00000180 28 fe b1 37 45 eb 6c e5 84 f6 e9 f6 ca 69 77 af |(..7E.l......iw.|
00000190 5f 8b c8 a5 00 00 00 03 00 00 00 07 00 00 00 3e |_..............>|
000001a0 73 68 61 32 35 36 00 00 00 00 00 02 00 00 00 02 |sha256..........|
000001b0 00 00 00 01 61 74 66 2d 31 00 00 00 00 00 00 03 |....atf-1.......|
000001c0 00 00 00 04 00 00 00 c1 00 02 f7 64 00 00 00 03 |...........d....|
000001d0 00 00 00 04 00 00 00 b5 00 10 00 00 00 00 00 03 |................|
000001e0 00 00 00 15 00 00 00 00 41 52 4d 20 54 72 75 73 |........ARM Trus|
000001f0 74 65 64 20 46 69 72 6d 77 61 72 65 00 00 00 00 |ted Firmware....|
00000200
```
===== UBOOT SPL EFI logs =====
```log UBOOT SPL EFI logs
Trying to boot from MMC1 :: 1
Trying fit image at 0x4000 sector
## Verified-boot: 0
## Checking atf-1 0x00040000 ... sha256(909ea14106...) + OK
## Checking uboot 0x00200000 ... sha256(435a62744c...) + OK
## Checking fdt 0x00300000 ... sha256(c07f4a4d71...) + OK
## Checking atf-2 0x000f0000 ... sha256(6a970ae6b4...) + OK
## Checking atf-3 0xff100000 ... sha256(3ea8cf0d7e...) + OK
## Checking optee 0x08400000 ... sha256(fde0860845...) + OK
Jumping to U-Boot(0x00200000) via ARM Trusted Firmware(0x00040000)
Total: 126.537 ms
...
UEFI firmware (version 3676af4b built at 16:11:00 on May 11 2023)
...
```
===== UBOOT EFI disk partitions =====
```shell UBOOT EFI partitions dump
~$ sfdisk --dump /dev/sda
label: gpt
label-id: 73987B6B-4974-4C94-A3E8-58AB2EB7A946
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 31116254
/dev/sda1 : start= 2048, size= 16384, type=F808D051-1602-4DCD-9452-F9637FEFC49A, uuid=B750E44E-833F-4A30-C38C-B117241D84D4, name="uboot"
```
===== UEFI image info =====
```shell UEFI-info example
~$ ./edge2-uefi-extract RK3588_NOR_FLASH_REL.img
/dts-v1/;
version = <0x00>;
totalsize = <0x5afc0b>;
timestamp = <0x64ebea49>;
description = "FIT Image with ATF/OP-TEE/UEFI";
#address-cells = <0x01>;
SIZE: 0x5afc0b == 5962763 : 11646 == 5962774
LAST: 7274496(14208 - 0x3780) < 7274496 < 0x6F0000
# dd skip=2048 count=11646 of=edge2-uefi-bootloader.img if=RK3588_NOR_FLASH_REL.img conv=fsync,notrunc
/ {
images {
uboot {
data-size = <0x500000>;
data-offset = <0x00>;
atf-1 {
data-size = <0x3084c>;
data-offset = <0x500000>;
atf-2 {
data-size = <0x6000>;
data-offset = <0x530a00>;
atf-3 {
data-size = <0x6000>;
data-offset = <0x536a00>;
optee {
data-size = <0x70998>;
data-offset = <0x53ca00>;
fdt {
data-size = <0x1e95>;
data-offset = <0x5ad400>;
nvdata {
data-position = <0x6c0000>;
data-size = <0x30000>;
configurations {
loadables = "uboot\0atf-2\0atf-3\0optee\0nvdata";
005afb70 67 2d 69 6f 2d 77 69 64 74 68 00 64 6d 61 73 00 |g-io-width.dmas.|
005afb80 23 69 6f 2d 63 68 61 6e 6e 65 6c 2d 63 65 6c 6c |#io-channel-cell|
005afb90 73 00 67 70 69 6f 2d 63 6f 6e 74 72 6f 6c 6c 65 |s.gpio-controlle|
005afba0 72 00 23 67 70 69 6f 2d 63 65 6c 6c 73 00 67 70 |r.#gpio-cells.gp|
005afbb0 69 6f 2d 72 61 6e 67 65 73 00 69 6e 74 65 72 72 |io-ranges.interr|
005afbc0 75 70 74 2d 63 6f 6e 74 72 6f 6c 6c 65 72 00 23 |upt-controller.#|
005afbd0 69 6e 74 65 72 72 75 70 74 2d 63 65 6c 6c 73 00 |interrupt-cells.|
005afbe0 62 69 61 73 2d 70 75 6c 6c 2d 75 70 00 62 69 61 |bias-pull-up.bia|
005afbf0 73 2d 64 69 73 61 62 6c 65 00 64 72 69 76 65 2d |s-disable.drive-|
005afc00
1f206fece22135a50e929aff52105782 edge2-uefi-bootloader.img
edge2-uefi-bootloader.img: Device Tree Blob version 17, size=2413, boot CPU=0, string block size=217, DT structure block size=2140
```
===== Downloads =====
* [[dl>/products/edge2/firmware/UEFI/]]
* [[gh>/edk2-porting/edk2-rk3588/]]
===== Links =====
* https://opensource.rock-chips.com/wiki_Boot_option
* https://opensource.rock-chips.com/wiki_U-Boot
* https://github.com/edk2-porting/edk2-rk3588/
* https://dl.khadas.com/.test/edge2_UEFI_Release_3676af4b.img