Linux kernel arm boot executable zimage

zImage ARM как распоковать

Есть zImage ARM Debian как его распаковать и посмотреть что в нем? или отредактировать ?

Сильно не пинайте гуглил говорят есть скрипт не нашел еще =(

Это бинраный исполняемый файл. Что именно Вы хотите там редактировать?

Есть планшет zt-180 у него был андройд

Нашел мануал где форматируют флешку на фат и ехт2 на фат закидывают zImage а на ехт2 дистрибутив дебиан + хфсе хочу теперь запихать это не на сд карту а во внутрь планшета у него есть 5 разделов загрузчик пока не нашел где лежит но есть раздел где ложит zImage андройдовский и он запускает его если его подменть на дебиановский то он запускает дебиан ТОКА ЕСЛИ СТОИТ СД КАРТА С разделом ехт2 если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует =(

Возможно я и не так формулирую в понятиях.

Я так понимаю что zImage просто запускает дебиан + хфсе ?

Вы бы не могли расставить знаки препинания во втором абзаце? Я не смог понять его смысл, извините.

если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует =(

_Как именно_ не стартует?

Нашел мануал, где форматируют флешку, на фат и ехт2. На фат закидывают zImage, а на ехт2 дистрибутив дебиан + хфсе. Хочу теперь запихать «это» не на СД карту, а во внутрь планшета(ROM), у него есть 5 разделов (/dev/mmcblk1p0, /dev/mmcblk1p1, . ) (system, data, kernel, cache, user). Cд карту определяет как /dev/mmcblk0p0 (фат) и /dev/mmcblk0p1 (ехт2).

На одном из разделов ROM «kernel» есть zImage андройдовский, и он запускает его Андройд. Если его заменить на дебиановский, то он запускает дебиан. ТОКА ЕСЛИ СТОИТ СД КАРТА С разделом ехт2.

Если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует (Зависает во время загрузки). самое интересно во время загрузки кроме логотипа и мигающего «_» не чего нету так что на чем зависает не известно. Наверно просто не находит дебиан + хфсе, а именно /dev/mmcblk0p1 (ехт2).

А разве zImage (3Mб) это не сжатое ядро?

Да, это сжатое ядро.

Если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует

А если Debian запускается, он видит внутреннюю память тоже как /dev/mmcblk1*?

кажется, нужная тебе программа называется bootimg

А если Debian запускается, он видит внутреннюю память тоже как /dev/mmcblk1*?

А зачем «дебиан + хфс» папка boot если уже есть ядро zImage?

/boot требуется по стандарту (man hier). Именно в него предлагается монтировать файловую систему, доступную загрузчику.

Вам, скорее всего, потребуется найти конфиг загрузчика и заставить его передать ядру правильный параметр root=/dev/mmcblk1pX или подгрузить initrd.

Возможно я и не так формулирую в понятиях.

В Андройд в загрузочную область пишут специально сформатированный образ, который состоит из zimage ядра, образа initrd и строки, которая передается в ядро. Вот эту строку и надо править. Там параметр root=/dev/.

Самое простое, залезть шестнадцатиричным редактором и злобно хаком поправить строку. А еще есть набор инструментов для распаковки и упаковки андройдного образа.

Выходит что zimage для дебиан люди так и сделали просто тупо сменили «Там параметр root=/dev/. » осталось проверить на практике

А еще есть набор инструментов для распаковки и упаковки андройдного образа.

А ссылку не дадите или название =)

Читайте также:  Windows debug bin file

Побывал unyaffs.exe и bootimg или что то не так или это не то

G:\Gpad.G10D\Soft.Ware\bootimg_2>bootimg.exe —unpack-bootimg kernel
arguments: [bootimg file]

>bootimg file: kernel >output: kernel[.gz] ramdisk[.gz] second[.gz] >Traceback (most recent call last): >File « », line 932, in >File « », line 716, in unpack_bootimg >File « », line 96, in parse_bootimg >AssertionError: invald bootimg

это же утилита для распаковки этого самого kernel куда его еще распаковывать?

Источник

Извлечь ядро из дампа памяти

Доброе время суток. Снял дамп памяти с одного устройства на базе arm-процессора (dd if=/dev/mem. ). Задача состоит в том чтобы извлечь ядро, initrd и загрузчик. А вопрос в том грузится ли ядро в память целиком? Соответственно можно ли вообще вырезать его из дампа. binwalk видит ядро но извлекает какие-то потоки. Заранее спасибо:) Лог от binwalk будет чуть позже)

Задача состоит в том чтобы извлечь ядро, initrd и загрузчик.

Эм. а не проще скопировать всё это с диска, с которого грузиться это устройство, вместо возни с дампом памяти?

К сожалению, не проще. После попыток дампить встроенную флеш устройство почило.))) Пока не разобрался как получить доступ к флеш, да и вряд ли уже получится. Мы имеем то, что имеем.

Да, «тся». А как дампил? Через dd? Может нужно было просто скопировать через cp -rp ?

