4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как извлечь ядро из прошивки андроид

Как извлечь ядро из прошивки андроид

/ramdisk# gzip -dc ../boot.img-ramdisk.gz | cpio -i
986 блок
[email protected]:

#
В папке ramdisk 18 объектов, всего 514,6 КБ
Где все остальное ?? где файлы ядра ?

Какие еще файлы ядра??

boot.img-kernel — это zImage-образ ядра. Если ты имеешь ввиду исходники ядра, то с образа их никак не получишь.
boot.img-ramdisk.gz — cpio/gz архив рамдиска с init.rc и прочей хренью. Его содержимое распаковано в папку ramdisk.
А больше ничего в буте и нету. То же самое касается и recovery.img

system.img (и userdata.img) — образ файловой системы в формате yaffs2. Распаковывается утилитой unyaffs под линухом. Ну или могу под винду утилиту подкинуть.

Ну что же, мысль здравая, если знаете что к чему.

1 Скачайте/найдите в интернете исходники для своего устройства. Если устройство htc, то developer.htc.com, если другое, ищите в интернете.
2 Ввнесите нужные изменения в файл arch/arm/mach-msm/acpuclock.c,
3 Скачайте к примеру NDK с андроидовского сайта (нужно для кросс-компиляции). Как я понял, у вас убунту. Тогда дальше все просто.
4 ARCH=arm CROSS_COMPILE=/путь_куда_установили_ndk/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- make zImage
5 mkbootimg —kernel arch/arm/boot/zImage —ramdisk ваш_рамдиск.gz —cmdline то_что_писало_когда_вы_извлекали_рамдиск -o boot.img
6 adb push boot.img /cache/ && adb shell flash_image boot /cache/boot.img

Нельзя ли поподробней с компиляцией ?
Вот эту строку которую вы указали, ка я понял надо вписывать в Makefile ? И вообщем у последнего NDK совсем другой путь папок ! Может дадите ссылку на ваш NDK ?
И еще можно ли делать компиляцию через arm-2007q3 как написано тут http://www.anddev.org/learning_porting_and. step-t3252.html .
Или через windows компиляцию сделать можно ?

Статья в тему:  Когда выйдет андроид 5 на s4 mini

Сообщение отредактировал bobjob — 17.02.11, 17:33

unyaffs под винду.
При распаковке:
— теряются owners, permissions и даты создания/изменения/доступа
— симлинки заменяются на файлы в фигурных скобках <>, внутри — путь куда указывает симлинк
Просто для извлечения данных этого вполне достаточно.
Написано на коленке в делфях.
Использование: unyaffs.exe файл.img
Cygwin не нужен.

Скачать: unyaffs.zip ( 12,23 КБ )

Патчим прошивку Android за 5 минут

Задача

Все началось с того, что я захотел установить на планшет Digma Optima 7.61 игру GTA San Andreas. К сожалению, виртуальная SD-карта планшета имеет объем менее 1 Гб, а кэш игры весит порядка 2-3 Гб. На планшете установлен Android 4.4.2 и возможность просто взять и сменить память по умолчанию в нем отсутствует. Так же в нем отсутствует файл /etc/vold.fstab (он есть на более старых версиях андроида, и изменив данный файл с root-правами, можно поменять местами виртуальную и реальную карты памяти).

Необходимые инструменты

1. Компьютер или ноутбук с ОС Linux.
2. Утилиты adb и fastboot (входят в состав Android SDK, так же, как заметил tmnhy, входят в репозитории как отдельные пакеты).
3. Набор утилит bootimg_tools (нашел здесь).

Решение

1. Извлекаем с устройства загрузочный образ

— Подключаем устройство к компьютеру через usb-кабель и заходим в shell устройства:

— Где-то в папке /dev/block на устройстве нужно найти файл с именем boot. У меня он находился по пути /dev/block/by-name/boot, но данный путь может различаться на разных устройствах.

Статья в тему:  Как скачать сохранение для гта са на андроид

— Извлекаем загрузочный образ:

— Выходим из shell’а (exit) и извлекаем образ:

2. Затем загрузочный образ нужно разобрать

— Скачиваем и распаковываем bootimg_tools.

— Добавляем bootimg_tools в PATH:

