Заметил в продаже новенький TV-бокс H96 MAX M1 на чипсете Rockchip RK3528, с 4Гб памяти, новым 13-м Андроидом, и подозрительно дешевый. Зная, что на старых чипах Rockchip уже запускали Линукс, я решил заказать и попробовать.

Можете заметить разъёмы питания/USB/HDMI/AV... Как думаете, в чём подвох? Наверное на другом боку еще пара USB и слот для карты памяти, но нет - других разъёмов для вас нет. Сразу напишу - разработчикам такое покупать не стоит, это создаёт много проблем, но раз уж купил - то работаю с чем есть.

Для запуска Линукс первым делом надо получить оригинальный Device Tree, вытащив .dtb из boot или recovery раздела. Этим я и занялся. Rockchip устройств у меня еще не было и по отзывам у меня складывалось ощущение производителя, что не ставит палки в колёса разработчикам, но оказалось - это уже в прошлом.

Характеристики устройства

Называется H96 MAX M1, с одной стороны корпуса разъёмы: питания (5V), HDMI, USB (2.0 судя по чёрному цвету), и AV в виде разъёма для 3.5 миниджека. С противоположной стороны есть ИК-приёмник для пульта и синий/красный диоды для индикации состояния. Есть Wi-Fi и Bluetooth.

Чипсет RK3528, это в чём-то улучшенный RK3328, хотя в чём - неизвестно, тот же 4-х ядерный Cortex-A53. Частота не то 1.5ГГц (их характеристик найденных в интернете), не то 2ГГц (указано в Device Tree). Возможно 2ГГц это boost частота, а 1.5ГГц обычная.

GPU: Mali-450, в RK3328 такой же.

4Гб оперативной памяти, на плате состоит из восьми чипов, по четыре с каждой стороны. 64Гб флэш памяти.

Выпускается в таких вариантах ОЗУ/ПЗУ: 2/16, 4/32, 4/64.

Что внутри

плата снизу
плата снизу
плата сверху
плата сверху

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

Около AV разъёма видны следы пайки с обоих сторон - припаяны две тонкие проволочки, что-то чинили.

Видны три дырочки под пины, квадрат-круг-круг, похоже это UART, но контакты не подписаны и они очень мелкие, расстояние между центрами отверстий примерно 1.25-1.5мм.

Приступим к чтению разделов

Есть готовая опенсорс утилита для доступа к интерфейсу прошивки EMMC на устройстве:

https://github.com/linux-rockchip/rkflashtool

Но сначала надо ввести устройство в download режим, для этого при включении питания должна быть зажата загрузочная кнопка. Что на смартфонах одна из кнопок громкости, а какие могут быть кнопки у TV-бокса? На некоторых моделях можно найти дырочку в корпусе, через которую скрепкой/зубочисткой можно нажать на скрытую кнопку. Здесь кнопка спрятана в AV разъёме. Если там есть кнопка, то слышится щелчок при нажатии. Со всей силы давить туда не нужно, чтобы не сломать.

MicroUSB/type-C разъёма тут нет, поэтому для подключения к компьютеру понадобится кабель с одинаковыми разъёмами type-A, так называемый AM-AM (AM значит type-A Male).

Далее надо зажать подходящим тонким предметом кнопку в AV разъёме и подключить питание, через 1-2 секунды кнопку можно отпустить, устройство будет пару минут ждать первого использования download режима через USB.

Удобная особенность этого TV-бокса, что он работает от одного только кабеля USB подключенного к компьютеру, поэтому к блоку питания его не подключал, зажал загрузочную кнопку зубочисткой и в это время подключил к компьютеру через USB.

В выводе $ lsusb заметил новое устройство:

ID 2207:350c Fuzhou Rockchip Electronics Company USB download gadget

В исходниках rkflashtool есть таблица кодов устройств, в которой RK3528 еще нет. Добавил код нового чипа в таблицу:

--- a/rkflashtool.c
+++ b/rkflashtool.c
@@ -117,6 +117,7 @@ static const struct t_pid {
     { 0x320c, "RK3328" },
     { 0x330a, "RK3368" },
     { 0x330c, "RK3399" },
+    { 0x350c, "RK3528" },
     { 0, "" },
 };
 

Для компиляции понадобится libusb-devel пакет.

Чтобы не надо было вызывать rkflashtool с правами рута, можно сделать USB устройство доступным для непривилегированных пользователей, создав файл /etc/udev/rules.d/80-rockchip.rules с таким содержимым:

# Rockchip RK3528
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2207", ATTRS{idProduct}=="350c", MODE="0666", TAG+="uaccess"

Ничего перезагружать не нужно, правила будут работать при новом подключении USB устройства. Поэтому надо отключить USB и заново подключить в download режиме.

При запуске rkflashtool без параметров - выводится список команд, из которых мне нужны эти:

	rkflashtool r partname >outfile 	read flash partition
	rkflashtool w partname <infile  	write flash partition
	rkflashtool r offset nsectors >outfile 	read flash
	rkflashtool w offset nsectors <infile  	write flash

Для работы с именами разделов требуется сторонняя утилита mtdparts, а я лучше покажу как работать без неё.

Сначала начнём с чтения таблицы разделов - GPT (GUID Partition Table, а не то сокращение что сейчас на слуху.)

$ ./rkflashtool r 0 32 | hexdump -C

Вместо hexdump -C можно использовать hd, но не во всех дистрибутивах Линукс есть такое сокращение.

Покажу часть интересных для меня разделов из этого дампа:

00000480  00 00 XX XX 00 00 72 4e  80 00 49 b3 00 00 17 72  |..b...rN..I....r|
00000490  00 00 21 5a 00 00 04 4e  80 00 30 0c 00 00 20 cc  |..!Z...N..0... .|
000004a0  00 40 00 00 00 00 00 00  ff 5f 00 00 00 00 00 00  |.@......._......|
000004b0  00 00 00 00 00 00 00 00  75 00 62 00 6f 00 6f 00  |........u.b.o.o.|
000004c0  74 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|