через dd.Иначе никак ибо не смонтировано.

Устройство китайский тв-бокс с функцией secureboot. И шифрованой флешкой. Как получить доступ к флешке не понятно. Я видимо, нарушил её целостность. Тв-бокс в бутлупе. Больше доступа к нему не имею.(

Для кого? Нет там никакой файловой системы, чтобы вот так просто.

что для кого? В общем и целом образа ядра в памяти нет?

А вопрос в том грузится ли ядро в память целиком?

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

а как бы помогло вам наличие файлов ядра оживить девайс то?

Отлично, ибо модулей небыло. Думаю можно извлечь. Вопрос в том как?

никак. Совсем. Я разве писал, что хочу его оживить?)) Не скрою такие мысли закрадывались. Думаю в этом мне может помочь загрузчик. Если он обращается к флешке за новой прошивкой — круто. Смогу залить прошивку если узнаю как назвать файл. Ядро нужно для эмуляции бокса.

настолько уникальный что «в интернетах» не то, что его «прошивок» (дампов) нет, но и нигде он не обсуждается?

попытались флешку прочитать и устройство «заблокировалось» (или что-то ещё/другое делали)?

настолько уникальный, что нету. Не шучу. Правда нету. Это всё детали. Нужна помощь в извлечении ядра из дампа.)

Попробуй посмотреть с адреса 0x80008000. Я бы ожидал его с этого адреса, сплошным куском.

Нашёл интересные строки в логе binwalk 33554468 0x2000024 Linux kernel ARM boot executable zImage (little-endian), load address: «0x00000000», end address: «0x00634390»

514166784 0x1EA59000 ELF, 32-bit LSB shared object, ARM, version 1 (SYSV) 514318336 0x1EA7E000 ELF, 32-bit LSB executable, ARM, version 1 (SYSV)

попробую. А как вообще найти начало и конец ядра? Может есть сигнатуры?

А, да. Ты ведь в курсе, что в /dev/mem память не обязательно сплошным куском идёт?

Читайте также:  Создание загрузочной флешки windows 10 для ноутбука lenovo

Если там был SecureBoot, то скорее всего, ядро было запаковано в Windows portable executable. Начинается с «MZ». Только вот непонятно, будет ли оно в памяти именно так же.

Ну. Нет. А где почитать? Кстати адреса 0x80008000 у меня нет. Дамп 512 мб.

Хм. А причём WPE и линух? o_O

Вот прямо тут: «Память не обязательно сплошная. У процессора и железок бывают регистры, отображаемые в память, поэтому память не обязательно отображается сплошным куском.» По факту, /dev/mem это разреженый псевдофайл, но пустые области не возвращают нули, как в нормальных файлах. Вместо этого функции чтения возвращают ошибки.

Нет, я не знаю как дампить. Думаю, подойдут SEEK_DATA и SEEK_HOLE в lseek(). Но вот какие готовые утилиты так могут, не знаю.

Ну так Microsoft же за Secure Boot стоит.

В продолжении темы. Кто знает как можно проанализировать дамп памяти? К сожалению binwalk толком ничего не нашёл(

По факту, /dev/mem это разреженый псевдофайл, но пустые области не возвращают нули, как в нормальных файлах. Вместо этого функции чтения возвращают ошибки.

Вот ТСу и хинт, в какую сторону копать. Но это долго, больно и скорее всего не принесёт результата.

Человек ответил в тред, не заметив, что ты интересуешься про embedded, и стал писать про диски, файлы.

На остальной вопрос тебе уже ответил i-rinat.

Ок. Может существует способ запустить виртуалку с образом памяти?

Так себе хинт. ТС уже сдампил память с помощью dd. Скорее всего, у него до того места, где ядро находится, dd и не добрался. Завершил работу на первой дыре в адресном пространстве.

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

Может существует способ запустить виртуалку с образом памяти?

Может и существует, но вопрос не по адресу. Я вообще попал в этот тред случайно.

Думаю так и было. dd с ошибкой вылетел. Однако в дампе иногда встречается версия ядра в виде строки.

Вот инфа из лога загрузки:

The DDR Layout: Total DDR: 0x00000000 — 0x20000000 [ ] 512MB stack: 0x00000000 — 0x00a00000 [CB] 10MB malloc: 0x00a00000 — 0x00afe000 [CB] 1016KB global: 0x00afe000 — 0x00c00000 [CB] 1.0MB .text: 0x00c00000 — 0x00c1a9fc [CB] 106.49KB .data: 0x00c1a9fc — 0x00d81e40 [CB] 1.40MB pagetable: 0x00e00000 — 0x00e04000 [CB] 16KB irqstack: 0x00e04000 — 0x00e24000 [CB] 128KB DMA: 0x00f00000 — 0x01100000 [ ] 2MB free: 0x01100000 — 0x09100000 [ ] 128MB resmem: 0x1c000000 — 0x20000000 [ ] 64MB

Kernel Name: Linux-3.18.13_s40 Kernel Size: 6553099 Load Address: 0x02000000 Entry Address: 0x02000000

Скорее всего, у него до того места, где ядро находится, dd и не добрался.

Если ТС запускал с noerror , то может и добрался.

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

Вот потому я и написал, что

скорее всего не принесёт результата.

Тогда можешь выбросить свой дамп.

И что, похожи эти 6553099 байт по смещению 0x02000000 на ядро?

Вроде похожи. Но gzip compressed data?! Походу поврежден дамп.Возможно озу скремблирована? Или это фантастика?

Никогда не задумывался, что означает z в zImage?

Задумывался. Но если бы был корректный образ он бы был сжат весь. А не так. Насколько я помню)