— Если все предыдущие шаги сделаны верно, то должна появиться папка boot-from-device. Внутри нее должны лежать файлы zImage и ramdisk.cpio.gz, а так же папка ramdisk. Как раз внутри последней лежит содержимое загрузочного образа, которое мы будем патчить.

3. Патчим

Для решения своей задачи я нашел строчку, которую нужно заменить, в файле init.sun8i.rc. Я просто заменил export EXTERNAL_STORAGE /mnt/sdcard на export EXTERNAL_STORAGE /mnt/extsd. Как я понимаю, это как раз и есть то значение, которое возвращает метод Environment.getExternalStorageDirectory() в Android API. В пользу этого предположения говорит тот факт, что после применения патча приложения начали использовать аппаратную карту памяти вместо виртуальной для хранения своих данных.

4. Заменяем загрузочный образ на устройстве

Я написал для этих целей небольшой скрипт:

Итоги

После проделанных манипуляций игра на планшете успешно заработала.

Снять образ с Android (снять дамп разделов system, kernel, data, zImage)

Многие начинающие ромоделы Android или гики не знают как снять образ с Android. В данной статье подробно рассказано как узнать нужные вам /dev/block, как снять дампы с них, разобрать их или в последствие восстановиться.

Для тех кто ничего не понял о чем речь. В данной статье будет подробно рассказано как снять текущее состояние с разделов Android — system, data, efs, preload, cache или выдрать ядро (zImage / boot.img). С какой целью расписываться здесь не будет, так как это уже другая история.

Статья в тему:  Где скачать wot blitz на андроид

Необходимо для снятия образа

  1. Скачайте и установите на ПК фирменную программу сайта ADB RUN (если в курсе, что такое adb или установлено Android SDK, то устанавливать не нужно);
  2. Android смартфон или планшет должен быть c Root правами Подробно о Root Android:
    • Что такое Root?
    • Как получить Root?
  3. Активировать Отладка по USB;
  4. Установить драйвера если вдруг не установлены;
  5. USB кабель.

Инструкция как снять образ с Android

  1. Подключите устройство Android к ПК
  2. Запустите программу ADB RUN и перейдите в меню (a) Adb

Узнаем /dev/block разделов

Что такое /dev/block/? /dev/block/ — это «диски» на которых находятся разделы system, data, cache.

Вариант 1

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

Для того чтобы узнать /dev/block/ вводим команду:

adb shell mount

Получаем список, где видим список с нашими разделами и к каким /dev/block/ они примонтированы

Вариант 2

Подключаем Android к компьютеру в adb вводим:

Получаем весь список блоков.

Снятие образа Android с выбранного раздела

И так когда мы уже знаем где находятся какие разделы, можно приступать к снятию образа Android (дампа) с выбранного раздела. Перед тем как начать убедитесь что у вас достаточно много свободной памяти на карте памяти!

  1. Для того чтобы снять образ необходимо в ADB RUN зайти в меню (7) Manual Command > (1) Adb
  2. Залогиниться в терминале под Root -ом:
Статья в тему:  Как установить андроид на vmware

3. Набрать linux команду для снятия дампа:

dd if=/dev/block/XXXXX of=/sdcard/NAME_razdel.img

  • где XXXXXXXXX— раздел с которого вы снимаете
  • где NAME_razdel.img — имя которое вы присвоите при снятии образа с выборного раздела (давать имена лучше также как они указаны, если data то data)

Процедура снятия может занять определенное время, от 1 минуты до 15, в это время лучше не дергать ваш Android!

[Обновление]

В новых версиях ADB RUN появилась возможность быстро снять образ каждый раз не набирая столь длинные команды. Все что вам нужно это знать имя блока.

Когда вы уже знаете необходимый блок, перейдите в ADB RUN:

  • С главного меню в раздел Backup -> Backup dev/block
  • Выбираем Backup
  • Указываем последние данные с блока (данные после block/)
  • Ждем пока снимется образ (не трогать Android)

Восстановление раздела из созданного образа Android (дампа раздела)

Когда вам будет необходимо выполнить восстановление из ранее созданного образа, нужно сделать вот, что:

Убедитесь что образ все еще находиться в разделе /sdcard — так как бекап создавался именно в этот раздел, либо переместите его обратно.

Прописать следующую команду:

dd if=/sdcard/NAME_razdel.img of=/dev/block/XXXX

  • где XXXXXXXXX— раздел на которой вы заливаете образ
  • где NAME_razdel.img — имя образа выборного раздела (давать имена лучше также как они указаны, если data то data)
