вторник, 23 мая 2017 г.

Как прошить Samsung Galaxy S4 из Linux

В этой статье я расскажу как перепрошить ваш Samsung Galaxy S IV GT-I9505 на Android CyanogenMod из Linux.
Не секрет, что родные прошивки Samsung даже на флагманских девайсах, мягко скажем, с запашком. Весьма странное расположение элементов, вечно подлагивающий интерфейс и куча неудаляемых спам-приложений, которые пушат свою рекламу в шторку, отвлекая владельца. В то, какие возможности даёт кастомная прошивка сейчас углубляться не будем.



Почему я решил написать эту заметку? Дело в том, что такой инструкции нигде нет. Мне пришлось собрирать информацию по крупицам, и догадываться как это сделать самому.




А что не так с другими инструкциями? На XDA-developers.com информации по этому поводу крайне мало, а инструкции на сайте 4pda.ru используют варезную Windows-only программу Odin. Винды у меня нигде нет, а прошивать из виртуальной машины с пробросом USB портов как-то стрёмно =). Здесь нужен другой подход.
Для того, чтобы прошить system раздел, нам нужно либо совместимое recovery, либо Odin и прошивка через Download mode. Через Odin уже можно прошить recovery, ну и остальные разделы сразу. Но у меня на момент прошивки стояло официальное recovery (оно не позволяет прошивать неподписанные самсунгом zip’ы), и не было компа с Windows.
Хорошо, что Benjamin Dobell позаботился о нас, он отреверсил «протокол прошивки», который разработала самсунг и не отдала сообществу, и написал утилитку. Имя этой утилите — Heimdall.
Почему такое название? Потому что Samsung’овский прошивальщик называется ‘Odin’ (король богов в норвежской мифологии), программа на смартфонах, общающаяся с прошивальщиком называется Loke/Loki (важный герой в норвежской мифологии). Автор решил назвать программу ‘Heimdall’ в честь норвежского бога и стражника Bifrost Bridge.
  1. Установите heimdall из репозитория вашего дистрибутива.
  2. Переведите смартфон в Download mode
  3. На компьютере открываем терминал и пишем:
    sudo heimdall print-pit
    Отобразится список всех разделов с подробной информацией. Нас больше всего интересуют их названия (Partition Name) и файлы, которые надо туда шить (Flash Filename). У меня на тот момент (25 апреля 2015) стояла официальная германская прошивка, содержимое вывода у меня было таким:
