Добавить в корзинуПозвонить
Найти в Дзене
Мастерская Chipmaster.BY

Bos-mini A8 продолжение "балета". Результат не столь очевиден и перспектива туманна...

Начало ремонта положено в статье "Bos-mini A8 невероятно тормозит", где была рассмотрена причина медленной работы магнитолы. Проблема как и ожидалось кроется в памяти устройства и её мне необходимо заменить. Однако чип хоть и определяется нормально, но читается крайне медленно. В итоге "слив" данных занял немногим более 11 часов. Откровенно говоря я думал будет хуже. Полученный дамп я решил хотя бы проверить с помощью R-Linux на корректность. Всё это в любом случае условно, но лучше чем ничего. Должен заметить что и сама программа для работы с EMMC вполне нормально разобрала все разделы и показала заголовки, никаких ошибок в файловой таблице вроде как не нашла. Хорошо, но я решил ещё немного перестраховаться, именно поэтому решил дополнительно "скормить" дамп программе R-Linux. Можно обратить внимание на нормальную структуру разделов. Затем я решил открыть дополнительно пользовательский раздел, как найболее часто подверженный разрушению и ошибкам. Здесь тоже всё в порядке, видны все фа

Начало ремонта положено в статье "Bos-mini A8 невероятно тормозит", где была рассмотрена причина медленной работы магнитолы. Проблема как и ожидалось кроется в памяти устройства и её мне необходимо заменить. Однако чип хоть и определяется нормально, но читается крайне медленно. В итоге "слив" данных занял немногим более 11 часов. Откровенно говоря я думал будет хуже.

Дамп сливался 11 с половиной часов. Неплохо на самом деле.
Дамп сливался 11 с половиной часов. Неплохо на самом деле.

Полученный дамп я решил хотя бы проверить с помощью R-Linux на корректность. Всё это в любом случае условно, но лучше чем ничего. Должен заметить что и сама программа для работы с EMMC вполне нормально разобрала все разделы и показала заголовки, никаких ошибок в файловой таблице вроде как не нашла. Хорошо, но я решил ещё немного перестраховаться, именно поэтому решил дополнительно "скормить" дамп программе R-Linux.

Структура файловой системы
Структура файловой системы

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

Директории раздела Userdata
Директории раздела Userdata

Здесь тоже всё в порядке, видны все файлы и папки, так что структура думаю в порядке и дамп слился условно корректно. Теперь дело осталось за прошивкой нового чипа и установкой его на плату магнитолы. С этого места для меня начинаются непонятки.

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

Порылся я значит по сусекам и оказалось, что микросхемы памяти необходимого объема в 64Гб у меня в наличии нет, есть лишь 128Гб чип от Sandisk. Меня это не остановило и я решил использовать его. Предварительно убедившись что процессор Unisoc Tiger T610 (UMS512) (точнее SOC) должен и может с ним корректно работать, я без всякой опаски запрограммировал EMMC и запаял её на положенное место.

Подготовка платы
Подготовка платы
Пайка микросхемы Sandisk ёмкостью 128Гб
Пайка микросхемы Sandisk ёмкостью 128Гб

После чего подал питание на плату и убедился что магнитола не запускается. Проверки питания и прочего не нашли никаких проблем и я решил отыскать точки подключения отладчика UART. И вот теперь самое интересное, для меня информация полученная в консоли отладчика вызвала больше вопросов, чем я ожидал получить ответов.

######Старт логирования######

UUUUUERS

ROM

RBS

SHARKL5pro ddr init...

vref_adj_p0x00000050 0x00000050

ddr target freq:0x00000400 MHz

ddr target freq:0x00000400 MHz

bist test is pass!!!

ddr init end pass!!!

chip id : 0x6B4C3550 0x53686172 0x00000003

pmic id : 0x0000B000 0x00002730

option 1 : 0x00000000

option 2 : 0x00000001

option 3 : 0x00000000

option 4 : 0x00000000

option 5 : 0x00000001

option 6 : 0x00000001

NOTICE: BL31: v1.4-f529dd39(debug)

NOTICE: BL31: Built : 16:57:51, Oct 23 2020

U-Boot 2015.07-00032-ge58e1746d9 (Jul 03 2024 - 22:11:14 +0800)SHARKL5PRO

U-Boot code: 9F000000 -> 9F0F7F88 BSS: -> 9F6B8000

I2C: i2c0, sprd_i2c_init() freq=100000

ready

dram_init(): dram cs0 size 80000000

dram cs1 size 7ffff000

monitor len: 006B8000

ramsize: 20000000

TLB table from 9fff0000 to 9fff1000

Top of RAM usable for U-Boot at: 9fff0000

Reserving 7176k for malloc() at: 9f8ee000

Reserving 72 Bytes for Board Info at: 9f8edfb8

Reserving 320 Bytes for Global Data at: 9f8ede78

Reserving 6240 Bytes for FDT at: 9f8ec618

New Stack Pointer is: 9f8ec610

RAM Configuration:

Bank #0: 80000000 512 MiB

Bank #1: 180000000 512 MiB

relocation Offset is: 00000000

log base 0000000092400000

monitor flash len: 000EAB88

WARNING in /home/autobuild/develop/os_auto_build/a007_10/bsp/bootloader/u-boot15/drivers/misc/adi.c line 324

pmic_misc_init(): ue1 and/or value2 are

memory addresses (*)

setex_FLAG:0x70100000

2 are