Статья в тему:  Андроид как установить фото на контакт

Процедура восстановления может занять определенное время, от 1 минуты до 30 в это время лучше не дергать ваш Android!

[Обновление]

Особенно актуально для тех кто не удачно выполнил S-OFF (или планирует выполнить) или неудачно прошил кастомную прошивку, либо после не удачных экспериментов!

Для устройств Sony, HTC, Xiaomi и других устройств на которых есть режим Fastboot могут выполнить восстановление следующим образом после ранее обязательного снятия boot.img (zImage) и system.img (factoryfs.img) скопируйте данные образы на ПК:

  1. Переведите Android в режим fastboot (bootloader) и подключить к ПК;
  2. Файлы boot.img и system.img переместить в папку C:/adb_run/bin;
  3. Запустить ADB RUN и перейти в пункт (a) ADB;
  4. Набрать следующие команды (подробно о Fastboot):

fastboot flash boot boot.img

fastboot flash system system.img

Система будет восстановлена в исходное состояние! Можете продолжать эксперименты!

На этом все! Подписывайтесь и Оставайтесь с сайтом Android +1! Удачи!

Как легко распаковать и перепаковать файлы boot и ramdisk

Учитывая, что модификация прошивки такая же старая, как и сама ОС Android, попасть в игру для новичков может быть довольно сложно. Например, для прошивки определенных пользовательских ПЗУ требуется несколько шагов, таких как извлечение официального загрузочного образа и его прошивка на устройстве перед окончательным завершением процесса и прошивка файлов пользовательских ПЗУ вместе с ним.

Хотя в некоторые руководства вы найдете в Интернете включенные файлы boot.img, в других случаях вам может потребоваться самостоятельно изменить загрузочный образ, а затем переупаковать его. Поскольку операционная система Android для мобильных телефонов является производной от Linux, единственный способ сделать это — использовать платформу на основе Linux или эмулировать ее на вашем ПК с Windows.

Статья в тему:  Как зарегистрироваться в liquidsky на андроид

Скрипты для распаковки и перепаковки файла boot.img

Пользователь XDA CNexus просеянных через Интернет, чтобы найти и составить список инструментов для распаковки и переупаковки файла образа загрузки, все из которых можно загрузить, используя ссылку, приведенную ниже.

Команды, которые вы должны знать

  1. boot_info Файл, включенный в пакет, позволяет вам получить базовый адрес и адрес виртуального диска файла boot.img, который вам позже понадобится для повторной упаковки.
  2. split_boot (split_bootimg.pl) помогает извлечь ramdisk и zImage из файла boot.img в отдельную папку.
  3. unpack_ramdisk позволяет распаковать файл ramdisk с помощью следующей команды:
    Использование: unpack_ramdisk
  4. repack_ramdisk функция позволит вам перепаковать файл ramdisk из заданного каталога, используя следующую команду:
    Использование: repack_ramdisk [outputFile]
  5. mkbootimg Команда поможет вам создать новый файл boot.img из имеющихся у вас файлов ramdisk и zImage (полезно для создания измененных файлов boot.img).
  6. umkbootimg делает прямо противоположное и разделяет ядро ​​и загрузочный образ.
  7. распаковать просто распакует файл boot.img в один каталог, а виртуальный диск в отдельный каталог для удобства.