00000700  00 00 0c a2 00 00 7a 44  80 00 6f 7b 00 00 28 06  |......zD..o{..(.|
00000710  00 00 50 15 00 00 46 4f  80 00 23 51 00 00 3b 98  |..P...FO..#Q..;.|
00000720  00 c8 00 00 00 00 00 00  ff 57 02 00 00 00 00 00  |.........W......|
00000730  00 00 00 00 00 00 00 00  62 00 6f 00 6f 00 74 00  |........b.o.o.t.|
00000740  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

00000780  00 00 3f a1 00 00 3c 4e  80 00 35 8c 00 00 6e 33  |..?...<N..5...n3|
00000790  00 00 41 2e 00 00 16 4b  80 00 3e b4 00 00 60 30  |..A....K..>...`0|
000007a0  00 58 02 00 00 00 00 00  ff 57 05 00 00 00 00 00  |.X.......W......|
000007b0  00 00 00 00 00 00 00 00  72 00 65 00 63 00 6f 00  |........r.e.c.o.|
000007c0  76 00 65 00 72 00 79 00  00 00 00 00 00 00 00 00  |v.e.r.y.........|

Названия разделов видны по текстовой части дампа. Перед названием идёт два 8-байтовых (64 бита) значений записанных в little-endian:

000004a0 00 40 00 00 00 00 00 00 ff 5f 00 00 00 00 00 00

То есть 0x4000 и 0x5fff, это индексы первого сектора раздела и последнего. Один сектор это 512 байт, rkflashtool работает в тех же единицах.

Сделаем дамп раздела uboot, это загрузчик который запускает Android, а также реализует этот download режим со стороны устройства. Чтобы не вычислять в уме, можно использовать "arithmetic expansion" из bash:

$ first=0x4000; last=0x5fff; ./rkflashtool r $first $((1+$last-$first)) > uboot.img

Выражение $((1+$last-$first)) превратится в 8192.

Обрадовался что чтение разделов работает как положено, но не тут то было.

Сделал дамп разделов boot и recovery, заметил что дамп recovery полностью состоит из байтов 0xCC, заглянул в boot - там начало правильное, но посредине тоже начинаются байты 0xCC. Байты 0xCC начинаются по границе 32Мб, это 0x10000 секторов по 512.

Решил что rkflashtool не работает с новым устройством и нашел другой способ дампа, через Андроид (приведён в конце). А потом смог найти на xdaforums пользователей что жалуются на то же самое. Один из них нашел причину и исправил её.

Вкратце - Rockchip в коде U-boot решил ограничить чтение на 0x10000 секторов, далее возвращаются байты 0xCC. При этом запись не ограничена.

U-boot не является большой тайной и его исходные коды доступны, вот место в cmd/rockusb.c что ограничивает чтение:

static int rkusb_read_sector(struct ums *ums_dev,
			     ulong start, lbaint_t blkcnt, void *buf)
{
	struct blk_desc *block_dev = &ums_dev->block_dev;
	lbaint_t blkstart = start + ums_dev->start_sector;
	int ret;

	if ((blkstart + blkcnt) > RKUSB_READ_LIMIT_ADDR) {
		memset(buf, 0xcc, blkcnt * SECTOR_SIZE);
		return blkcnt;
	} else {
		ret = blk_dread(block_dev, blkstart, blkcnt, buf);
		if (!ret)
			ret = -EIO;
		return ret;
	}
}

Этот код находится в uboot, который расположен до 32-го мегабайта, поэтому сдампился полностью.

Заголовок uboot.img: D0 0D FE ED - как ни странно является заголовком DTB (Device Tree Binary).

DTB декомпилируются в текстовый вид через утилиту device-tree-compiler (есть готовая во многих дистрибутивах Линукс), устанавливаем и вызываем:

$ dtc -O dts uboot.img -o uboot.dts

Обращаем внимание на эти записи в начале полученного uboot.dts:

	images {

		uboot {
			data-size = <0x113760>;
			data-position = <0x1000>;
			description = "U-Boot";
			type = "standalone";
			arch = "arm64";
			os = "U-Boot";
			compression = "none";
			load = <0x200000>;

			hash {
				value = <0xfde6c46b 0x85eb6b88 0xd0a056a4 0x25a23bcf 0x79fe28a1 0xcac609f 0x3e4d7e06 0x6e89472f>;
				algo = "sha256";
			};
		};

Размер кода и данных U-boot что загружаются в память: data-size = <0x113760>
Их позиция в файле: data-position = <0x1000>
Адрес в памяти устройства по которому они загружаются: load = <0x200000>
Также sha256 хэш - при изменении надо его пересчитать.

Загрузил код в дизассемблер и нашел функцию rkusb_read_sector:

00210914  FD 7B BE A9   STP   X29, X30, [SP, #-0x20]!
00210918  FD 03 00 91   MOV   X29, SP
0021091C  04 18 40 B9   LDR   W4, [X0, #0x18]
00210920  F3 0B 00 F9   STR   X19, [SP, #0x10]
00210924  81 00 01 8B   ADD   X1, X4, X1
00210928  24 00 02 8B   ADD   X4, X1, X2
0021092C  9F 40 40 F1   CMP   X4, #0x10, LSL #12
00210930  49 01 00 54   B.LS  00210958
00210934  F3 03 02 AA   MOV   X19, X2
00210938  81 19 80 52   MOV   W1, #0xCC
0021093C  42 D8 77 D3   LSL   X2, X2, #9
00210940  E0 03 03 AA   MOV   X0, X3
00210944  67 5B 02 94   BL    memset
00210948  E0 03 13 2A   MOV   W0, W19

0021094C  F3 0B 40 F9   LDR   X19, [SP, #0x10]
00210950  FD 7B C2 A8   LDP   X29, X30, [SP], #0x20
00210954  C0 03 5F D6   RET

00210958  00 A0 00 91   ADD   X0, X0, #0x28
0021095C  0E CF 00 94   BL    blk_dread
00210960  1F 00 00 71   CMP   W0, #0
00210964  93 00 80 12   MOV   W19, #0xFFFFFFFB
00210968  00 10 93 1A   CSEL  W0, W0, W19, NE
0021096C  F8 FF FF 17   B     0021094C

Чтобы избавиться от ограничения, нужно заменить условный бранч:

00210930 49 01 00 54 B.LS 00210958

На безусловный:

00210930 0A 00 00 14 B 00210958

Я изменил скрипт предложенный в посте на xdaforums, чтобы он сам искал и исправлял начало этой функции. Значения sz и pos надо взять из своего uboot.dts.

from hashlib import sha256

SZ = 0x200000
with open('uboot.img', 'rb') as f:
    img = f.read()

assert img[SZ:] == img[:SZ]

replace_old = bytearray.fromhex("\
    FD 7B BE A9  FD 03 00 91  04 18 40 B9  F3 0B 00 F9 \
    81 00 01 8B  24 00 02 8B  9F 40 40 F1  49 01 00 54 \
    F3 03 02 AA  81 19 80 52  42 D8 77 D3  E0 03 03 AA ")

replace_new = bytearray.fromhex("\
    FD 7B BE A9  FD 03 00 91  04 18 40 B9  F3 0B 00 F9 \
    81 00 01 8B  24 00 02 8B  9F 40 40 F1  0A 00 00 14 \
    F3 03 02 AA  81 19 80 52  42 D8 77 D3  E0 03 03 AA ")

replace_offset = img.find(replace_old)
assert replace_offset > 0

sz = 0x113760
pos = 0x1000
h = sha256(img[pos:pos + sz]).digest()
hash_offset = img.find(h)
assert hash_offset > 0

uboot_patched = bytearray(img)
uboot_patched[replace_offset:replace_offset + len(replace_new)] = replace_new
uboot_patched = uboot_patched[pos:pos + sz]

assert len(uboot_patched) == sz
h2 = sha256(uboot_patched).digest()

img2 = bytearray(img[:SZ])
img2[pos:pos + sz] = uboot_patched
img2[hash_offset:hash_offset + len(h)] = h2

with open('uboot_new.img', 'wb') as f:
    f.write(img2)
    f.write(img2)

Запуск скрипта:

$ python3 uboot_fix.py

Убедившись, что результат выглядит корректно, я обновил U-boot на устройстве:

$ ./rkflashtool w 0x4000 0x2000 < uboot_new.img

(Если будете повторять, то имейте в виду, что в примерах и скрипте использованы константы, которые вам нужно будет обновить на полученные из GPT/U-Boot с вашего устройства.)

Отключил устройство и подключил обратно в download режиме - ограничение на 0x10000 секторов исчезло.

Как достать .dtb из разделов Андроида

Можно найти разные утилиты чтобы разобрать boot Андроида по кусочкам, но эти .dtb не сжаты и находятся поиском заголовка формата:

$ hexdump -C boot.img | grep "d0 0d fe ed"

021c0c00  d0 0d fe ed 00 01 84 e8  00 00 00 38 00 01 5a ec  |...........8..Z.|
027d3800  d0 0d fe ed 00 01 84 e8  00 00 00 38 00 01 5a ec  |...........8..Z.|

Значение следующее за 4 байтами заголовка - это размер файла, 0x184e8 в данном случае. Тут нашлось два одинаковых экземпляра. Достать первый можно, например, так:

$ tail -c +$((1+0x21c0c00)) boot.img | head -c $((0x184e8)) > rk3528.dtb

Альтернативный способ дампа разделов

Можно сделать дамп разделов через Android, но для этого нужны права root.

Решил подключить adb - покликал на "Android TV OS build" в About пока мне не включили меню "Developer options", в котором меня заинтересовали следующие опции:

"USB settings" с загадочным описанием "Disconnect to Computer"

"USB debugging" с описанием "Debug mode when USB is connected"

"Internet Adb" с описанием "enabled internet adb"

Казалось бы, в Android должна быть стандартная локализация, но похоже они перевели с китайского на английский.

"USB debugging" включил, "USB settings" тоже включил, описание изменилось на "Connect to Computer". Подключил через AM-AM кабель - adb устройство не видит. Причём "USB settings" сбрасывается на выключенно при выходе из "Developer options".

Тогда взял USB-Ethernet адаптер и подключил TV-бокс через него к локальной сети. По сети adb тоже не видит устройство. Догадался что опция "Internet Adb" значит отладку по сети и adb наконец подключился.

Тут оказалось интересное, что билд Android не релизный, поэтому в нём работает adb root, чем я и воспользовался.

$ adb connect 192.168.XXX.XXX
$ adb root
$ adb shell

Запросил в shell список разделов (размеры в килобайтах):

rk3528_box:/ # cat /proc/partitions | grep mmcblk
 179        0   61071360 mmcblk2
 179        1       4096 mmcblk2p1
 179        2       4096 mmcblk2p2
 179        3       4096 mmcblk2p3
 179        4       4096 mmcblk2p4
 179        5       4096 mmcblk2p5
 179        6       1024 mmcblk2p6
 179        7      51200 mmcblk2p7
 179        8      98304 mmcblk2p8
 179        9     393216 mmcblk2p9
 179       10     393216 mmcblk2p10
 179       11      16384 mmcblk2p11
 179       12       1024 mmcblk2p12
 179       13    4194304 mmcblk2p13
 179       14   55898080 mmcblk2p14

Имён нет, но уже зная таблицу GPT - можно предположить что mmcblk2p7 и mmcblk2p8 - это разделы boot и recovery (так и оказалось).

Выходим из shell и в наглую копируем разделы через adb pull:

$ adb pull /dev/block/mmcblk2p7 .
$ adb pull /dev/block/mmcblk2p8 .

А можно и дампнуть и весь EMMC целиком через mmcblk2.

Как собрать (полурабочий) U-Boot

Собрал U-Boot по инструкциям:

$ sudo apt-get install gcc-aarch64-linux-gnu
$ git clone --depth=1 https://github.com/rockchip-linux/u-boot.git
$ git clone --depth=1 https://github.com/rockchip-linux/rkbin.git
$ cd u-boot

Заменяем в начале make.sh кросс-компилятор на системный, из пакета gcc-aarch64-linux-gnu: CROSS_COMPILE_ARM64=/usr/bin/aarch64-linux-gnu-

Можно запускать сборку через конфиг для RK3528:

$ ./make.sh rk3528

Получаем uboot.img, который можно прошить на устройство. В кирпич не превратилось, так как download режим работает (чем можно восстановить старый U-Boot).

Вот только Андроид перестал загружаться, дальше логотипа H96 MAX (выводится самим U-Boot) не идёт. Значит в билде U-Boot что-то подкручивали под конкретное устройство или Андроид. Тем не менее, еще один способ получить U-Boot с чтением без ограничений - перед сборкой пропатчив функцию rkusb_read_sector (при запуске с карты памяти - вы ничем не рискуете).

Продолжение следует?

Так как я хочу запустить Линукс не удаляя Андроид, то сделать это можно только через USB. А тут, в U-Boot использованном на устройстве, выяснилась еще одна проблема, он собран без дефайна CONFIG_ROCKCHIP_USB_BOOT, что вызывает данную функцию в board_late_init():

#ifdef CONFIG_ROCKCHIP_USB_BOOT
	boot_from_udisk();
#endif

Без этого вызова флэшки подключенные к USB - не рассматриваются как загрузочные, а разъёма для карт памяти не предусмотрено... Поэтому брать подобные устройства без MicroSD слота не рекомендую. Любая ошибка - и устройство превратится в кирпич, говорят Rockchip нельзя окирпичить - но такой можно. Если что-то получится, то напишу следующую статью, не получится - не напишу.

Еще один недостаток данного устройства - невозможно вставить толстые флэшки без удлинителя/разветвителя, мешает HDMI кабель подключенный рядом.

P.S.: Кажется я нашел кого этот TV-бокс копирует... та-да-да, Xiaomi Mi Box 4! Китайцы начали копировать сами себя.

Комментарии (28)


  1. Javian
    10.10.2023 08:51

    ОЗУ/ПЗУ: 2/16, 4/32, 4/64

    По маркировке чипа не нашел что там установлено. Честный объем показывает или выдают 8 Гб флеш за 64?


    На плате видны контакты (возле ИК-приемника) — наверное консоль, через которую можно будет попытаться восстановить в случае окирпичивания.


    1. jpegqs Автор
      10.10.2023 08:51

      А как проверить, честные или не честные? Андроид в разделах показывает общий размер в килобайтах "61071360 mmcblk2" что 62.5 десятичных гигабайта и 58.2 двоичных.

      Маркировка EMMC чипа:

      SEC 719
      B041
      KLMCG2KEIM

      ОЗУ с разными номерами после SEC:

      SEC (410|428|519|537) BYK0
      K4B4G0446D

      Чипы памяти из разных партий что-ли? Всё Самсунговское.

      Таки DDR3, а в Device Tree название model = "Rockchip RK3528 EVB1 DDR4 V10 Board", но возможно DDR4 значит 4Гб памяти, а не тип.

      На плате видны контакты (возле ИК-приемника)

      Да, я тоже подумал что это UART. Только такие мелкие, мне припаять будет сложно, редко пайкой занимаюсь.


      1. Javian
        10.10.2023 08:51
        +1

        Вот не гуглится такая маркировка. Выдает поиск такой — на 4/64 KLMCG2KETM-B041.
        На 4pda попадалась маркировка этих чипов — может найду.


        Любят в дешевых ТВ боксах (например Q96 mini) ставить 8 Гб, которые видятся системой как 64. Никакой софт не устанавливается, помогает оживить такое чудо только установка microSD карты и расширение памяти на нее.


        1. jpegqs Автор
          10.10.2023 08:51

          Может это и правда T, а не I, просто там грязь или царапина на чипе, что тяжело разобрать.


      1. Javian
        10.10.2023 08:51
        +1

        Чтобы не паять можно сделать разъем из подпружиненных иголок. На aliexpress "тестовый зонд электронная пружина".



        1. jpegqs Автор
          10.10.2023 08:51
          +1

          А я приметил разъёмы с шагом на 1.25-1.5мм, наверное такой можно даже не припаивать, а просто воткнуть - и будет кое-как держаться.


          1. 104u
            10.10.2023 08:51
            +2

            Можно и просто иголки от шприцов воткнуть, надо-то всего 3 штуки :) Я подпаивался к подобному разъёму в IP камере (такой же шаг, только контактов 4) — был UART, логи шли, что-то в uboot можно было ковырять, если память не изменяет


            1. NutsUnderline
              10.10.2023 08:51
              +1

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


          1. NutsUnderline
            10.10.2023 08:51

            именно что кой-как, для прошивки может быть черевато. Но вообще мне на ум пришли в голову так называемые клипсы, там Г-образные контакты подпружиненые, применяются для подключения логических анализаторов. Но ими удобно пользоваться когда отверстия с краю. а с точки зрения контакта - тоже не идеально.


      1. VT100
        10.10.2023 08:51
        +2

        KLMCG2KEIM

        Теоретически (по крайней мере в маркировке NAND-Flash производства Samsung):
        8 — 8 ГБит;
        A — 16 ГБит;
        B — 32 ГБит;
        C — 64 ГБит.


  1. zabanen2
    10.10.2023 08:51
    +1

    не получится - не напишу

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


    1. jpegqs Автор
      10.10.2023 08:51

      Я уже придумал как вставить в прошивку отсутствующую функцию boot_from_udisk(), но пока боюсь пробовать, много изменений, как бы не окирпичить бокс такими хаками U-Boot.

      Можно собрать из исходников свой U-Boot, но тут шанс окирпичить еще выше, у меня нет бесконечного количество попыток, как было бы, если был разъём для карты памяти.

      Припаивать UART к таким микроскопическим контактам - тоже сложная задача, для меня.


  1. jpegqs Автор
    10.10.2023 08:51

    Что имел в виду под "подозрительно дешевый": на данный момент можно найти за 2 тысячи на Али, что неплохо для нового чипа с 4ГБ ОЗУ. Перекупщики за три продают. Когда заказывал, то забыл проверить - есть ли разъём для карт памяти, я считал это опция по умолчанию, которая должна быть на любых устройствах. Что лишь один USB - не настолько страшно.


  1. SergeyNovak
    10.10.2023 08:51
    +2

    Отличный пост. Зашел в репу rkflashtool чтобы проверить как дела с описанным ID сейчас, а там уже, что не может не радовать:

    Add RK3528 chip
    #17 opened 18 minutes ago by lemenkov

    Очень удивился зачем такие сложности, если можно через консоль u-boot загрузить дамп в память и записать на MMC/USB. А потом вспомнил, что большинство людей как огня боятся подпаять три кабеля. Хотя особо ровных рук тут и не нужно, но нужно посмотреть как подобрать паяльник (который нужен дома не меньше отвертки), нормальное жало, припой, флюс и температуру.

    Если же стоковый юбут не дает слить нормально весь дамп, то можно взять бут от Armbian/Elec/e.t.c. под эту платформу и запустить его даже не меняя оригинал в прошивке, как я описывал в своем посте:
    https://habr.com/ru/articles/765280/

    И по поводу кирпича. Изучая скрипты u-boot, видел что ему все равно откуда грузиться что с usb, что с mmc. Да и раскирпичить не сложно, но нужно найти годную прошивку и, главное, точку на плате, замкнув которую на землю можно перевести в boot режим.


    1. jpegqs Автор
      10.10.2023 08:51

      можно взять бут от Armbian/Elec/e.t.c

      Под этот чип пока что нет готового бута.

      Изучая скрипты u-boot, видел что ему все равно откуда грузиться что с usb, что с mmc.

      Не уверен в последовательности, сначала должна грузиться карта - но разъёма на этом устройстве нет. Потом EMMC, с usb грузится через u-boot на EMMC (и отключен в билде на этом устройстве), если я его испорчу - то будет кирпич. download режим реализуется через этот u-boot.

      точку на плате, замкнув которую на землю можно перевести в boot режим

      Ну это особый скилл нужно чтобы её найти, пишут что легко найти если EMMC чип с ножками, но тут BGA.


      1. NutsUnderline
        10.10.2023 08:51

        я думал что testpoint это отдельный вход на микросхеме. и если этот пин активирует встроенный rom то его не убить программно

        а в случае чипов памяти - перемыкают сигналы чтобы выглядело что этих чипов как бы нет


        1. NutsUnderline
          10.10.2023 08:51

          был неправ насчет testpin похоже нет отдельного пина


    1. jpegqs Автор
      10.10.2023 08:51

      Чисто технически - девайс не окирпичен, если железо не повреждено, например чип не перегорел. Но есть вещи, решить которые будет уже слишком тяжело для многих людей. Например, мне легче сделать сложный хак прошивки - чем припаять три тонюсеньких проводка. Тем более, что это не решение - при каждом запуске загружать USB через команды на UART. Хотя помогло бы с отладкой.


  1. qq337043613
    10.10.2023 08:51

    1. jpegqs Автор
      10.10.2023 08:51

      С разъёмом для карты памяти найти несложно, это большинство. Это мне не повезло выбрать клон Mi Box 4, из которого скопировали и отсутствие разъёма для карты памяти.


    1. NutsUnderline
      10.10.2023 08:51
      +1

      у меня у одного логин таобао просит? Уважаемый продавец китайских боксов, нам затруднительно покупать Ваши товары на таобао.


  1. jpegqs Автор
    10.10.2023 08:51
    +1

    Добавил инструкцию по сборке своего U-Boot, пока что мне ничем не помогло. Частично работает (download режим, в котором можно убрать ограничение), вот только Андроид не грузит.


    1. NutsUnderline
      10.10.2023 08:51
      +1

      так и ладно бы, главное, чтобы линукс загрузил


      1. jpegqs Автор
        10.10.2023 08:51
        +1

        Ни старый, ни собранный U-Boot - линукс с USB не грузят. В Armbian появилась опция на одно устройство на RK3528, я собрал образ. Где проблема - без логов не понять, ядро линукса явно не стартует. Заказал всяких приспособлений для UART, жду доставку, пока ничего сделать нельзя.

        В сборке U-Boot есть опция CONFIG_USB_TTY - консоль через USB, но она лишь в шести конфигах из ~600, не совсем понял что надо для правильной сборки - там еще несколько опций надо включить вместе с ней (CONFIG_USB_DEVICE и еще...), а эти опции похоже сделаны под конкретные устройства, не разобрался.


        1. NutsUnderline
          10.10.2023 08:51

          думаю там еще и .DTS допилить надо будет для этого


          1. jpegqs Автор
            10.10.2023 08:51
            +1

            А может и нет, я заметил в Armbian много готовых .dtb для RK3528, в том числе с таким же именем, что на устройстве у меня. Но содержимое там несколько другое, надо сравнивать и разбираться.


            1. NutsUnderline
              10.10.2023 08:51

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


              1. jpegqs Автор
                10.10.2023 08:51
                +1

                rk3528-demo1-lp4-v10.dtb
                rk3528-demo4-ddr4-v10.dtb
                rk3528-demo4-ddr4-v10-linux.dtb
                rk3528-demo6-ddr3-v10.dtb
                rk3528-evb1-ddr4-v10.dtb
                rk3528-evb1-ddr4-v10-linux.dtb
                rk3528-evb1-ddr4-v10-spi-nand-linux.dtb
                rk3528-evb2-ddr3-v10.dtb
                rk3528-evb3-lp4x-v10.dtb
                rk3528-evb4-ddr4-v10.dtb
                rk3528-hinlink-h28k.dtb
                rk3528-iotest-lp3-v10.dtb

                "Hinlink H28K" - это устройство для которого сделали в Armbian конфиг для сборки. Причём не TV-box, а одноплатный компьютер (подвида мини-роутеров) вроде NanoPi (которые выглядит очень похоже, половина моделей на Rockchip). У Orange Pi есть модель R1 Plus того же формата.

                Судя по названиям - остальные .dtb для плат для разработчиков (evb должно означать Evaluation Board), и демонстрационных/тестовых.