memory addresses (*)

setex_FLAG:0x0

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x4

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x14

sprd_pmic_efuse_read(): specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0xe

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x4

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x14

sprd_pmic_efuse_read(): specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0xe

sprd_get_chipid(): chip id = 0x0, VID = 0x3

regu_ldo 000000009f0def70 (vddrf1v25) 1245 = 900 +345mv (trim=23 step=15000uv)

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x4

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x14

sprd_pmic_efuse_read(): specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x13

sprd_pmic_efuse_read_bits(): be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x130

sprd_get_adc_small_scale_cal(): ror parsing config file

sprd_get_adc_small_scale_cal(): d to get and boot from syslinux filessprd_get_adc_small_scale_cal(): om syslinux filessprd_small_scale_adc_efuse_get(): p] <interface> <dev[:part]> <ext2|fat|any> [addr] [filename]

- load and parse syslinux menu file 'filename' from ext2, fat

or any filesystem on 'dev' on 'interface' to address 'addr'pmic_adc_Init(): ddr] [filename]

- load and parse syslinux menu file 'filename' from ext2, fat

or any filesystem on 'dev' on 'interface' to address 'addr'pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x4

pmic_efuse_wait_clear(): name [*]value1 <op> [*]value2

- set environment variable 'name' to the result of the evaluated

expression specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x14

sprd_pmic_efuse_read(): specified by <op>. <op> can be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x12

sprd_pmic_efuse_read_bits(): be &, |, ^, +, -, *, /, %

size argument is only meaningful if value1 and/or value2 are

memory addresses (*)

setex_FLAG:0x120

sprd_get_adc_bat_cal(): ror parsing config file

sprd_bat_scale_adc_efuse_get(): rse syslinux menu file 'filename' from ext2, fat

or any filesystem on 'dev' on 'interface' to address 'addr'pmic_adc_Init(): , fat

or any filesystem on 'dev' on 'interface' to address 'addr'[LED] init led]Now running in RAM - U-Boot at: 9f000000

using memory 0x9f8ee000-0x9fff0000 for malloc()

board_mmc_initialize(): @в–’jв–’в–’Rв–’sprd_host_init(): mmc ldo_core:vddemmccore, ldo_io:vddgen0

sprd_sdhci_init: host version: 4

sprd_host_init(): sprd_host_init return 0

mmc_set_bus_width(): mmc_set_bus_width width=1

sdhci_send_command: ret = -1, interrupt status: 0x18000

sdhci_send_command interrupt status: 0x18001, CMD8, delay: 0x0

sdhci_send_command: ret = -1, interrupt status: 0x18000

sdhci_send_command interrupt status: 0x18001, CMD55, delay: 0x0

mmc_startup(): entry

csd register(128 bit): d00f0032 8f5903ff ffffffef 8a404000

mmc_startup(): mmc->version =0x40000000

mmc_startup(): mmc_startup mmc->version=0x40040000

mmc_send_ext_csd(): mmc_send_ext_csd=0

mmc_startup(): mmc_startup mmc->version2=0x40040000

mmc_startup(): mmc->part_num = 0, erase_grp_size = 0x800

mmc_startup(): RST_n signal(0x1) has already be permanently *mmc_set_capacity(): capacity -user: 0x1d1ec00000, -boot: 0x400000, -rpmb: 0x1000000

mmc_send_ext_csd(): mmc_send_ext_csd=0

mmc_send_ext_csd(): mmc_send_ext_csd=0

mmc_change_freq(): в–’JH

в–’в–’в–’,в–’в–’dв–’Jв–’

J+mmc_startup():

J+mmc_set_bus_width(): mmc_set_bus_width width=8

mmc_send_ext_csd(): mmc_send_ext_csd=0

mmc_startup():

*в–’,4в–’J,Xв–’

Jh

D

в–’в–’@в–’в–’Iв–’Rв–’fdt_chosen_bootargs_replace(): fdt_chosen_bootargs_replace start!Error!fdt_chosen_bootargs_replace(): fdt_chosen_bootargs_replace: FDT_ERR_BADMAGIC

Error!(): set loglevel=7 failed!

/home/autobuild/develop/os_auto_build/a007_10/bsp/bootloader/u-boot15/common/dlmalloc.c:1666: do_check_chunk: Assertion `!chunk_is_mmapped(p)' failed.

resetting ...

######Конец логирования######

Я решил текстом будет визуальней, к тому же можно скопировать при желании.

Судя по логу, выходит что процессор читает данные с EMMC и загружает U-Boot, а далее начинается иницализация оборудования. Всё вроде бы даже неплохо, но в какой-то момент процесс обрывает ошибка "FDT_ERR_BADMAGIC" потом ещё какая-то и процессор уходит в перезагрузку. Итак бутлуп идёт по кольцу до бесконечности, хотя может я маловато ждал, вдруг ему надоест и он плюнет на ошибки и загрузит ПО магнитолы!?

Эта ситуация породила во мне вопрос: может быть загрузчик привязан к конкретному чипу или он защищён с помощью ключей используя специальную зону памяти RPMB?

Справедливости ради надо отметить, что программа, с которой я вполне неплохо справляюсь с программированием EMMC на некоторых аппаратах без защиты и блокировок, не может работать с зоной RPMB и даже не может считать её статус, т.е. выяснить используется такой механизм или нет мне попросту нечем, да и никогда не занимался такими вопросами.

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

В любом случае дополнение следует...