Совместимость с Windows: что нужно знать

  1. Если у вас нет запущенной операционной системы Linux, вы можете эмулировать ее на своем ПК с Windows, используя это официальное руководство.
  2. Инструмент был протестирован для работы с Debian, но не подтвержден для работы с Cygwin.
  3. Все сценарии в файле .ZIP должны быть сохранены в папке на пути к системе Linux, в которой вы работаете, чтобы они могли быть обнаружены (пример:
Статья в тему:  Как установить вк на андроид в украине

Как использовать распаковку и перепаковать загрузку и распаковку файла ramdisk

Что ж, нам нужно использовать файл split_boot, поскольку он содержит сценарий, чтобы сначала распаковать файл boot.img, получить из него файл ramdisk, а затем извлечь файл ramdisk.

  1. Скачать инструмент загрузки из здесь.
  2. Сейчас, извлекать его в отдельную папку, чтобы получить эти файлы.
  3. Теперь предоставьте этим файлам необходимые разрешения. Итак, запустите команду ниже в папке, где у вас есть все файлы.

  • Поместите файл boot.img, который вы хотите извлечь, в ту же папку, что и эти файлы на вашем ПК.
  • Чтобы извлечь файл загрузочного образа и файл виртуального диска, выполните приведенную ниже команду.
  • Это создаст новую папку с именем ботинок в вашей текущей папке. Папка загрузки будет содержать файл ядра загрузочного образа, файл ramdisk и папку ramdisk, содержащую данные, извлеченные из файла ramdisk.
  • Вот и все. Вносить изменения в файл папки ramdisk, как вам нужно.
  • Копировать все основные файлы инструмента (boot_info, mkbootimg, repack_ramdisk, split_boot и unpack_ramdisk) в загрузочную папку, содержащую папку ramdisk.
  • Перепаковать файл ramdisk используя команду ниже. Это создаст новый файл ramdisk с именем new-boot.img-ramdisk.cpio.gz в папке загрузки. (Вы можете изменить имя выходного файла с new-boot.img-ramdisk.cpio.gz на любое по вашему выбору.)
  • Перепаковать загрузочный файл используя команду ниже. Это создаст новый файл образа загрузки с именем new-boot.img в папке загрузки.
  • Вот и все. Работа сделана! Вы успешно распаковали и переупаковали файлы загрузочного и RAM-диска. Теперь ваш каталог будет выглядеть так. Обратите внимание на новые файлы boot и ramdisk на скриншоте ниже.
  • Как это было? Удалось ли вам легко пользоваться инструментами?

    Как распаковать и отредактировать boot.img для портирования ПЗУ?

    Я недавно загрузил этот диск для моего Allview P5 (Allview P5 является эквивалентом Gionee GN700W / FLY IQ441 / QMobile Noir A8). Он называется Primonex ROM и предназначен для версии телефона Gionee.

    • Сначала я попытался установить его как есть, но он застрял на экране загрузки.
    • После некоторых исследований я обнаружил, что это может быть проблема с boot.img файлом, и я не знаю, как извлечь или отредактировать его .

    Может кто-нибудь сказать мне, как это сделать?

    Выбор инструментов

    Метод, который я здесь представляю, основан на исходном коде CyanogenMod для Android.

    В то время как AOSP от Google только предоставляет инструмент для создания в boot.img файл, CyanogenMod также добавляет unpackbootimg инструмент , позволяющий вам распаковать его. Этот инструмент, похоже, не предназначен специально для CyanogenMod, так что, скорее всего, он будет работать и для других ПЗУ.

    Существует, однако, относительно большое количество альтернатив для распаковки boot.img файла, которые работают более или менее одинаково.

    По сути, такой инструмент распаковки извлечет содержимое boot.img файла и отобразит набор параметров, которые вам нужно будет передать в Google. mkbootimg инструменту для создания файла, конфигурация которого (в основном параметры ядра и адреса памяти) будет соответствовать исходному.

    Вот несколько примеров, я не проверял их лично, поэтому не могу рекомендовать их, и я представляю их только для справочных целей:

    Некоторые из них с открытым исходным кодом или на основе сценариев:

    • Android Kitchen, видимо, предназначался как своего рода швейцарский армейский нож для разработчиков Android. Первоначальный автор официально прекратил поддерживать проект, несколько других пользователей разветвляли его как javilonas или cmotc .
    • szym нацеливается на простоту , добавляя оболочки оболочки сценариев в свой набор инструментов, чтобы сделать процесс распаковки и повторной упаковки более простым.
    • osm0sis предлагает набор инструментов CyanogenMod, «разветвленных и обновленных» в соответствии с собственным описанием проекта. Этот проект, кажется, действительно все еще поддерживается, что не очень распространено в этой области, однако фактическое преимущество перед оригинальными инструментами CyanogenMod для меня остается неясным.

    Некоторые из них являются бесплатными закрытыми исходными кодами:

    • Kuisma unmkbootimg довольно часто появляется на справочных форумах и, по-видимому, хорошо справляется со странными случаями, выдает «удобочитаемые» рекомендации на английском языке, когда в mkbootimg исходном коде требуются некоторые изменения, и отображает точную командную строку, используемую для перестройки изображения.
    • Xiaolu, mkbootimg_tools кажется, также упоминается довольно часто и позволяет распаковывать и перепаковывать boot.img и файл дерева устройств dt.img . Не обманывайте себя тем , что размещен на GitHub: она является закрытым исходным кодом двоичном и только скомпилированные исполняемые файлы доступны на их хранилище ( на самом деле я даже интересно о точном интересе использования репозитория исходного кода в хранилище двоичные капли, но разные люди, разные умы . ).
    • CNexus на форуме XDA предоставляет архив с набором инструментов.
    • Этот ответ в Unix.SE рекомендует некоторые инструменты из ныне несуществующего проекта Android Serial Port. Однако имена файлов заставляют меня думать, что это должны быть старые готовые версии инструментов CyanogenMod (проект закрыт, документации и поддержки нет).

    Все эти инструменты (и другие, которые вы можете найти в любой поисковой системе) должны работать одинаково, но некоторые могут работать лучше, чем другие в обработке какого-то конкретного крайнего случая, с которым вы можете столкнуться на своем собственном устройстве. Однако большинство из них, по крайней мере на арене с открытым исходным кодом, не поддерживаются регулярно, поэтому, на мой взгляд, лучше всего иметь рабочие, поддерживаемые и документированные инструменты — использовать инструменты CyanogenMod.

    Некоторые производители выпускают ПЗУ, более или менее далекие от стандарта AOSP (необычные адреса, заголовки, формат файла и т. Д.). Если приведенная ниже стандартная процедура не работает, возможно, одно из этих альтернативных программных решений поможет. В противном случае вам придется проверять наличие проблем, характерных для вашего устройства: некоторым, кажется, требуется определенная процедура или даже специальные инструменты (например, этот вопрос относится к устройствам MediaTek).

    Установка инструментов

    Скомпилировать набор инструментов CyanogenMod для boot.img упаковки и распаковки довольно просто.

      Если вы уже установили полное дерево исходного кода Android (вы можете проверить мой другой ответ, чтобы получить больше информации об этом), перейдите в system/core/mkbootimg/ каталог (в качестве напоминания, исходный код Google AOSP предоставляет только инструмент для создания boot.img файла, они не предоставить любой инструмент для распаковки),

    Если у вас этого нет и не нужно для каких-либо других целей, более простым и быстрым решением будет клонирование только репозитория CyanogenMod android_system_core :

    Оказавшись в нужном каталоге, скомпилируйте и установите:

    Обратите внимание , что Google заменяет C mkbootimg с версией Python , так что в будущих версиях нет компиляции может потребоваться больше для этой команды.

    Вам также необходимо установить инструменты Android на свой компьютер, чтобы он мог общаться с вашим телефоном. Вам потребуются adb (Android Debug Bridge, утилита оболочки, позволяющая взаимодействовать с подсистемой отладки Android), adbd (связанный демон) и fastboot (утилита оболочки, позволяющая взаимодействовать с системой загрузчика вашего телефона).

    Ваш любимый дистрибутив Linux может предоставлять их в виде одного или отдельных пакетов, но обычно они всегда называются «android-tools»:

    • Debian / Ubuntu: sudo apt-get install android-tools-
    • Fedora / CentOS: sudo yum install android-tools
    • OpenSUSE: sudo zypper install android-tools

    Получить boot.img файл

    Извлеките файл boot.img из ZIP-файла ROM или непосредственно с устройства:

    • Из стандартного файла .zip ПЗУ: некоторые приложения, такие как SuperSU, могут изменять boot.img непосредственно на устройстве, заменяя его на стандартный, что нарушает работу таких приложений.
    • Непосредственно с устройства: некоторые люди сообщают о проблеме чтения, приводящей к повреждению boot.img . IMO, эти проблемы, скорее всего, связаны с использованием плохих USB-кабелей или USB-концентратора, и их можно просто избежать, используя качественные кабели, соединяющие телефон напрямую с компьютером. Вам также необходима возможность запуска ADB в режиме root (в зависимости от используемого ПЗУ, это может быть тривиально или нет).

    Первый способ очень очевиден: распакуйте файл .zip любым программным обеспечением ZIP, boot.img файл должен находиться прямо в корне архива.

    Для второго метода вам сначала нужно будет определить (к сожалению, для конкретного устройства) путь к устройству хранения, на котором boot.img можно извлечь контент. Я знаю два метода для этого:

    • ls /dev/block/platform/*/by-name/ (если * охватывает еще одно имя папки конкретного устройства, скорее всего , это единственный каталог ниже platform/ ), точное название для поиска также зависит от платформы , но имеет обычный смысл (некоторые примеры: boot , LNX (аббревиатура для «Linux»)). Файлы в этом каталоге на самом деле являются символическими ссылками, и некоторые люди пытаются вручную перейти к цели, но я рекомендую придерживаться пути на основе имен более высокого уровня, который, хотя и дольше, остается менее подверженным ошибкам. Таким образом, вы в конечном итоге с пути, как /dev/block/platform/sdhci-tegra.3/by-name/LNX .
    • На некоторых (старых?) Устройствах правильное устройство можно найти, изучив вывод cat /proc/mtd . Если вы видите устройство, mtd2 связанное с «boot» меткой, то вы будете использовать путь /dev/mtd2 .
    • Из меню разработчика телефона:
      • Включить отладку на вашем телефоне,
      • Разрешить root-доступ к ADB (этот шаг относится к телефонам с CynogenMod, для других устройств может потребоваться более сложная процедура),
    • Подключите его к компьютеру (и оттуда к гостевой виртуальной машине, если вы используете инструменты Android из виртуальной машины).

    Если это еще не сделано, я рекомендую вручную запустить сервер ADB на стороне компьютера, это позволит вам напрямую проверить ключ RSA на стороне устройства, не влияя на поведение следующих команд ADB:

    Затем переключите ADB в корневой режим:

    Наконец, вы должны иметь возможность напрямую извлечь boot.img файл из устройства с помощью такой команды (исходный и целевой путь и имена приведены в качестве примеров, адаптируйте их к вашим потребностям и предпочтениям):

    Команда скопирует весь раздел, как используемый, так и свободный, поэтому не удивляйтесь, что результирующий boot.img файл будет больше, чем исходный boot.img файл, поставляемый со стандартным файлом .zip ПЗУ, сам контент остается схожим

    После завершения передачи отключите телефон и не забудьте отключить отладку и root-доступ из меню разработчика.

    Распакуйте оригинальный boot.img файл

    Распакуйте сам boot.img файл, используя скомпилированную ранее команду:

    Это выведет некоторую информацию, необходимую, чтобы позволить вам перестроить новый boot.img с правильной структурой относительно запаса boot.img . Однако, не спешите с блокнотом, поскольку CyanogenMod upackbootimg также сохраняет ту же самую информацию в нескольких файлах, которые мы будем использовать позже.

    Эта команда генерирует несколько файлов с определенными суффиксами, добавленными к имени входного файла:

    • *-second : Это загрузчик второго уровня, дополнительный и редко используемый на телефонах конечных пользователей. Если этот файл пуст (наиболее распространенный случай), то загрузчик телефона будет напрямую вызывать ядро ​​Linux.
    • *-zImage : Это ядро ​​Linux.
    • *-ramdisk.gz или *-ramdisk.lz4 : RAM-диск, используемый для заполнения корневого каталога устройства. Расширение отличается в зависимости от используемого алгоритма сжатия.
    • *-dt : Дерево устройств, заполнение /dev .
    • Остальные — это небольшие файлы, каждый из которых хранит одно из значений, отображаемых в unpackbootimg выходных данных. Эти значения определяют параметр командной строки для передачи ядру Linux и адреса, по которым загрузчик должен будет загружать каждый объект во время загрузки.

    Чаще всего распаковывают, boot.img чтобы иметь возможность редактировать содержимое корневого каталога телефона. Как видно выше, этот контент хранится в файле *-ramdisk.gz или, *-ramdisk.lz4 и его можно извлечь, используя команды ниже:

    Для сжатого ОЗУ LZ4 замените последний шаг на lz4 -d ../boot.img-ramdisk.lz4 | cpio -imd .

    Теперь вы можете свободно вносить необходимые изменения, прежде чем продолжить. Однако, может быть, стоит выполнить полную процедуру распаковки — повторной загрузки — один раз, не меняя ничего, чтобы убедиться, что ваши инструменты работают должным образом. В противном случае, в случае возникновения проблемы, вы не будете уверены, что причиной является ваша модификация или какая-то несовместимость (см. Мои замечания в начале о некоторых производителях, которым требуются нестандартные процедуры или инструменты).

    Перестройте, чтобы получить новый new-boot.img файл

    Процесс создания ПЗУ CyanogenMod использует внутренний инструмент mkbootfs для создания boot.img файла (это происходит в build / tools / releasetools / common.py ). Тем не менее, шаги по созданию этого инструмента кажутся мне бесполезно сложными, в то время как использование предоставленной системы, cpio кажется, работает так же хорошо. Основное различие между ними, как я понимаю после (очень) быстрой проверки в mkbootfs исходном коде, заключается в том, что последний применяет некоторые меры безопасности, не включая точечные файлы и /root каталог в результирующий архив, в то время как cpio процедура на основе-ниже просто слепо положит все выбранное дерево каталогов в архив.

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

    Начните с создания нового RAM-диска, из ramdisk каталога, созданного выше, введите:

    Или, если вам нужно создать архив LZ4:

    Цель здесь — создать новый файл RAM-диска со свойствами, максимально приближенными к исходному (например, установка владельца часто отсутствует в процедурах, используемых в форумах и блогах, однако это требовалось на моем устройстве).

    Теперь перейдите в родительский каталог, чтобы создать сам new-boot.img файл.

    Как видно выше, unpackbootimg команда CyanogenMod генерирует файл, соответствующий каждому ожидаемому параметру mkbootimg . Поэтому все, что вам нужно сделать, — это нажать a, mkbootimg -h чтобы получить список всех параметров, а затем установить для каждого из них соответствующее значение, используя соответствующий файл. Обратите внимание, что некоторые параметры ожидают путь к файлу, а другие ожидают получить содержимое файла в качестве значения. Смотрите пример полученной команды ниже:

    Здесь не заданы только два параметра:

    • —board Насколько я понимаю, это просто информационное поле, позволяющее вставить название модели в полученное изображение.
    • —id : Это значение не ожидает, оно просто выводит уникальный идентификатор после построения изображения (объединяя метку времени и контрольную сумму).

    Прошить new-boot.img файл на устройство

    • Запустите устройство в режиме быстрой загрузки (он же режим загрузки, обычно удерживая кнопки питания и увеличения громкости).
    • Подключите USB-кабель.

    Убедитесь, что устройство правильно обнаружено:

    Попробуйте загрузиться с использованием нового ПЗУ (пока не перепрошивая его, поэтому в случае возникновения проблемы вам просто нужно перезагрузить телефон, чтобы вернуть его в рабочее состояние, замените ./new-boot.img имя файла своим собственным):

    Если телефон успешно работает с новым загрузочным образом, вернитесь в режим fastboot и постоянно его прошивайте:

    Вывод

    Поначалу эта процедура может показаться сложной, но как только вы ее получите, вы увидите, что на самом деле это не так.

    «Устрашающий» аспект связан с тем, что не существует единой «системы Android»: многие производители и поставщики ПЗУ вносят изменения, которые могут варьироваться от незначительной разницы в пути до совершенно нестандартной среды.

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

    azureru / extract android kernel.md

    Extracting Existing Kernel + Ramfs

    Enter the machine using adb shell

    Run cat /proc/partitions

    Dump the partition to a file using dd

    Extract it to your linux system adb pull /data/kernel_ramfs.img

    Run sudo apt-get install abootimg

    Check the Kernel Dump

    Run abootimg -i kernel_ramfs.img . It need to show

    That means you dump the correct kernel+ramfs

    Extract Kernel Dump

    It will extract zImage and also initrd.img

    Extract Ramdisk, Modify And Repack

    Modify the ramdisk accordingly (e.g. you modify init.rc or add another additonal files) Then repack accordingly

    Adb Put and Redumping

    Reboot — And pray for the best

    This comment has been minimized.

    Copy link Quote reply

    petrosmp commented Sep 16, 2018 •

    adb pull /data/kernel_ramfs.img
    returns
    adb: error: failed to copy ‘/data/kernel_ramfs.img’ to ‘.kernel_ramfs.img’: remote Permission denied

    My device is rooted (and connected), adb is running with root privileges and I also tried
    adb shell
    su
    mount -o remount,rw /dev/block/stl9 /system
    chmod 777 /system/app
    exit
    exit

    and then re running it but sadly with no succes. Any ideas?

    This comment has been minimized.

    Copy link Quote reply

    kpirnie commented Mar 7, 2019

    @petrosmp Without knowing what device you are attempting this with, all we can do is guess and cannot help you pull it.

    Let us know what device you are talking about, and maybe we can help you figure out where your ramdisk is actually located

    This comment has been minimized.

    Copy link Quote reply

    arendtio commented Aug 10, 2019

    @petrosmp I guess the problem is that your adb has not read access to the file. Just because you run it with root privileges on your PC doesn’t mean it has root privileges on the device. You can validate this assumption by doing ‘adb shell’ and then ls -l /data/kernel_ramfs.img (without su ).

    So copying it to a place where you are allowed to access the file without being root should solve the issue. For me running mv /data/kernel_ramfs.img /storage/6264-6339/; chmod a+r /storage/6264-6339/kernel_ramfs.img as root worked just fine (that is my sdcard). Afterward, I was able to pull the file via adb pull /storage/6264-6339/kernel_ramfs.img .

    This comment has been minimized.

    Copy link Quote reply

    HermesNWO commented Sep 4, 2019

    @petrosmp You have to activate OEM unlock in developper options !

    This comment has been minimized.

    Copy link Quote reply

    ytrezq commented Mar 26, 2020 •

    @petrosmp.
    In my case, simply unpacking and repacking without changing anything through

    results in a different boot.img (but of the same size) which doesn’t work on my Samsung Galaxy tab s3.

    This comment has been minimized.

    Copy link Quote reply

    TheTangledMind commented Aug 9, 2020

    I dont get the same information that you do from cat. I get this.

    130|gts6lwifi:/ # cat /proc/partitions
    major minor #blocks name

    1 0 8192 ram0
    1 1 8192 ram1
    1 2 8192 ram2
    1 3 8192 ram3
    1 4 8192 ram4
    1 5 8192 ram5
    1 6 8192 ram6
    1 7 8192 ram7
    1 8 8192 ram8
    1 9 8192 ram9
    1 10 8192 ram10
    1 11 8192 ram11
    1 12 8192 ram12
    1 13 8192 ram13
    1 14 8192 ram14
    1 15 8192 ram15
    8 0 249835520 sda
    8 1 2048 sda1
    8 2 2048 sda2
    8 3 4 sda3
    8 4 8 sda4
    8 5 32768 sda5
    8 6 20480 sda6
    8 7 10240 sda7
    8 8 10240 sda8
    8 9 20480 sda9
    8 10 1024 sda10
    8 11 512 sda11
    8 12 40960 sda12
    8 13 512 sda13
    8 14 4096 sda14
    8 15 16384 sda15
    259 17 97280 sda16
    259 18 87040 sda17
    259 19 65536 sda18
    259 20 10240 sda19
    259 21 65536 sda20
    259 22 80852 sda21
    259 23 16384 sda22
    259 24 16384 sda23
    259 25 6381568 sda24
    259 26 1347584 sda25
    259 27 1024000 sda26
    259 28 409600 sda27
    259 29 40960 sda28
    259 30 51200 sda29
    259 31 239978364 sda30
    8 16 8192 sdb
    8 17 3776 sdb1
    8 18 4260 sdb2
    8 32 8192 sdc
    8 33 3776 sdc1
    8 34 4260 sdc2
    8 48 61440 sdd
    8 49 1024 sdd1
    8 50 4096 sdd2
    8 51 2048 sdd3
    8 52 512 sdd4
    8 53 512 sdd5
    8 54 4096 sdd6
    8 55 4 sdd7
    8 56 1024 sdd8
    8 57 384 sdd9
    8 58 512 sdd10
    8 59 512 sdd11
    8 60 512 sdd12
    8 61 256 sdd13
    8 62 256 sdd14
    8 63 4 sdd15
    259 0 8192 sdd16
    259 1 4 sdd17
    259 2 2048 sdd18
    259 3 8192 sdd19
    259 4 128 sdd20
    259 5 512 sdd21
    259 6 64 sdd22
    259 7 80 sdd23
    259 8 2048 sdd24
    259 9 32 sdd25
    259 10 32 sdd26
    259 11 32 sdd27
    259 12 512 sdd28
    259 13 2048 sdd29
    259 14 2048 sdd30
    259 15 1024 sdd31
    259 16 18536 sdd32
    179 0 15138816 mmcblk0
    179 1 15134720 mmcblk0p1
    gts6lwifi:/ #

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    Статьи c упоминанием слов: