Как прошить образ ядра на андроид устройстве? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь изучить настройку ядра, и для этого у меня есть целевое устройство OnePlus 6T.Я могу скомпилировать исходный код ядра на моем Ubuntu 18, выполнив следующие действия:

  • Загрузите последний dtc из https://packages.ubuntu.com/cosmic/a...piler/download и установите его.
  • Клонируйте исходный код ядракод: git clone https://github.com/OnePlusOSS/androi...lus_sdm845.git
  • Clone ToolChain: git clone -b linaro-4.9-arm-linux-androideabi https://github.com/ArchiDroid/Toolchain предварительная сборка / gcc / linux-x86 / arm / arm-linux-androideabi-linaro-4.8
  • Откройте терминал в prebuilts / gcc / linux-x86 / aarch64 / aarch64-linux-android-linaro-4.9 и запустите: export CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-
  • Найдите путь к исходному коду ядра в том же терминале.
  • export ARCH = arm64 && export SUBARCH = arm64
  • make clean
  • make mrproper
  • mkdir Out
  • make O = Out sdm845_defconfig
  • make O = Out DTC_EXT = dtc CONFIG_BUILD_ARM64_DT_OVERLAY = y DTC_EXT = dtc -j4
  • arch / arm64 / boot / Image.gz-dtb
  • arch / arm64 /boot / Image.gz
  • arch / arm64 / boot / Image

Мне нужна услуга:

  • Какое изображение я могу использовать для прошивкиAndroid-устройство?
  • Достаточно ли загрузки образа с TWRP для прошивки ядра?

Найдена документация Google

https://source.android.com/devices/bootloader/partitions-images

Согласно следующим строкам из документации Google:


boot : Загрузочный раздел содержит образ ядра и диск RAM, объединенные через mkbootimg.Чтобы напрямую перепрограммировать ядро, не перепрошивая новый загрузочный раздел, можно использовать виртуальный раздел:

kernel : виртуальный раздел ядра перезаписывает только ядро ​​(zImage, zImage-dtb,Image.gz-dtb), написав новое изображение поверх старого.Для этого он определяет начальное местоположение существующего образа ядра в eMMC и копирует в это местоположение, учитывая, что новый образ ядра может быть больше существующего.Загрузчик может освободить место, перемещая любые данные после него или отказываясь от операции с ошибкой.Если предоставленное ядро ​​разработки несовместимо, вам может потребоваться обновить раздел dtb, если таковой имеется, или раздел поставщика или системы с соответствующими модулями ядра.


Я думаю, что для прошивки необходимо использовать arch/arm64/boot/Image.gz-dtbядро.Насколько я понимаю, Image.gz-dtb - это виртуальный образ, который можно использовать для прошивки только ядра на Android.

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

Любая помощь или руководство будут очень полезны в этот момент.


Я нашел шаги, необходимые для прошивки собственного ядра на устройстве Android, например:

  • Сначала нам нужно получить загрузочный образ стоковой прошивки, который мы можем получить, выполнив следующие команды:
    • adb shell "ls -la /dev/block/platform/soc/1d84000.ufshc/by-name/"> MoreInfo \ msm_partitions.txt
    • Обратите внимание на имя загрузочного раздела, например boot_a -> / dev / block / sde11 boot_b -> / dev / block / sde39
    • Пропущены шаги по созданию boot.img с помощью команды dd command.
  • Загрузите последнюю версию Android Image Kitchen из этой темы.
  • Запустите следующее с загрузочным образом: unpackimg.sh .img
  • Найдите zImageфайл и замените его своим образом ядра (переименуйте его в то, что получилось из образа загрузки)
  • Запустите следующее для перепаковки: repackimg.sh
  • Прошивка нового загрузочного образа с помощью fastboot или TWRP!

Мне нужно больше информации о пропущенных шагах. На самом деле процесс, описанный выше, работает на устройствах, которые имеют только один загрузочный раздел. Кто-нибудь знает, как я могу прошить свой единственный образ ядра на устройстве с разделением / b?


Обновление:

Я искал в Интернете A / B-разделы и обнаружил, что они используются для бесшовных обновлений, т. Е. Один раздел активен одновременно, а другой неактивный раздел может использоваться для обновления обновления. При перезагрузке другой раздел станет активным, а один раздел станет неактивным. Дополнительная информация: https://www.xda -developers.com / how-a ... opment-on-xda /

Если мое понимание верно, тогда мне просто нужно выполнить следующие шаги, чтобы найти правильный образ, который будет использоваться на первом этапе перепрошивки ядра:

  1. fastboot getvar all | grep «current-slot»
  2. dd if = "путь к загрузке активного слота" из = / sdcard / boot.img
  3. Продолжите с boot.img и перепрограммируйте ядро, выполнив вышеописанные шаги для перепрошивки ядра.

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

1 Ответ

1 голос
/ 17 июня 2019
  1. OTA-обновление A / B Во-первых, необходимо подтвердить, является ли OTA-обновление A / B вашего телефона, с помощью команды fastboot getvar slot-count Если команда возвращает '2', значит, ваш телефон поддерживает A /B OTA обновление, означающее, что у вас есть два загрузочных раздела 'boot_a' и 'boot_b', в противном случае должен быть только один раздел 'boot'
  2. загрузочный образ. Созданные вами образы (Image.gz-dtb) простообразы ядра с деревом устройств.Их недостаточно для перепрошивки на загрузочный раздел, так как должны быть объединены аргументы ramdisk и boot.Содержимое виртуального диска содержит обычные загрузочные двоичные файлы для OTA-системы без A / B или восстановительные двоичные файлы для OTA-системы A / B.Вам нужно найти официальные образы ramdisk и объединить их с образом ядра.Обычно mkbootimg используется для создания загрузочного образа в Android AOSP.
  3. Мигает fastboot flash boot boot boot.img Это работает как в A / B, так и в не-A / B системах, так как образ будет мигать по умолчаниюактивный раздел (boot_a по умолчанию, если у вас нет OTA или вы используете «fastboot set_active» для его изменения). В системе A / B вы также можете использовать «fastboot getvar current-slot» для получения активного слота и определенного флэш-раздела «fastboot».flash boot_a boot.img 'или' fastboot flash boot_b boot.img 'XDA предоставляет сценарии для прошивки образов ядра (Image.gz-dtb) с помощью следующих шагов: a.Дамп boot.img с вашего телефона б.Извлеките ramdisk.img из boot.img c.Объедините Image.gz-dtb с ramdisk.img в новый boot.img d.Загрузите новый boot.img в загрузочный раздел

    https://forum.xda -developers.com / oneplus-6t / development / kernel-holydragon-t3878107 предоставляет настроенные сценарии ядра и flash, вы должны проверить инайдите подходящий способ прошить образ ядра.

...