мои разделы
Downloading device’s PIT file…
PIT file download successful.
Entry Count: 33
Unknown 1: 1598902083
Unknown 2: 844251476
Unknown 3: 21325
Unknown 4: 14413
Unknown 5: 13881
Unknown 6: 48
Unknown 7: 0
Unknown 8: 0
— Entry #0 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 1
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 8192
Partition Block Count: 25544
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: APNHLOS
Flash Filename: NON-HLOS.bin
FOTA Filename:
— Entry #1 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 2
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 33736
Partition Block Count: 105528
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: MDM
Flash Filename: modem.bin
FOTA Filename:
— Entry #2 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 3
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 139264
Partition Block Count: 256
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: SBL1
Flash Filename: sbl1.mbn
FOTA Filename:
— Entry #3 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 4
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 139520
Partition Block Count: 512
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: SBL2
Flash Filename: sbl2.mbn
FOTA Filename:
— Entry #4 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 5
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 140032
Partition Block Count: 1024
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: SBL3
Flash Filename: sbl3.mbn
FOTA Filename:
— Entry #5 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 6
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 141056
Partition Block Count: 4096
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: ABOOT
Flash Filename: aboot.mbn
FOTA Filename:
— Entry #6 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 7
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 145152
Partition Block Count: 1024
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: RPM
Flash Filename: rpm.mbn
FOTA Filename:
— Entry #7 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 8
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 146176
Partition Block Count: 1024
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: TZ
Flash Filename: tz.mbn
FOTA Filename:
— Entry #8 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 9
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 147200
Partition Block Count: 33792
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: PAD
Flash Filename:
FOTA Filename:
— Entry #9 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 10
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 180992
Partition Block Count: 27904
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: EFS
Flash Filename: efs.img.ext4
FOTA Filename:
— Entry #10 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 11
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 208896
Partition Block Count: 6144
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: MODEMST1
Flash Filename: nvrebuild1.bin
FOTA Filename:
— Entry #11 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 12
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 215040
Partition Block Count: 6144
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: MODEMST2
Flash Filename: nvrebuild2.bin
FOTA Filename:
— Entry #12 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 13
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 221184
Partition Block Count: 1560
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: M9KEFS1
Flash Filename: m9kefs1.bin
FOTA Filename:
— Entry #13 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 14
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 222744
Partition Block Count: 1560
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: M9KEFS2
Flash Filename: m9kefs2.bin
FOTA Filename:
— Entry #14 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 15
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 224304
Partition Block Count: 1560
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: M9KEFS3
Flash Filename: m9kefs3.bin
FOTA Filename:
— Entry #15 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 16
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 225864
Partition Block Count: 5652480
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: SYSTEM
Flash Filename: system.img.ext4
FOTA Filename:
— Entry #16 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 17
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 5878344
Partition Block Count: 16384
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: PERSIST
Flash Filename:
FOTA Filename:
— Entry #17 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 18
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 5894728
Partition Block Count: 4239360
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: CACHE
Flash Filename: cache.img.ext4
FOTA Filename:
— Entry #18 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 19
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10134088
Partition Block Count: 12288
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: PARAM
Flash Filename: param.lfs
FOTA Filename:
— Entry #19 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 20
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10146376
Partition Block Count: 20480
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: BOOT
Flash Filename: boot.img
FOTA Filename:
— Entry #20 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 21
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10166856
Partition Block Count: 20480
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: RECOVERY
Flash Filename: recovery.img
FOTA Filename:
— Entry #21 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 22
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10187336
Partition Block Count: 20480
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: FOTA
Flash Filename:
FOTA Filename:
— Entry #22 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 23
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10207816
Partition Block Count: 12288
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: BACKUP
Flash Filename:
FOTA Filename:
— Entry #23 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 24
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10220104
Partition Block Count: 6144
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: FSG
Flash Filename:
FOTA Filename:
— Entry #24 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 25
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 10226248
Partition Block Count: 16
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: SSD
Flash Filename:
FOTA Filename:
— Entry #25 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 26
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 10226264
Partition Block Count: 18432
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: PERSDATA
Flash Filename: persdata.img.ext4
FOTA Filename:
— Entry #26 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 27
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 10244696
Partition Block Count: 1024000
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: HIDDEN
Flash Filename: hidden.img.ext4
FOTA Filename:
— Entry #27 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 28
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 11268696
Partition Block Count: 40960
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: CARRIER
Flash Filename: carrier.img.ext4
FOTA Filename:
— Entry #28 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 29
Attributes: 5 (Read/Write)
Update Attributes: 5 (FOTA)
Partition Block Size/Offset: 11309656
Partition Block Count: 0
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: USERDATA
Flash Filename: userdata.img.ext4
FOTA Filename: remained
— Entry #29 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 70
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 0
Partition Block Count: 34
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: PGPT
Flash Filename: pgpt.img
FOTA Filename:
— Entry #30 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 71
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 34
Partition Block Count: 16
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: PIT
Flash Filename: MSM8960.pit
FOTA Filename:
— Entry #31 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 72
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 50
Partition Block Count: 32
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: MD5
Flash Filename: md5.img
FOTA Filename:
— Entry #32 —
Binary Type: 0 (AP)
Device Type: 2 (MMC)
Identifier: 73
Attributes: 5 (Read/Write)
Update Attributes: 1 (FOTA)
Partition Block Size/Offset: 30777311
Partition Block Count: 33
File Offset (Obsolete): 0
File Size (Obsolete): 0
Partition Name: SGPT
Flash Filename: sgpt.img
FOTA Filename:
[свернуть]
После этого мой девайс перезагрузился. В дальнейшем, чтобы девайс не перезагружался можно использовать --no-reboot, но тогда в последующих командах придётся набирать --resume
  1. Первым делом я прошил нормальное Recovery. Раньше я пользовался CWM, потому что так было описано в инструкциях на 4pda, но потом я перешёл на TWRP. Досконально их не сравнивал, но вроде как TWRP круче и рекомендуется девелоперами. Шьём recovery:
    sudo heimdall flash --RECOVERY twrp-recovery.img
    В рекавери меню я переделал cache и system в f2fs.
  2. Скачайте собственно ROM, ради которого всё и затевалось. Раньше я пользовался ромом от AntaresOne, но на официальном сайте уже появилась ночные сборки CyanogenMod 12.1 (Android 5.1)
  3. Если вам нужны приложения от google и android market, скачиваем Gapps. Я взял минимальные, потому как только они были доступны для 5.1.0. Может быть они совместимы с 5.0.1, но я не пробовал их шить.
  4. Закачайте последний бутлоадер (на тот момент Latest был BL_I9505XXUHOC6) с сайта XDA и соответствующий модем с wi-fi фиксом. Там есть три архива: modem, wifi-fix и combined. Без разницы как качать: можете два архива по отдельности, можете архив два в одном.
  5. Распакуйте эти архивы.
  6. Прошейте бутлоадер, если нужно. У меня до всех манипуляций на смартфоне опция ro.bootloader была в значении I9505XXUBMEA. Для прошивки бутлоадера выполните команду
    sudo heimdall flash --SBL2 sbl2.mbn --SBL3 sbl3.mbn --ABOOT aboot.mbn --RPM rpm.mbn --TZ tz.mbn
    То есть мы прошили все файлы из архива в нужные разделы. Если архивах в будущих версиях модема что-то изменится (появятся например новые файлы), вы сами сможете по аналогии исправить приведённую выше команду.
    После этого я перезагрузился и проверил что всё работает.
  7. Прошейте GSM модем (modem.bin) и WiFi фикс (NON-HLOS.bin)
    sudo heimdall flash --APNHLOS NON-HLOS.bin --MDM modem.bin
    После этого я опять перезагрузился и проверил, что всё работает.
  8. Устанавливаем через recovery zip’ы с прошивкой и гаппсами, если они кому-то нужны. Нужно ли делать вайпы разделов я не помню, может они делаются автоматически при прошивке.
  9. Перезагружаемся, ждём, наслаждаемся =).
Вот так-то! Я не имея доступа к компьютеру с виндой снёс офицальную самсунговскую прошивку и прошил адекватную. Я свой гвоздь в гроб винды забил, потому что помог вам обойтись без неё =). Конечно, это стало возможным благодаря разработчику heimdall, который посидев под ней приложил титанические усилия, чтобы понять как работает самсунговский протокол. Это не так-то просто.
Кстати, он просил, что если кто-то надумает возвращаться на стоковую прошивку и у кого есть винда, помогите ему отреверсить протокол KIES. Нужно просто перед началом прошивки запустить USB сниффер, ввести в официальную прошивалку код, написанный под аккумулятором смартфона, и начать прошивать. Потом остановите сниффер и отошлите логи ему. Так вы внесёте свой вклад в развитие СПО.

Комментариев нет:

Отправить комментарий