Как проверить прошивку приставки на Secure Boot


   ADB         Linux     


1. Подготовка к работе с Linux по SSH

Внимание ! Если у вас до сих пор нет ни загрузочной карты, ни даже файла образа Linux, то вам сюда: Скачать Armbian для H618

Файл скачанного архива (можно даже без распаковки) записать на SD-карту программой USBImager.

1. Записанную с помощью PhoenixCard загрузочную (StartUp) SD-карту c прошивкой Android вставить в USB-кардридер и подключить его к USB-порту приставки

2. Записанную с помощью Usbimager SD-карту с образом Linux (серверная версия Armbian) вставить в слот (гнездо для SD-карты) приставки

3. На ПК с Windows запустить программу MobaXTerm, в которой настроить SSH-сессию (настройка делается один раз).

В приведенном примере: IP-адрес приставки = 192.168.0.129, порт = 22, имя сессии = Armbian Tanix







4. Подать питание на приставку, в результате должен загрузиться Linux с карты. Если к приставке подключен по HDMI монитор (телевизор), то на нём отобразится лог процесса загрузки. Но для работы по SSH этот монитор не нужен, поэтому его можно не подключать.

5. Открыть в MobaXTerm сессию с именем Armbian Tanix, щелкнув по соответствующему имени:




6. Ввести логин root




7. В результате произойдет подключение по SSH к линуксу на приставке, позволяющее работать с командной строкой (в правом окне), а также пользоваться продвинутым файловым менеджером (в левом окне)




8. В файловом менеджере (в левом окне) перейти в папку /home и создать в ней рабочую папку, например, с именем box




9. В терминале (правое окно) сделать эту папку текущей с помощью команды:

cd /home/box



10. На этом подготовительные операции закончены, можно приступать к главному, а именно, сохранению в файлы информации, хранящейся на загрузочных носителях. И много чего другому...

11. Если в окне терминала ввести команду: ls /dev ,
то получим такой результат (в примере показано не всё):


root@transpeed-8k618-t:/home/box# ls /dev
autofs           i2c-0         mmcblk2p10  net     sda21
block            i2c-1         mmcblk2p11  null    sda22
bsg              initctl       mmcblk2p12  port    sda23
btrfs-control    input         mmcblk2p13  ppp     sda24
bus              kmsg          mmcblk2p14  psaux   sda25
cec0             lirc0         mmcblk2p15  ptmx   sda3
char             log           mmcblk2p16  pts     sda4
console          loop0         mmcblk2p17  random  sda5
core             loop1         mmcblk2p18  rfkill  sda6
cpu_dma_latency  loop2         mmcblk2p19  rtc     sda7
cuse             loop3         mmcblk2p2   rtc0    sda8
disk             loop4         mmcblk2p20  sda     sda9
dma_heap         loop5         mmcblk2p21  sda1    sg0
dri              loop6         mmcblk2p22  sda10   shm
ecryptfs         loop7         mmcblk2p23  sda11   snd
fb0              loop-control  mmcblk2p24  sda12   stderr
fd               mapper        mmcblk2p25  sda13   stdin
full             media0        mmcblk2p3   sda14   stdout
fuse             mem           mmcblk2p4   sda15   sunxi_soc_info
gpiochip0        mmcblk1       mmcblk2p5   sda16
gpiochip1        mmcblk1p1     mmcblk2p6   sda17
hidraw0          mmcblk2       mmcblk2p7   sda18
hidraw1          mmcblk2boot0  mmcblk2p8   sda19   tty10
hugepages        mmcblk2boot1  mmcblk2p9   sda2    tty11
hwrng            mmcblk2p1     mqueue      sda20   tty12
root@transpeed-8k618-t:/home/box#

