Отсутствует ядро ​​DTB после создания подписанных образов Android - PullRequest
0 голосов
/ 06 марта 2019

Я портирую Android на устройство отображения, и почти завершил это.В устройстве используется Freescale / NXP i.MX6 Dual Lite Soc.Используемая версия Android - Android 8.0.0, а сборка основана на пакетах поддержки Board от NXP / Freescale (ссылка ниже).https://www.nxp.com/support/developer-resources/software-development-tools/i.mx-developer-resources/android-os-for-i.mx-applications-processors:IMXANDROID?tab=Design_Tools_Tab

Операционная система прекрасно работает, и образы (u-boot, boot.img, system.img, vendor.img), относящиеся к процессу make, прекрасно работают на устройстве.Итак, мой последний шаг - подписать изображения, и именно здесь я изо всех сил стараюсь, чтобы все заработало.

Я следую приведенному здесь руководству: https://source.android.com/devices/tech/ota/sign_builds

После выполнения шаговЯ использую теперь подписанные изображения, найденные в файле «signature-img.zip», чтобы прошить устройство (используя NXP Manufacturing Tool, а не Fast Boot).Однако теперь устройство не может загрузить ядро, что приводит к ошибке, что DTB отсутствует.

Hit any key to stop autoboot:  0 
boota mmc0 
kernel   @ 14008000 (8183104)
ramdisk  @ 15000000 (2036048)
## Booting Android Image at 0x12000000 ...
Kernel load addr 0x14008000 size 7992 KiB
Kernel command line: console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=128M androidboot.console=ttymxc0 consoleblank=0 ldo_active=on androidboot.hardware=sedevices cma=448M android.selinux=permissive android.dm_verify=disable androidboot.selinux=enforce androidboot.dm_verity=disable androidboot.storage_type=emmc loglevel=8 vt.global_cursor_default=0 buildvariant=userdebug androidboot.serialno=0b2861d4df668b47 androidboot.soc_type=imx6dl androidboot.storage_type=emmc
ERROR: Did not find a cmdline Flattened Device Tree
Could not find a valid device tree
resetting ...

Я сузил проблему до самого первого шага в руководстве, где "make dist""выполняется в каталоге сборки.Это приводит к созданию ряда ZIP-файлов в папке «out / dist», которые обрабатываются далее в следующих шагах руководства.Я попытался перепрограммировать устройство с изображениями, созданными на этом шаге (находится в полученном файле "out / dist / * - img - *. Zip"), и это вызывает точно такую ​​же проблему.

Итакмой вопрос: что на самом деле делает «make dist», что приводит к отсутствию DTB в «boot.img»?Я бы ожидал, что он будет использовать уже работающий «boot.img», найденный в «out / target / product //».Но вместо этого, кажется, воссоздать этот образ, и в этом случае не включать DTB.Как и во многих других аспектах создания Android из Source, работа «make dist», кажется, нигде не описана в документации.

Я надеюсь, что любой, кто имеет некоторый опыт в создании Android из исходного кода, кое-что знает оэто потому, что я, похоже, застрял по-королевски.

Просто к вашему сведению;когда я прошиваю «boot.img», созданный после обычного «make», вывод после U-boot выглядит следующим образом:

Hit any key to stop autoboot:  0 
boota mmc0 
Error: blob decap job completed with errors 0x2000081A
In boota get fastboot lock status error. Set lock status
kernel   @ 14008000 (8183104)
ramdisk  @ 15000000 (2036754)
fdt      @ 14f00000 (40998)
## Booting Android Image at 0x12000000 ...
Kernel load addr 0x14008000 size 7992 KiB
Kernel command line: console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=128M androidboot.console=ttymxc0 consoleblank=0 ldo_active=on androidboot.hardware=sedevices cma=448M android.selinux=permissive android.dm_verify=disable androidboot.selinux=enforce androidboot.dm_verity=disable androidboot.storage_type=emmc loglevel=8 vt.global_cursor_default=0 buildvariant=userdebug androidboot.serialno=0b2861d4df668b47 androidboot.soc_type=imx6dl androidboot.storage_type=emmc
## Flattened Device Tree blob at 14f00000
   Booting using the fdt blob at 0x14f00000
   Loading Kernel Image ... OK
   Using Device Tree in place at 14f00000, end 14f0d025
switch to ldo_bypass mode!

Starting kernel ...

1 Ответ

0 голосов
/ 08 марта 2019

Кажется, NXP / Freescale изменили сценарии сборки в своем пакете поддержки платы AOSP и нарушили включение DTB в процесс. Может показаться, что они были довольны, когда выходные данные стандартного процесса «make» работали на их Dev Board, и никогда не удосужились проверить, можно ли с ним создать рабочие подписанные образы Release.

Был создан механизм для включения DTB в пакет dist (определяющий местоположение DTB в BOARD_KERNEL_DTS), и он также использовался для их цели "make otapackage". Однако эта цель генерирует только неподписанный (или подписанный с помощью ключей dev) пакет OTA, который нельзя использовать со сценариями подписи.

Чтобы заставить его работать должным образом, мне пришлось внести небольшое изменение в основной Makefile, который указывает местоположение DTB, определенного в BoardConfig.mk. Изменение было достаточно простым, но сложная часть заключалась в том, чтобы выяснить, где проблема и как она должна была работать в первую очередь.

Следующий патч в "build / make /" устраняет проблему, если только BoardConfig.mk указывает один DTB (который по крайней мере соответствует моим потребностям):

diff --git a/core/Makefile b/core/Makefile
index a650565a1..92f3025a9 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -621,6 +621,19 @@ ifdef INTERNAL_KERNEL_CMDLINE
 INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(INTERNAL_KERNEL_CMDLINE)"
 endif

+# NOTE! This script has a defect which cause the kernel DTB to be left out when ever 'make dist'
+#       is executed. The following addition "fixes" this by adding the first dtb specified in the 
+#       BoardConfig.mk file. (I would guess in most cases there is never more than one!)
+ifdef dist_goal
+ifndef BOARD_KERNEL_DTS
+ifdef TARGET_BOARD_DTS_CONFIG
+DTS_BOARD=$(word 2, $(subst :, ,$(word 1, $(TARGET_BOARD_DTS_CONFIG))))
+BOARD_KERNEL_DTS="$(KERNEL_OUT)/$(DTS_BOARD)"
+$(info FIXUP: Defining BOARD_KERNEL_DTS:=[$(BOARD_KERNEL_DTS)] for BOOT packaging)
+endif
+endif
+endif
+
 INTERNAL_MKBOOTIMG_VERSION_ARGS := \
     --os_version $(PLATFORM_VERSION) \
     --os_patch_level $(PLATFORM_SECURITY_PATCH)
...