Важное дополнение, позволяющее понять многие проблемы описанные в данном топике, которое, тем не менее, никак не освобождает от чтения остальных сообщений и внимательного вникания в тему. Итак...
По итогам разбирательства с другими телами на Qualcomm выяснились оч интересные подробности. Код PBL содержит только процедуру инициализации и пропрайетарный протокол заливки загрузчиков типа MPRGxxxx.hex/bin. Работа режима 9006 (еММС наружу) обеспечивается SBL(!), а не PBL.
Именно этм фактом объясняются многочисленные нестыковки, когда все, вроде бы, должно работать и аппарат должен вываливаться в 9006, но этого никак не происходит. Qualcomm разработал оч мудреный способ восстановления/прошивки "пустого" (ну или сбойнувшего) тела.
Через PBL в память устройства загружается внешний загрузчик и что он будет делать зависит уже исключительно от него самого. Производитель конечного устройства может кастомизировать процесс как его душе угодно. Может применяться (или не применяться) проверка подписей всех загрузчиков (т.н. Secure Boot), что может фатально препятствовать написанию собственных загрузчиков любого уровня (при том, что это и так весьма сложно и оч мало кто за такое берется).
Однако, существует дефолтный общий метод прошивки предложенный Qualcomm в референсном дизайне, и именно подобным образом шьется подавляющее большинство НЫНЕШНИХ устройств, исключая, может, какие-то "намудренные" Самцы и прочий "понтовый шлак".
Китацы, тем более, стараются как можно меньше отходить от довольно открытого и раскопанного референса, за что им большое человеческое спасибо!
Буст построен практически по референсному дизайну, поэтому и работа с ним мало чем отличается от иных близких к референсу устройств.
Когда PBL стартует в стандартном режиме, он инициализирует RAM/eMMC, после чего читает таблицу разделов с еММС, ищет там раздел SBL, грузит его в память и передает управление. Если в этот момент зажаты соотв кнопки (касается тех устройств, где это работает, в т.ч. Буста), стартовавший SBL это видит, прекращает дальнейшую "нормальную загрузку" и вываливается в режим 9006 "еММС наружу". И так случается всегда, даже если какие-то разделы разрушены, аппарат висит на лого или с "черным экраном", но только до тех пор пока выполнены 3 условия:
1. Физически цела еММС (еММС может быть повреждена, но она должна, как минимум, читаться и с нее должны физически читаться сектора, в которых лежат описанные ниже объекты).
2. на еММС есть корректная таблица разделов, в которой прописаны, как минимум, разделы SBL, RPM, TZ (на некоторых устройствах список разделов может отличаться, например могут присутствовать и требоваться. разделы SBL1/SBL2/SBL3). На старых аппаратах таблица разделов может быть MBR, на более новых, обычно, GPT (как на Boost*).
3. С еММС должны читаться корректные образы разделов SBL/RPM/TZ, содержащие корректный код SBL (и, соотв, его "дополнений" типа RPM/TZ).
При соблюдении указанных условий при удержании кнопок аппарат выйдет в режим еММС наружу и можно "ковыряться" в содержимом еММС.
В противном случае аппарат не выйдет ни в какой иной режим, кроме описанного выше QDLoader 9008, который обеспечивается PBL.
Как же восстановить устройство в случае проблем с загрузкой SBL?
Для этого предусмотрена референсная процедура восстановления (прописывания "пустого" устройства) от Qualcomm.
Нужно, используя QPST->eMMC Download или иные инструменты (QFIL, "заводские" от китов, самописные), загрузить в ОПЕРАТИВНУЮ память аппарата заводской загрузчик ДЛЯ ДАННОГО ПРОЦЕССОРА и ДЛЯ ДАННОГО АППАРАТА, типа MPRG8626.HEX (который обычно есть заводской прошивке) и через него загрузить "пакет" с именем типа 8626_msimage.mbn, который, обычно, тоже есть в заводской прошивке (либо создать этот пакет, в нете есть инфа, но не тривиально). Пакет содержит в себе образы таблицы разделов и необходимых загрузчиков SBL-уровня в одном файле. Если все идет нормально, ранее загруженный .HEX загрузчик принимает посланный ему пакет и прописывает его части на "нужные места" в еММС, затирая любую таблицу разделов, которая там была записана и все сектора еММС, которые нужны для прописывания SBL-загрузчиков из пакета (по этой причине при разбивке еММС на заводе специально оставляют большой пустой участок в начале еММС, после GPT/MBR).
После записи загрузчик перезагружает аппарат в штатном режиме. Аппарат стартует, PBL находит ("восстановленную") таблицу разделов, находит на ней разделы с загрузчиками SBL-уровня, стартует SBL и передает ему управление. SBL стартует, "видит", что кроме него и его "помощников" в GPT/MBR ничего не прописано, и вываливается в режим 9006 "еММС наружу" для пересоздания полной таблицы разделов и прописывания основной прошивки внешним софтом с компа. Возможно также, что при выборе режима (т.е. чтобы выйти в 9006 вместо попыток загрузить ОС) SBL ориентируется на еще какой-то "флажок" записанный на еММС или в памяти устройства (понятно, что также отлавливает и состояние кнопок громкости).
Следует заметить, что загрузчики называются типа MPRG8626.hex (или .bin) или NPRGxxxx, что создает ложное чувство их совместимости с любыми устройствами на данном SoC. Однако это не так. Загрузчик пишется и компилируется под конкретное устройство и модификацию проца, поэтому, совместимыми с "соседними" устройствами, загрузчики оказываются лишь изредка. Бывает, что поиск "родного"/совместимого загрузчика становится непреодолимой проблемой для целой армии пользователей и растягивается на годы. Встречались и иные случаи, когда загрузчик, вроде бы приложен к заводской прошивке, но процедура никак не срабатывает. Причина может быть как в том, что производитель заложил какой-то "секрет" (См. опыт с Micromax Q415, там для успешности заливки прошивки в "крипич" требуется удержание тестпоинта при старте, иначе аппарат создает полную иллюзию того, что что-то не так работает и можно биться хоть годы, QDLoader вроде бы появляется, но HEX/BIN в упор не принимает. с Тестпоинтом все визуально идентично, но все грузится на ура). В иных случаях, возможно производитель уже перешел на другой протокол заливки, а загрузчик остался, может, "для истории", но работать с ним PBL уже не желает. Современные Qualcomm устройства "плавно мигрируют" с пропрайетарного протокола Sahara на такой же пропрайетарный протокол Firehose, что также вносит немало "недопонимания" со стороны "простых пользователей" (и "неофициальных" специалистов тоже), которым, внезапно, никто не дает инструкцию "как же все таки шить" в случае сбоя (а сбой непременно случается почти с каждым современным аппаратом).
Аппарат может упорно не шиться и не переводиться в режим 9006 в случае порчи еММС. Бывает еММС дохнет "не до конца", а, например, виснет при попытке записи или уходит в РидОнли. Вроде, аппарат даже стартует, показывает лого, которое невозможно показать с дохлой еММС (просто потому что его надо считать с еММс сначала), но загрузка MSImage, его прошивка никак не идет... Оказывается просто все виснет, потому и нет ответа от устройства. С таким я недавно сталкивался на Highscreen Omega Prime S на аналогичном SoC MSM8212. Сразу ясно было, что еММС сбоит, но я все же надеялся вытащить данные пользователя (что уцелело) и поэкспериментировать. Но для того чтобы загнать аппарат в еММС наружу и вытащить данные, нужно сначала хотябы загнать в 9006, пробовал и записать туда MSImage (аппарат штатно не грузился, вис, а "по кнопкам" ни при каких условиях в 9006 выходить не желал, причина так и не ясна по сей день, поск SBL там был и остался заведомо цел, удавалось загрузить рикавери, как с еММС, так и по USB). В этом, конечно, заложен большой "подводный камень" такой странной технологии. Теоретически можно писать свой hex, позволяющий выдрать данные с еММС и отдать их по USB, либо организовать "еММС наружу" "своими силами", но как описано выше, это большая проблема и не всегда возможно из-за подписей
.
Помочь в понимании процесса проливки конкретного аппарата могут "заводские утилиты" от китайцев. Иногда они на редкость показательны, просто потому, что написаны в виде полностью открытого скрипта для интерпретатора Python (выглядит как .bat файл - нет никакого "скомпилированного кода" - можем просто запустить текстовый скрипт, а можем что угодно анализировать, редактировать перед запуском). Скрипты там совсем не простые, может быть и 50+КБ кода, но приложив адекватные усилия, разобраться в них, имхо, не проблема.
Вернемся к Бусту. Если ваша задача лишь восстановить работоспособность "окирпиченного" аппарата с повреждением GPT/SBL, следует просто попытаться прошить его заводской прошивкой с помощью заводской утилиты (или QPST/QFIL - правильно их настроив, подробности есть на 4 пда).
Если используем какие-то иные методы/эксперименты, то надо помнить, что, после проливки MSImage, GPT будет содержать лишь записи нескольких разделов. Поэтому сначала нужно пересоздать полный GPT, как это делают заводские утилиты/скрипты, либо клонировать его с идентичного аппарата с идентичной разбивкой, потом заливать разделы на их места.
А вот если необходимо вытащить данные, а SBL не грузится (соотв в 9006 не выходит), нужно попытаться прошить только MSImage чз HEX, но не прошивать основные разделы (system/data/cache/modem/etc). Для этого попробуйте воспользоваться только загрузчиками (с любой из утилит), либо попытаться использовать заводскую процедуру прошивки "целиком", но заранее убрав из конфигов ссылки на образы разделов. После сливания поврежденного образа и/или необходимых данных, можно уже прошить целиком и восстановить работоспособность. Если все делается правильно, но аппарат упортно не шьется заводской процедурой, практика показывает, что чаще всего это означает аппаратное повреждение еММС, к сожалению.
Другая проблема состоит в том, что если пришлось заливать MSImage для восстановления данных, то на еММС в таблице разделов оказываются не прописанными почти все разделы, кроме 3-4 штук SBL-related, как описано выше. В слитом образе "фулл", в этом случае, будет все аналогично. Данные могут быть на месте, но разделы не прописаны в таблице и их, "как бы нет". Нужно раздобыть "исправный" фулл от идентичного аппарата и поглядеть границы разделов там, либо просто скопировать сектора с таблицей разделов из исправного фулла на свою еММС или в слитый образ. Иной вариант, найти описание разделов с их границами на форумах (учитывая, что радикальные обновления прошивок могут требовать переразбивки еММС, что может вести к несовпадению границ разделов на разных прошивках, хотя обычно все аппараты в серии идентичны по разбивке).
Так или иначе, такая работа, хоть и не оч сложна для специалиста, требует весьма серьезных общих знаний о структурах данных современных носителей/ФC или разбирательства для неподготовленного человека. При наличии корректной таблицы разделов, восстанавливать данные можно, например, с помощью R-Studio (доступно непрофессионалу), или "руками" с ипользованием "Диск едиторов", типа DMDE - все зависит от того какие данные нужно достать и степени их повреждения. Много подробностей на эту тему Вы можете почерпнуть из разбирательства с Casio Gz'One в соотв топике на 4 пда.
Кому интересно чем (успешно) кончилось разбирательство с Casio Gz'One тоже почитайте соотв топик на 4 пда. Тут это уже оффтоп.
Если кто-то желает обсуждать Gz'One на этом форуме, можно открыть соотв тему, перенести соотв инфу (но там оч много переносить придется

). Ссылок не даю, поск тут не приветствуется. Найти Гуглем проблем никаких нет.