• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Создание ядра для Samsung, часть 2

NokZKH

Переводчик
Забанен
Регистрация
09.02.2019
Сообщения
99
Реакции
121
Пожалуйста, обратите внимание, что пользователь заблокирован
image12.png


Кастомизация устройства Samsung с пользовательским ядром
В моем последнем уроке я шаг за шагом объяснял, как скомпилировать собственное ядро Samsung, я настоятельно рекомендую вам прочитать эту статью, так как она содержит несколько важных шагов по подготовке среды. Теперь, в этой статье я расскажу, как прошить ядро, которое мы уже скомпилировали.

Отказ от ответственности: получение root прав на вашем телефоне, приведет к аннулированию гарантии из-за необратимого взрыва eFuse на устройстве.

Подготовка окружающей среды
В этом руководстве я предполагаю, что у вашего устройства есть root-права. Если нет, то это руководство поможет вам в этом. Загрузите файл cache.img и файл recovery.img на компьютер, так как они понадобятся для прошивки устройства без необходимости сброса настроек на заводские.

Итак, чтобы мы могли перепрограммировать ядро, которое мы только что скомпилировали, нам нужно получить загрузочный образ устройства, внутри которого находится ядро zImage. Его мы можем перезаписать. Это также поможет, если мы хотим восстановить загрузочный образ до заводских настроек.

Есть два возможных пути достижения этого:

● Сделайте резервную копию образа устройства с помощью пользовательского восстановления.
● Дамп загрузочного образа устройства с помощью «dd».

Мы рассмотрим только второй вариант, так как для первого уже существует много уроков. Но сначала нам нужно убедиться, что у нас все готово.

Во-первых, убедитесь, что в вашей виртуальной машине установлены как ADB, так и Heimdall. Эти инструменты помогут взаимодействовать с устройством удаленно после загрузки и в режиме загрузки соответственно.

sudo apt-get install heimdall-flash adb

На нашем гипервизоре(hypervisor) (если возможно) желательно установить его так, чтобы он автоматически подключал наше устройство к нашей ВМ, что сэкономит нам много времени.

Если вы хотите сделать это в VMware Fusion, перейдите в Виртуальная машина -> USB и Bluetooth -> Настройки USB и Bluetooth и измените Plug in action на устройстве так, чтобы оно подключалось к нашей машине Linux. Конечно, для этого устройство должно быть подключено к компьютеру. Вам придется сделать это дважды, один раз для adb (как только вы включите отладку по USB) и один раз для Heimdall (в режиме загрузки).

Теперь нам нужно включить отладку по USB и разблокировать OEM нашем телефоне. На вашем устройстве перейдите в «Настройки» -> «О телефоне» -> «Информация о программном обеспечении», а затем нажмите 7 раз на «Номер сборки», что активирует режим разработчика . После этого вернитесь к настройкам, откройте «Опции разработчика» и включите опции «Разблокировка OEM» и «Отладка USB».

Убедитесь, что разблокировка OEM всегда включена, иначе ваш телефон не загрузится.

Отключите и снова подключите USB-кабель к вашему устройству, авторизуйте соединение ADB на нем, а затем, когда вы запустите «adb devices» на терминале, вы должны увидеть это:

image7.png


Мы также можем подключиться к устройству, используя «adb shell»:

image2.png

Устройство перед прошивкой с нашим кастомным ядром

После включения ADB мы должны убедиться, что Heimdall работает правильно. Для этого вам необходимо перезагрузить устройство в «режиме загрузки», что можно легко осуществить с помощью ADB, выполнив «загрузку с помощью adb». В противном случае используем комбинацию кнопок во время загрузки. В случае с S7 вам нужно удерживать "кнопка домой + кнопка питание + громкость вниз".

image14.jpg

Режим загрузки

Если все прошло успешно, то вы должны увидеть что-то вроде этого, когда запустите команду «hemidall detect, а затем «heimdall print-pit»:

image1.png

Hemidall detect

image6.png

Heimdall print-pit

Ваше устройство будет перезагружаться каждый раз, когда вы используете Heimdall, но вы можете избежать этого, используя переключатель «--no-reboot», однако это не рекомендуется, поскольку Heimdall не будет работать, пока вы не перезагрузите устройство, независимо от того, какие функции вы использовали.


Получение загрузочного образа
На данный момент это самый простой и быстрый способ получить загрузочный образ, поскольку он использует инструменты, которые доступны для нас по умолчанию. Мы собираемся использовать инструмент «dd».

Сначала зайдите в устройство и станьте root, используя supersu:

image5.png