Здесь и сейчас нас будут интересовать только такие (выделены цветом):


  • mmcblk1 - SD-карта (вставленная в гнездо для карт), с которой загружен Linux
  • mmcblk1p1 - первый раздел этой карты


  • mmcblk2 - внутренняя флеш-память (eMMC) приставки, на которой хранится (и может с неё загружаться) стоковый образ Android.
  • mmcblk2p1 - mmcblk2p25 - физические разделы (partitions) на eMMC, всего их 25


  • sda - SD-карта, вставленная в кардридер, подключенный к USB-порту приставки. На этой карте записана загрузочная прошивка Android.
  • sda1 - sda25 - физические разделы (partitions) на этой карте, всего их 25

    Примечание. Не исключено, что SD-карта с Linux будет отображаться как mmcblk0, но это для наших целей не принципиально.


    2. Проверка загрузочной SD-карты

    1. Сделать текущей папку (если это не было сделано раньше) /home/box:
    raven:/ # cd /home/box


    2. Сохранить первые 32 блока (начало карты) в файл с именем usb32.img:
    root@transpeed-8k618-t:/home/box# dd if=/dev/sda of=usb32.img count=32
    32+0 records in
    32+0 records out
    16384 bytes (16 kB, 16 KiB) copied, 0.00469071 s, 3.5 MB/s


    3. Проверить наличие файла в папке /home/box
    root@transpeed-8k618-t:/home/box# ls
    usb32.img

    То же самое можно увидеть в файловом менеджере (в левом окне)


    4. Скопировать оба файла в выбранную папку на ПК, используя функцию Download файлового менеджера:





    5. О том, как интерпретировать эти файлы, рассказано здесь: Как интерпретировать сохраненные файлы.


    3. Проверка стоковой прошивки, хранящейся во внутренней eMMC-памяти приставки

    1. Сделать текущей папку (если это не было сделано раньше) /home/box:
    raven:/ # cd /home/box


    2. Сохранить первые 32 блока (начало карты) в файл с именем mmc32.img:
    root@transpeed-8k618-t:/home/box# dd if=/dev/mmcblk2 of=mmc32.img count=32
    32+0 records in
    32+0 records out
    16384 bytes (16 kB, 16 KiB) copied, 0.00430666 s, 3.8 MB/s


    3. Проверить наличие файла в папке /home/box
    root@transpeed-8k618-t:/home/box# ls
    mmc32.img
    То же самое можно увидеть в файловом менеджере (в левом окне)


    4. Скопировать файл в выбранную папку на ПК, используя функцию Download файлового менеджера:




    5. О том, как интерпретировать этот файл, рассказано здесь: Как интерпретировать сохраненные файлы.


    4. Как сохранить резервные копии разделов eMMC

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


    • mmcblk2p1 bootloader_a
    • mmcblk2p3 env_a
    • mmcblk2p5 boot_a
    • mmcblk2p7 vendor_boot_a
    • mmcblk2p9 super
    • mmcblk2p10 misc
    • mmcblk2p11 vbmeta_a
    • mmcblk2p13 vbmeta_system_a
    • mmcblk2p15 vbmeta_vendor_a
    • mmcblk2p17 frp
    • mmcblk2p19 metadata
    • mmcblk2p20 private
    • mmcblk2p21 dtbo_a
    • mmcblk2p23 media_data
    • mmcblk2p25 UDISK

    2. Команды, с помощью которых можно сохранить бекап этих разделов:


  • dd if=/dev/mmcblk2 of=start.img count=73728 (неразмеченная область eMMC)

  • dd if=/dev/mmcblk2p1 of=bootloader.img

  • dd if=/dev/mmcblk2p3 of=env.img

  • dd if=/dev/mmcblk2p5 of=boot.img

  • dd if=/dev/mmcblk2p7 of=vendor_boot.img

  • dd if=/dev/mmcblk2p9 of=super.img

  • dd if=/dev/mmcblk2p10 of=misc.img

  • dd if=/dev/mmcblk2p11 of=vbmeta.img

  • dd if=/dev/mmcblk2p13 of=vbmeta_system.img

  • dd if=/dev/mmcblk2p15 of=vbmeta_vendor.img

  • dd if=/dev/mmcblk2p17 of=frp.img

  • dd if=/dev/mmcblk2p19 of=metadata.img

  • dd if=/dev/mmcblk2p20 of=private.img

  • dd if=/dev/mmcblk2p21 of=dtbo.img

  • dd if=/dev/mmcblk2p23 of=media_data.img

  • dd if=/dev/mmcblk2p25 of=data.img

    Примечания.

  • 1. Некоторые из сохраненных файлов могут оказаться пустыми, т.е нулевой длины - это нормально
  • 2. Файлы больших разделов (особенно, раздел super !) будут сохраняться достаточно долго, поэтому наберитесь терпения и ждите завершения копирования.
  • 3. Раздел пользовательских данных (под номером 25) может оказаться о-о-очень большим, поэтому сохранять его в таком виде большого смысла нет. Проще смонтировать и извлечь из него нужные файлы простым копированием в файловом менеджере (подробности - позже).

    Размеры разделов можно посмотреть командой partx /dev/mmcblk2 (в столбце SIZE):


    root@transpeed-8k618-t:/home/box# partx /dev/mmcblk2
    NR   START      END  SECTORS  SIZE NAME            UUID
     1   73728   139263    65536   32M bootloader_a    a0085546-4166-744a-a353-fca9272b8e45
     2  139264   204799    65536   32M bootloader_b    a0085546-4166-744a-a353-fca9272b8e46
     3  204800   205311      512  256K env_a           a0085546-4166-744a-a353-fca9272b8e47
     4  205312   205823      512  256K env_b           a0085546-4166-744a-a353-fca9272b8e48
     5  205824   336895   131072   64M boot_a          a0085546-4166-744a-a353-fca9272b8e49
     6  336896   467967   131072   64M boot_b          a0085546-4166-744a-a353-fca9272b8e4a
     7  467968   533503    65536   32M vendor_boot_a   a0085546-4166-744a-a353-fca9272b8e4b
     8  533504   599039    65536   32M vendor_boot_b   a0085546-4166-744a-a353-fca9272b8e4c
     9  599040  6890495  6291456    3G super           a0085546-4166-744a-a353-fca9272b8e4d
    10 6890496  6923263    32768   16M misc            a0085546-4166-744a-a353-fca9272b8e4e
    11 6923264  6923519      256  128K vbmeta_a        a0085546-4166-744a-a353-fca9272b8e4f
    12 6923520  6923775      256  128K vbmeta_b        a0085546-4166-744a-a353-fca9272b8e50
    13 6923776  6923903      128   64K vbmeta_system_a a0085546-4166-744a-a353-fca9272b8e51
    14 6923904  6924031      128   64K vbmeta_system_b a0085546-4166-744a-a353-fca9272b8e52
    15 6924032  6924159      128   64K vbmeta_vendor_a a0085546-4166-744a-a353-fca9272b8e53
    16 6924160  6924287      128   64K vbmeta_vendor_b a0085546-4166-744a-a353-fca9272b8e54
    17 6924288  6925311     1024  512K frp             a0085546-4166-744a-a353-fca9272b8e55
    18 6925312  6956031    30720   15M empty           a0085546-4166-744a-a353-fca9272b8e56
    19 6956032  6988799    32768   16M metadata        a0085546-4166-744a-a353-fca9272b8e57
    20 6988800  7021567    32768   16M private         a0085546-4166-744a-a353-fca9272b8e58
    21 7021568  7025663     4096    2M dtbo_a          a0085546-4166-744a-a353-fca9272b8e59
    22 7025664  7029759     4096    2M dtbo_b          a0085546-4166-744a-a353-fca9272b8e5a
    23 7029760  7062527    32768   16M media_data      a0085546-4166-744a-a353-fca9272b8e5b
    24 7062528  7095295    32768   16M Reserve0        a0085546-4166-744a-a353-fca9272b8e5c
    25 7095296 30785502 23690207 11.3G userdata        a0085546-4166-744a-a353-fca9272b8e5d
    

    Чтобы получить доступ к разделу пользовательских данных (userdata) для копирования и сохранения файлов, достаточно смонтировать раздел userdata на предварительно созданную папку (в примере ниже - с именем qqq):

    root@transpeed-8k618-t:/home/box# mount /dev/mmcblk2p25 qqq

    После этого его содержимое становится доступным в файловом менеджере:




    Продолжение окна файлового менеджера (после прокрутки)



    Например, содержимое папки, которая в андроиде имеет имя sdcard (в ней все стандартные папки), можно увидеть в папке media/0:




    Аналогичным образом можно смонтировать и получить доступ к файлам, содержащихся в разделе bootloader (это набор графических файлов для загрузчика U-Boot).

    Однако смонтировать и получить таким образом доступ к системным разделам (system, product, vendor) подобным способом не удастся, т.к. эти разделы являются динамическими (логическими) и находятся внутри физического раздела super. Поэтому потребуется его предварительная распаковка, а затем уже - монтирование.
    Но об этом - в другой раз, чтобы окончательно не запутать читателей...

    И в заключение - лог сохранения почти всех (кроме super и userdata) файлов:
    (можно просто скопировать и вставить копипастом в терминале список всех этих команд )


    dd if=/dev/mmcblk2    of=start.img count=73728
    dd if=/dev/mmcblk2p1  of=bootloader.img
    dd if=/dev/mmcblk2p3  of=env.img
    dd if=/dev/mmcblk2p5  of=boot.img
    dd if=/dev/mmcblk2p7  of=vendor_boot.img
    dd if=/dev/mmcblk2p10 of=misc.img
    dd if=/dev/mmcblk2p11 of=vbmeta.img
    dd if=/dev/mmcblk2p13 of=vbmeta_system.img
    dd if=/dev/mmcblk2p15 of=vbmeta_vendor.img
    dd if=/dev/mmcblk2p17 of=frp.img
    dd if=/dev/mmcblk2p19 of=metadata.img
    dd if=/dev/mmcblk2p20 of=private.img
    dd if=/dev/mmcblk2p21 of=dtbo.img
    dd if=/dev/mmcblk2p23 of=media_data.img
    

    Для копирования сохраненных файлов на ПК удобно воспользоваться функцией Download встроенного в MobaXTerm файлового менеджера в этой же сессии SSH.







    Для того, чтобы собрать все эти файлы бекапа в один архивный файл, удобно воспользоваться командой:
    tar -cf bakup.tar *

    И потом отправить файл bakup.tar с помощью Download на ПК.