Не сами же по себе данные распаковываются. Что-то должно код распаковать. Для этого это что-то само по себе должно быть несжатым кодом.

Источник

Linux kernel arm boot executable zimage

Kernel Z-Image Unpack

Latest commit

Git stats

Files

Failed to load latest commit information.

Читайте также:  Mac os изображения рабочего стола

README.md

unpack.sh — это простенький скрипт позволяющий работать с Linux Kernel zImage (ARM, Little Endian) от MTK (Mediatek). Предположим что вы вытащили из boot.img или recovery.img образ Linux Kernel’а. В общем случае он состоит из самого бинарника ядра пожатого gzip’ом, dtb, loader’а и возможно некоторой служебной информации.

Возможны несколько вариантов, например:

  • По команде file recovery.img-kernel содержимое определяется как Linux kernel ARM boot executable zImage (little-endian).
  • Содержимое определяется как gzip compressed data, max compression, from Unix.

В первом случае структура файла следующая, вначале идет код boot executable, затем GZip самого ядра, затем таблица смещений и затем DTB, начинающийся с сигнатуры DTB_MAGIC — D0 0D FE ED (0xEDFE0DD0). Что представляет из себя таблица смещений?

  • DWORD (0x0)
  • DWORD (0x0)
  • DWORD (0x0)
  • Указатель на DTB_MAGIC
  • Указатель на таблицу смещений (т.е. на первый DWORD из данного списка)
  • . (и т.п.)

Во втором случае структура проще, никаких boot executable нет, сразу идет GZip kernel’а, а затем DTB, начинающаяся с dtb-magic.

Скрипт корректно обрабатывает (по-крайней мере на тестовых примерах) оба варианта.

Запуск осуществляется следующим образом:

В результате работы скрипта будут сгенерированы три файла:

Источник

Linux kernel arm boot executable zimage

Этот материал не претендует на абсолютную истину, может быть, что-то можно сделать проще и быстрее. Автор как знает, так и делает. Кроме того он не является большим экспертом в области nix-систем. Всё, что написано ниже, найдено на просторах интернета, в большинстве своём на не русскоязычных форумах, систематизировано и изложено на родном для автора языке — русском.

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

Сообщение отредактировал PaWill — 08.03.16, 14:54

Часть 1. Необходимые инструменты и исходники

Для компиляции ядра нам потребуется nix-подобная операционная система. Я использовал Ubuntu 10.04 LTS — Long-term support 32-bit, которую установил на виртуальную машину VMware Workstation. Где всё это добро скачать/купить, как установить мы здесь обсуждать не будем. Если вы это не смогли сделать самостоятельно или с помощью гугла, то читать эту статью для вас ещё рано (или уже поздно). 🙂
И так, у нас всё установлено и работает. Теперь проверим все ли необходимые компоненты присутствуют в системе, возможно какие то пакеты придётся доустановить.
Запускаем терминал:

В терминале вводим следующую команду [1]:

Судя по последней строке у меня все пакеты на месте:

У вас, вероятней всего, не будет важного пакета — sun-java6-jdk on Ubuntu 10.04 (Lucid). Для его автоматической загрузки нужно в адреса репозитория добавить дополнительные ссылки. Введите в терминале:

После того как всё скачается и установится опять команда [1] пока не будет ошибок. Будем считать что с Ubuntu покончили.

Теперь нам потребуются собственно сами исходники ядра. Их можно найти на http://opensource.samsung.com/. В строке поиска вводим «I9000» и получаем:

Нас интересует JPX GT-I9000_OpenSource_Froyo_update2.zip (211 МБ), делаем как на скрине и жмём «Continue».

Ещё нам потребуется кросс-компилятор, которым будем собирать ядро:
http://www.codesourcery.com/sgpp/lite/arm/. nux-gnu.tar.bz2 (80 МБ)

И последнее что потребуется — это initramfs.cpio. Я выдрал его из JS8. Как это сделать расскажу как-нибудь отдельно.
JS8_initramfs.tar ( 2,64 МБ )

Пока всё, продолжение следует.

Сообщение отредактировал PaWill — 19.03.11, 19:38

Часть 2. Распаковка исходников

Всё что вы скачали будет находится в каталоге /home/имя_пользователя/Загрузки. У меня этот путь выглядит как:

Источник

Оцените статью