Затем нам нужно получить правильную точку монтирования. Для этого перейдите в /dev/block/platform/ и выведите содержимое, найдите правильную виртуальную папку внутри (в моем случае это «155a0000.ufs»), а внутри нее выведите содержимое папки командой «ls -la by-name», которая должна вывести вам все пути и точки монтирования.

image4.png


Как видите, есть запись, которая называется «BOOT» и указывает, в моем случае, на /dev/block/sda5. Мы собираемся сбросить её с помощью следующей команды:

dd if=[mounting/point] of=[output/file.img]

Которая в моем случае будет:

dd if=/dev/block/sda5 of=/sdcard/Download/boot.img

И затем, мы можем легко загрузить её с помощью «adb pull»

adb pull /sdcard/Download/boot.img .

image11.png



Распаковка, перезапись, сборка, перепрошивка
Теперь, когда у нас есть загрузочный образ и наше ядро, мы должны распаковать загрузочный образ, перезаписать zImage, который содержит ядро с тем, которое мы скомпилировали, собрать загрузочный образ и прошить его с Heimdall. (Чуть не умер, пока перевёл XD)

Распаковка: для этого мы будем использовать инструмент под названием Android Image Kitchen или AIK. Который можно найти тут. После загрузки файла мы его где-то распаковываем и копируем в загрузочный образ, полученный с устройства. Затем мы запускаем «unpackimg.sh» и «boot.img», после чего он будет распакован.

image10.png


Перезапись: вы наверное заметили, что были созданы две новые папки. « Ramdisk » и « split_img ». Первая содержит всё, что нужно для загрузки телефона , а вторая содержит оставшееся содержимое, включая образ ядра. Зайдите в папку split_img и найдите файл, который заканчивается на «zImage», и перезапишите его файлом «Image», который мы создали, когда мы скомпилировали наше ядро.

image9.png


Сборка: Как только образ ядра будет на месте, нам нужно будет упаковать его, чтобы перепрошить на наше устройство. Для этого мы вернемся к корню AIK-Linux и запустим «./repackimg.sh», который автоматически создаст файл с именем «image-new.img», который будет нашим новым загрузочным образом.

image10.png


Перепрошивка: теперь, когда у нас есть новый образ, мы можем его перенести на наше устройство. Для этого нам нужно перевести его в режим загрузки и использовать Heimdall для его прошивки. Тем не менее, настоятельно рекомендуется также прошить образы для восстановления и кэширования, полученные вами в процессе рутирования, в противном случае вам может потребоваться сброс настроек до заводских.

Я написал этот маленький скрипт, который выполнит все четыре шага одновременно:

Код:
#!/bin/bash
cp ../samsung-kernel/arch/arm64/boot/Image split_img/boot.img-zImage
./repackimg.sh
adb reboot download
sleep 8
heimdall flash --BOOT image-new.img --RECOVERY ../Downloads/recovery.img --CACHE ../Downloads/cache.img

Это, конечно, предполагает, что вы выполняете его в папке AIK, и что recovery.img и cache.img находятся в папке Downloads. Обратите внимание, что имена разделов («BOOT», «RECOVERY» и «CACHE») пишутся с большой буквы и с учетом регистра.

image6.png


Ваше устройство будет перезагружено пару раз, и после того, как мы подключимся к нему, если вы выполните «uname -a», вы увидите следующее:

image3.png

Посмотри дату на ядре!

Как вы видите, мы успешно обновили наше ядро!

Что может пойти не так?
Итак, вы только что закончили перепрошивать свое новое ядро и столкнулись с проблемами. Вот несколько вещей, с которыми у меня были проблемы, и как их решить:

● Если после перепрошивки ваше устройство застряло на цикле загрузки, попробуйте выполнить сброс до заводских настроек через режим восстановления. Это делается по-разному на каждом устройстве. В моем случае, вы должны удерживать "кнопку питания + громкость вверх + домой", пока не получите экран восстановления.
● Устройство зависло в процессе загрузки. Вы пытались выключить и снова включить? : D
● Если ничего не работает, вы можете проверить журнал kmsg в /proc/last_kmsg. Для этого я рекомендую установить на телефон TWRP, загрузиться его и посмотреть содержимое.

Специально для xss.pro
Переводчик статьи - https://xss.pro/members/177895/
Источник: https://medium.com/@alex91ar/debugging-the-samsung-android-kernel-part-2-cebac7069863
 

Вложения

  • image8.png
    image8.png
    13.8 КБ · Просмотры: 9
  • image13.png
    image13.png
    13.9 КБ · Просмотры: 9
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх