О чем тут написано
У меня есть TV-Box на базе Amlogic S905X3, на котором я хочу запустить Linux (без DE, в качестве микросервера).
Вот свежайшая версия: https://forum.armbian.com/topic/12162-single-armbian-image-for-rk-aml-aw-aarch64-armv8/ хотя написано, что S905X3 не поддерживается…
Вот тут люди обсуждают запуск armbian - https://forum.armbian.com/topic/12348-armbian-for-amlogic-s905x3/
Вот сборка какого-то ядра: https://github.com/superna9999/meta-meson
Вот тут проект ядра для всех чипов Amlogic Meson (куда входит и S905X3): http://linux-meson.com/doku.php
Вот процедура установки Armbian на TV Box на базе Amlogic: https://www.ondroid.net/armbian-os-installation/ (вот что делать с файлами драйверов dtb: https://www.ondroid.net/armbian-os-uenv-ini-and-extlinux-conf/)
Вот тут написано как можно извлечь файл дерева устройств (dtb) из текущей прошивки: https://cnx-software.ru/2015/12/07/how-to-run-headless-linux-on-amlogic-s905-devices-such-as-mini-mx-or-k1-plus/
Если коробка не загружается сразу с карты, то нужно делать так: https://www.ondroid.net/armbian-os-troubleshootingboot/
Раскирпичивание убитых коробок: https://www.ondroid.net/armbian-os-bricked-device-recovery/
Бекап eMMC: https://www.ondroid.net/armbian-os-backing-up-emmc-nand-via-cli/
О U-Boot. Сборка и прочее на примере banana pi : https://m.habr.com/ru/post/264259/
U-Boot manual: https://www.denx.de/wiki/DULG/Manual
http://www.denx.de/wiki/view/DULG/UBoot
Создание Device Tree: https://www.raspberrypi.org/documentation/configuration/device-tree.md
Изменение объема памяти, резервируемого под gpu: тема на форуме, а вот а вот конкретный кусочек кода
Сборка образа Armbian для TV-Box HK1
Склонируем репозиторий:
git clone https://github.com/armbian/build.git
Сама плата HK1 естественно не поддерживается дистрибутивом, но построена на поддерживаемой платформе Amlogic S905X3 (meson-sm1).
Чип на моей платформе обозначается как meson-sm1. Чтобы собрать образ под этот чип над найти наиболее похожую плату из списка имеющихся. Для этого в директории, куда скачали репозиторий armbian выполняем:
grep meson-sm1 ./config/boards/ -r
На данный момент наиболее похоже на то что мне нужно выглядит файл odroidc4.conf.
Собираю Ubuntu 22.04:
./compile.sh docker BOARD=odroidc4 BRANCH=current RELEASE=jammy BUILD_MINIMAL=yes BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no
если при дефолтной ext4 возникают проблемы (как у меня), то можно собраться с f2fs в качестве рутовой системы:
./compile.sh docker BOARD=odroidc4 BRANCH=current RELEASE=jammy BUILD_MINIMAL=yes BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no ROOTFS_TYPE=f2fs FIXED_IMAGE_SIZE=32000
На моем ноуте с процессором Ryzen 4800H сборка в докере идет 47 минут (с учетом выкачивания всех зависимостей, канал 100Мбит/с), а после выкачивания зависимостей - 8 минут.
После того, как я подключился к консоли, дождался загрузки android'а, подключил флешку с файлом образа и выполнил:
dd if=/mnt/media_rw/8B32-FC48/Armbian_20.11.0-trunk_Odroidc4_focal_current_5.9.9_minimal.img of=/dev/block/mmcblk0 bs=1024k
Бокс ожидаемо окрипичился :))) с таким сообщением (среди прочих):
All ddr config failed...
Судя по всему это значит, что параметры инициализации памяти, которые есть в новом загрузчике не подошли к моей железке. Вот тут: https://github.com/3F/aml_s905_uboot я нашел как можно их взять из старого загрузчика и добавить в новый. План был такой - с помощью Amlogic USB Burning Tool я прошью старую прошивку, а дальше - выдеру старого бутлоадера параметры для инциализации памяти. НО это не понадобилось!!
Оказалось, кнопка Reset на моей коробке не работает (она в разъеме 3,5мм) и воспользоваться Amlogic USB Burning Tool я не смогу. После подключения коробки USB-шнурком A-A к ноуту и подаче питания при зажатой (предполагаемой) кнопкой Reset в настольной системе новое USB-устройство не появлялось, а в консоли всё тот же boot loop.
Я внимательно изучил печатную плату возле чипа флешки, а также на обратную исторону и увидел пару контактных площадок.
Терять было нечего - с помощью dd я залил на SD-карту в самое начало карты старый bootloader (слава богу я сохранил все разделы со старой прошивкой), вставил в коробку SD-карту, подал питание и замкнул контактные площадки на обратной от чипа флехи стороне платы отверткой.
Вместо таких сообщений в начале лога:
... Board ID = 1 Set cpu clk to 24M Set clk81 to 24M Use GP1_pll as DSU clk. DSU clk: 1200 Mhz CPU clk: 1200 MHz Set clk81 to 166.6M eMMC boot @ 0 sw8 s DDR driver_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:37 board id: 1 Load FIP HDR from eMMC, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0 fw parse done Load ddrfw from eMMC, src: 0x00060200, des: 0xfffd0000, size: 0x0000c000, part: 0 Load ddrfw from eMMC, src: 0x00038200, des: 0xfffd0000, size: 0x00004000, part: 0 ...
Я увидел такое:
... Board ID = 1 Set cpu clk to 24M Set clk81 to 24M Use GP1_pll as DSU clk. DSU clk: 1200 Mhz CPU clk: 1200 MHz Set clk81 to 166.6M DDR driver_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:37 board id: 1 Load FIP HDR from SD, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0 fw parse done Load ddrfw from SD, src: 0x00060200, des: 0xfffd0000, size: 0x0000c000, part: 0 Load ddrfw from SD, src: 0x00038200, des: 0xfffd0000, size: 0x00004000, part: 0 ...
Внезапно - она не нашла встроенный NAND-flash, но нашла опреативку, SD-карту и сначала загрузилась старым бутлоадером:
... U-Boot 2015.01 (Dec 14 2019 - 17:22:12) DRAM: 3.8 GiB Relocation Offset is: d6e50000 spi_post_bind(spifc): req_seq = 0 register usb cfg[0][1] = 00000000d7f3e528 NAND: get_sys_clk_rate_mtd() 290, clock setting 200! couldn`t found selected chip: 0 ready NAND device id: 0 0 0 0 0 0 No NAND device found!!! ... card in co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x182000 [mmc_startup] mmc refix success [mmc_init] mmc init success Device: SDIO Port B Manufacturer ID: 9f OEM: 5449 Name: Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 14.5 GiB mmc clock: 40000000 Bus Width: 4-bit ** Unrecognized filesystem type ** Net: dwmac.ff3f0000[KM]Error:f[keymanage_dts_parse]L307:not a fdt at 0x0000000001000000 MACADDR:02:00:00:16:1d:01(from chipid) CONFIG_AVB2: null Start read misc partition datas! Cannot find dev. amlmmc cmd <NULL> failed
Затем прошло что-то похожее на тестирование RAM, а потом - я увидел загрузку нового U-Boot:
... U-Boot 2020.04-armbian (Nov 21 2020 - 18:06:39 +0000) odroid-c4 Model: Hardkernel ODROID-C4 SoC: Amlogic Meson SM1 (Unknown) Revision 2b:c (10:2) DRAM: 3.8 GiB MMC: sd@ffe05000: 0, mmc@ffe07000: 1 In: serial Out: serial Err: serial Net: Warning: ethernet@ff3f0000 (eth0) using random MAC address - f6:fc:5c:62:17:95 eth0: ethernet@ff3f0000 ...
Эксперименты показали, что держать замкнутыми контакты нужно до момента появления строк:
cs0 DataBus test pass cs0 AddrBus test pass
А прд ними будет счетчик.
Затем - я извлек карту памяти и выключил-включил коробку - пошла загрузка с новым U-Boot со встроенной флеш-памяти и далее при включении коробки (без карты памяти) стабильно запускался новый U-Boot (что уже неплохо).
Дальше - я залил на карту пямяти собранный образ Armbian:
dd if=./output/images/Armbian_20.11.0-trunk_Odroidc4_focal_current_5.9.9_minimal.img of=/dev/sda bs=1M
вставил карту в коробку и включил. Началась загрузка с карты памяти. Сначала мне показалось, что ядро пока не стартует я видел только сообщение:
Starting kernel ...
и дальше пусто. В конфиге build/config/bootscripts/boot-odroid-c4.ini указано устройство консоли ttyS0, а должно быть наверное ttyAML0 Но, судя по тому что моргание светодиодов у коробки стало другим было похоже, что что-то там загружалось и через некоторое время увидел вот такое:
Starting kernel ... odroidc4 login: root (automatic login) ___ _ _ _ ____ _ _ / _ \ __| |_ __ ___ (_) __| | / ___| || | | | | |/ _` | '__/ _ \| |/ _` | | | | || |_ | |_| | (_| | | | (_) | | (_| | | |___|__ _| \___/ \__,_|_| \___/|_|\__,_| \____| |_| Welcome to Armbian 20.11.0-trunk Focal with Linux 5.9.9-meson64 No end-user support: built from trunk System load: 3% Up time: 0 min Memory usage: 3% of 3.67G IP: CPU temp: 33�°C Usage of /: 1% of 114G
и дальше - приглашение ввести новый пароль!! Система смогла нормально загрузиться с SD-карты!!!!!! Потом я выключил бокс, вытащил карту и система уже нормально загрузилась с внутреннего накопителя. Armbian сам себя установил. А отсутствие сообщений при загрузке ядра - это сокрее всего некорректные параметры запуска ядра.
К сожалению, в системе оказался не виден беспроводной модуль (наверное загружается не подходящий dtb).
Как прошить Armbian на HK1BOX
В итоге порядок установки Armbian на HK1BOX вышел такой:
- Подключился к консоли коробки, загрузил андроид и забекапил образы встроенной флехи целиком и разделов поотдельности. Нужен будет раздел bootloader.
- Собрал образ и скопировал файл образа (именно как файл) на SD-карту.
- Загрузился в дефолтный андроид, вставил SD-карту и залил файл образа с помощью dd на встроенную флешку.
- Вытащил SD-карту и перезагрузил коробку - она загрузилась с новым U-Boot и ушла в boot loop с ошибками инициализации памяти.
- Залил на SD-карту с помощью dd старый U-Boot bootloader, вставил карту в коробку и замкнул контактики под встроенной флешкой. Система стартанула с SD-карты со старым U-Boot и прописала во встроенную флеху (на которой уже новый U-Boot) параметры для инициализации памяти. Теперь система нормально стартует с новым U-Boot со встроенной флешки и способна загрузиться.
- Готово
- Чтобы заработал Wi-Fi обращаем внимание сюда
Немного осмелев и поняв, что убить коробку совсем не так уж просто я залил всю внутреннюю флеху нулями и повторил установку. Всё заработало.
Обновление Armbian
Тут описан НЕУДАЧНЫЙ опыт. Он привел к бутлупу, необходимости заливать образ через dd и замыкать тест-поинты на плате.
При попытке обновить штатными средствами Ubuntu с groovy до jammy я столкнулся с тем, что скрипты обновления отказываются обновлять уже неподдерживаеймый релиз (groovy).
Выход - пересобрать jammy и перезалить его.
Но я решил попытаться просто заменить файлики на файловой системе.
Итак:
- Заливаем с помощью dd на флешку новый Armbian
- Загружаем коробку (там старый Ubuntu groovy)
mount /dev/sda1 /mnt/USB/
cd /mnt/USB/
mount --bind /sys ./sys
mount --bind /dev ./dev
mount --bind /proc ./proc
swapoff -a
chroot /mnt/USB/ /bin/bash
- Монтируем старый корневой раздел, удаляем старые файлы и копируем новые:
mkdir /mnt/newroot mount /dev/mmcblk0p1 /mnt/newroot/ rm -Rf /mnt/newroot/* rsync -avHAXS --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /mnt/newroot/
- Теперь назачим рутом новый рут и обнлвим initamfs:
mount --bind /sys /mnt/newroot/sys
mount --bind /proc /mnt/newroot/proc
mount --bind /dev /mnt/newroot/dev
chroot /mnt/newroot/ /bin/bash
update-initramfs -u
sync
- ребутнемся
echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
В результате проделанных манипуляций - система отказалась грузиться со встроенной флехи (/dev/mmbblk1p1), но нормально грузится с USB-флешки. Загрузчик мы не меняли, но судя по строке в консоли:
Mainline bootargs: root=UUID=75e1723f-a20e-4cdd-afa0-ab27ff00c162 rootwait rootfstype=ext4 console=ttyAML0,115200 ...
где root=UUID=75e1723f-a20e-4cdd-afa0-ab27ff00c162 - это как раз UUID раздела на внешней флешке, а этот UUID прописан в /boot/armbianEnv.txt. То есть наверное нужно было проверить соответствет ли то что прописано в /boot/armbianEnv.txt тому что выдаст blkid
Проблемы
не загружается при отсоединенной последовательной консоли
U-Boot не загружает систему, если отключена консоль (кабель физически не подключен).
При подключении кабеля rs-232 в момент “зависания” там видно приглашение консоли U-Boot. Всё выглядит так, как если бы загрузка прервалась по нажатию клавиши.
При нажатии Enter в консоли U-Boot должна выполниться последняя команда, но там в последней команде обычно бывал какой-то мусор, причем довольно часто разный.
Я сделал вывод, что скорее всего консоль не притянута к +3.3 и “шумит” - то есть самопроизвольно льет всякий мусор в RX. Выход - в коробке между выводом V (3.3V) и RX припаять резистор 47-100кОм.
И это помогло. Теперь всё нормально загружается.
Не смог загрузить образ
Не смог загрузить образ, собранный вот так:
./compile.sh docker BOARD=odroidc4 BRANCH=current RELEASE=groovy BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no
Хотя вот такой вариант грузился норм:
./compile.sh docker BOARD=odroidc4 BRANCH=current RELEASE=focal BUILD_MINIMAL=yes BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no
Хотя имеет проблемы с работой systemd и других программ. Веротяно - дело в версии glibc или других библиотек. В итоге сейчас нормально заработал такой:
./compile.sh docker BOARD=odroidc4 BRANCH=current RELEASE=groovy BUILD_MINIMAL=yes BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no
Загрузка с sd-карты для переустановки системы
В скриптах загрузки U-Boot из Armbian обнаружил, что можно переключать загрузочные устройства - практически как в BIOS ПК.
Для того, чтобы стартануть с SD-карты нужно в консоли U-Boot выполнить:
mmc rescan mmc dev 0 mmc info
Убедиться, что под номером 0 видна SD-карта. И затем загрузиться с нее:
run bootcmd_mmc0
Предполагается, что на SD-карте будет образ, совместимый с текущими скриптами U-Boot.
fdt задан в U-Boot
После загрузки не заработал Wi-Fi. В логах видно, что загружается дефолтный файлик dtb - meson-sm1-khadas-vim3l.dtb, в котором, видимо, нет поддержки моего WiFi-адаптера HK5235F, однако эта поддержка точно есть в dtb для odroidc4. Судя по скриптам Armbian, этот файл можно переназначить, но у меня не вышло.
В параметрах U-Boot жестко приписан путь к dtb
fdtfile=amlogic/meson-sm1-odroid-c4.dtb
И на девайссе HK1BOX с этим dtb не заработал Wi-Fi. Я просто скопировал под этим именем dtb, с которым все работает, перезагрузился и Wi-Fi появился:
mv /boot/dtb/amlogic/meson-sm1-odroid-c4.dtb /boot/dtb/amlogic/meson-sm1-odroid-c4.dtb_bak cp /boot/dtb/amlogic/meson-sm1-khadas-vim3l.dtb /boot/dtb/amlogic/meson-sm1-odroid-c4.dtb reboot
попытка загрузиться с альтернативным dtb
Я скопировал хороший dtb (с которым все работает) и попытался подложить dtb, который извлек из прошивки.
mv /boot/dtb/amlogic/meson-sm1-odroid-c4.dtb /boot/dtb/amlogic/meson-sm1-odroid-c4.dtb_good cp /home/mike/hk1.dtb /boot/dtb/amlogic/meson-sm1-odroid-c4.dtb
В итоге - ядро грузиться отказалось. Чтобы исправить ситуацию - при загрузке жмем любую клавишу, чтобы попасть в shell U-Boot и дальше:
- переключаемся на загрузочную партицию:
mmc dev 1 mmc info mmc part mmc part 1
- задаем значение переменной, чтобы использовать нормальный dtb и грузимся:
env set fdtfile amlogic/meson-sm1-odroid-c4.dtb_good boot
Раскирпичивание
Специально ради эксперимента я залил нулями весь внутренний флеш.
Восстановить коробку удалось так:
- Заливаем на SD-карту старый бутлоадер. В самое начало. Это 4 Мб (8192 секторов).
- Вставляем карту и включаем коробку - она будет пытаться загрузиться со встроенного флеша, но не сможет. На ходу замыкаю контакты под встроенным флешем - он отключается и начинается загрузка U-Boot. Жму пробелы, чтобы попасть в консоль U-Boot.
- Когда загружен оригинальный U-boot можно извлечь SD-карту и залить на нее универсальный образ для Arm64, в котором ядро лежит на FAT, так как родной бутлоадер может грузить ядро с FAT. Образ берем, например, отсюда - https://forum.armbian.com/topic/12162-single-armbian-image-for-rk-aml-aw-aarch64-armv8/.
- После того, как залит универсальный образ для Arm64, нужно отредактировать его параметры загрузки в файлике uEnv.txt в корне первого BOOT-раздела. Если файлика uEnv.txt нет, то нужно его создать руками. В моем случае они должны быть такие:
LINUX=/zImage INITRD=/uInitrd # aml s9xxx FDT=/dtb/amlogic/meson-sm1-khadas-vim3l.dtb APPEND=root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0
Файл /dtb/amlogic/meson-sm1-khadas-vim3l.dtb может отсустствовать, или для вашей системы может быть другим - надо подбирать. Я нашел этот файлик в образе, собранном для odroidc4. Но, наверное, можно и взять тот, который был в составе прошивки Android.
- Вставляем SD-карту в коробку и в консоли выполняем шаги, необходимые для загрузки системы (задаем смещения по которым будут загружены ядро, initrd и файл fdt, загружаем их и стартуем ядро):
# Обновляем список mmc девайсов. mmc rescan #Смотрим какие девайсы есть у нас mmc list # Выбираем первое устройство (обычно это устройство, с которого загрузился U-Boot) mmc dev 0 # Убеждаемся что выбранное устройство - это карта памяти mmc info #Смотрим список разделов. mmc part # Загружаем систему setenv fdt_addr_r 0x1000000 setenv env_addr 0x10400000 setenv kernel_addr_r 0x11000000 setenv ramdisk_addr_r 0x13000000 fatload mmc 0 ${env_addr} uEnv.txt env import -t ${env_addr} ${filesize}; setenv bootargs ${APPEND}; fatload mmc 0 ${kernel_addr_r} ${LINUX} fatload mmc 0 ${ramdisk_addr_r} ${INITRD}; fatload mmc 0 ${fdt_addr_r} ${FDT} fdt addr ${fdt_addr_r} booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r};
То есть фактически грузим систему с SD-карты.
- Дальше я просто брал USB-флеху (нормальную отформатированную), копировал на нее файл img с образом только что собранной системы и заливал этот образ (вернее можно залить первые 4Мб, в которых лежит U-Boot) на внутренний флеш.
- Теперь уже занакомая ситуация. На внутреннем флеше есть новый U-Boot, но он не может инициализировать DDR-память. Я заливаю свежесобранный образ снова на SD-карту и следом заливаю на него U-Boot на стоковый.
- Вставляю карту, стартую коробку - она уходит в bootloop, замыкаю флеш - она грузится с SD-карты, инициализирует память, настройки DDR попадают на внутренний флеш и загружается новый Armbian с SD-карты. Новый Armbian сам заливает себя на внутренний флеш.
НЕАКТУАЛЬНОЕ
Всё что написано ниже - заметки о моих первых попытках что-то залить в TV-Box HK1. Оно не очень уже актуально, но может кому-то поможет.
Как загружаться
- Заливаем на sd-карту с помощью dd.
- На компе монтируем раздел первый (boot).
- Открываем файлик uEnv.txt. В нем по-дефолту незакомментирвоаны строки rk-3399 - комментируем их и раскомментируем строки aml s9xxx. APPEND - оставляем как есть, а FDT - прописываем
FDT=/dtb/amlogic/meson-sm1-khadas-vim3l.dtb
В итоге файлик получается такой (если убрать все закоментированные строки:
LINUX=/zImage INITRD=/uInitrd FDT=/dtb/amlogic/meson-sm1-khadas-vim3l.dtb APPEND=root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0
- Подключаем отладочную консоль. Запускаем железку и в моменты загрузки - жмем пробелыыыы - консоль выдаст приглашение для ввода команд uBoot. ЗАгружемся с SD командой
run recovery_from_sdcard;
На самом деле это скрипт. Фактически, если отбрсить всякие if-then он делает следующее:
mmc rescan setenv fdt_addr_r 0x1000000 setenv env_addr 0x10400000 setenv kernel_addr_r 0x11000000 setenv ramdisk_addr_r 0x13000000 fatload mmc 0 ${env_addr} uEnv.txt env import -t ${env_addr} ${filesize}; setenv bootargs ${APPEND}; fatload mmc 0 ${kernel_addr_r} ${LINUX} fatload mmc 0 ${ramdisk_addr_r} ${INITRD}; fatload mmc 0 ${fdt_addr_r} ${FDT} fdt addr ${fdt_addr_r} booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r};
разобратьэто все, можно если выполнить команду
printenv
и начать копать.
Загрузка начинается с выпонения того, что написано в bootcmd. Чтобы printenv выводил длинные строки целиком необходимо в терминале включить wrapping в minicom это можно сделать нажав Ctrl-A, затем Z и затем W.
dtb
Нормально подошел meson-sm1-khadas-vim3l.dtb с образа Armbian_19.11.5_Arm-64_eoan_current_5.5.0-rc6_20200127.img
А вот результаты тестирования некоторых других dtb:
meson-g12b-a311d-khadas-vim3.dtb - 3288MB, сеть есть, ВИДЕН mmcblk2 (Disk /dev/mmcblk2: 116.49 GiB). meson-g12b-s922x-khadas-vim3.dtb - 3288MB, сеть есть, виден mmcblk2 (Disk /dev/mmcblk2: 116.49 GiB) meson-sm1-khadas-vim3l.dtb 3288MB, сеть есть, виден mmcblk2 (Disk /dev/mmcblk2: 116.49 GiB) meson-g12b-odroid-n2.dtb - сеть только провод, ВИДЕН mmcblk0 (Disk /dev/mmcblk0: 116.49 GiB) meson-g12a-u200.dtb - 3288MB, сети нет вообще. Видны mmcblk0 (SD-карта) и mmcblk1 (Disk /dev/mmcblk1: 116.49 GiB) meson-g12a-gt1-mini-a.dtb - 3256MB, сеть есть, не виден внутренний флеш meson-g12a-sei510.dtb - 3256, сеть есть только WiFi, ВИДЕН mmcblk2, но не видно разделов на нем meson-g12a-x96-max-rmii.dtb - 3288MB, сеть есть только WiFi, не виден внутренний флеш meson-g12a-x96-max.dtb - 3256MB, сеть есть, не виден внутренний флеш meson-g12b-gtking.dtb - 3288MB, сеть есть, не виден внутренний флеш meson-g12b-ugoos-am6.dtb - 3288MB, сеть есть, не виден внутренний флеш
LINUX=/zImage INITRD=/uInitrd FDT=/dtb.img APPEND=root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0
Чтобы после установки на emmc логи systemd сыпались в консоль нужно дописать в строку запуска ядра в файлике /boot/uEnv.txt параметр systemd.log_target=console:
APPEND=root=LABEL=ROOT_EMMC rootflags=data=writeback rw console=ttyAML0,115200n8 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 systemd.log_target=console
systemctl disable serial-getty@ttyS2.service
HK1 Box
Отказалась загружаться с образа Armbian_19.11.3_Aml-g12_eoan_legacy_5.3.0_20191126.img как с SD-карты, так и с двух портов USB. Это значит, что для того, чтобы загрузить ее с внешнего носителя нужно изменить настройки загрузчика U-Boot.
Поэтому - следуем мануалам armbian. Вставляю карточку с armbian, загружаюсь в Android , иду в Apps, нахожу там Update, кликаю UpdateLocale - Select, выбираю BOOT/aml_autoscript.zip, и кликаю Update. Система перезагружается и я вижу меню bootloader'а и ошибку:
Error! Supported API: 3 charge_status 2, charged 1, status: SUCCESS, capacity 100 Finding update package... Opening update package... Verifying update package... E:footer is wrong Update package verification took 0.0 s (result 1). E:signature verification failed E:error: 21 Installation Aborted.
Этот скрипт должен был скорректировать параметры загрузки U-Boot и позволить загрузиться с sd-карты, однако, судя по всему, установка неподписанных обновлений запрещена, поэтому нужно подключиться к консоли.
Подключение к отладочной консоли RS-232
На плате оказались “пятачки” с обозначениями 'V R T G' - видимо консоль. Я откопал старинный провод USB-COM на базе pl2303, с помощью которого я когда-то подключал Siemens ME45 к компу для выхода в интернет, припаял к плате TV-Box'а три проводочка - G (земля), R и T (прием и передача) и запустил minicom:
sudo apt-get install -y minicom sudo minicom -b 115200 -D /dev/ttyUSB0
При включении TV-Box'а в консоли minicom побежали сообщения.
system cmd 1. SM1:BL:511f6b:81ca2f;FEAT:A0F83180:20282000;POC:F;RCY:0;EMMC:0;READ:0;0.0;CHK:0; bl2_stage_init 0x01 bl2_stage_init 0x81 hw id: 0x0001 - pwm id 0x00 bl2_stage_init 0xc0 bl2_stage_init 0x02 L0:00000000 L1:00000703 L2:00008067 L3:15000020 S1:00000000 B2:20282000 B1:a0f83180 TE: 163073 BL2 Built : 20:29:41, Jun 18 2019. g12a ga659aac - luan.yuan@droid15-sz Board ID = 1 Set cpu clk to 24M Set clk81 to 24M Use GP1_pll as DSU clk. DSU clk: 1200 Mhz CPU clk: 1200 MHz Set clk81 to 166.6M eMMC boot @ 0 sw8 s DDR driver_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:37 board id: 1 Load FIP HDR from eMMC, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0 fw parse done Load ddrfw from eMMC, src: 0x00060200, des: 0xfffd0000, size: 0x0000c000, part: 0 Load ddrfw from eMMC, src: 0x00038200, des: 0xfffd0000, size: 0x00004000, part: 0 PIEI prepare done fastboot data load 00000000 emmc switch 1 ok ddr saved addr:00016000 Load ddr parameter from eMMC, src: 0x02c00000, des: 0xfffd0000, size: 0x00001000, part: 0 00000000 emmc switch 0 ok fastboot data verify verify result: 0 enable_fast_boot dmc_margin_rx==12 dmc_margin_tx==12 steps DDR3 probe ddr clk to 672MHz Load ddrfw from eMMC, src: 0x0002c200, des: 0xfffd0000, size: 0x0000c000, part: 0 dmc_version 0001 Check phy result INFO : End of initialization INFO : Training has run successfully! aml_ddr_fw_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:43 DDR cs0 size: 3928MB DDR cs1 size: 0MB DMC_DDR_CTRL: 0000002dDDR size: 3928MB cs0 DataBus test pass cs0 AddrBus test pass non-sec scramble use zero key ddr scramble enabled 100bdlr_step_size ps== 483 result report boot times 2Enable ddr reg access 00000000 emmc switch 3 ok BL2: rpmb counter: 0x00002374 00000000 emmc switch 0 ok Load FIP HDR from eMMC, src: 0x00010200, des: 0x01700000, size: 0x00004000, part: 0 Load BL3X from eMMC, src: 0x00078200, des: 0x01768000, size: 0x000d0000, part: 0 bl2z: ptr: 05129330, size: 00001e40 0.0;M3 CHK:0;cm4_sp_mode 0 MVN_1=0x00000000 MVN_2=0x00000000 [Image: g12a_v1.1.3389-92241b5 2019-07-02 17:22:49 luan.yuan@droid15-sz] OPS=0x10 ring efuse init 2b 0c 10 00 01 1d 16 00 00 0c 35 30 43 57 50 50 [0.679256 Inits done] secure task start! high task start! low task start! run into bl31 NOTICE: BL31: v1.3(release):4fc40b1 NOTICE: BL31: Built : 15:57:33, May 22 2019 NOTICE: BL31: G12A normal boot! NOTICE: BL31: BL33 decompress pass ERROR: Error initializing runtime service opteed_fast U-Boot 2015.01 (Dec 14 2019 - 17:22:12) DRAM: 3.8 GiB Relocation Offset is: d6e50000 spi_post_bind(spifc): req_seq = 0 register usb cfg[0][1] = 00000000d7f3e528 NAND: get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 MMC: aml_priv->desc_buf = 0x00000000d3e40a70 aml_priv->desc_buf = 0x00000000d3e42db0 SDIO Port B: 0, SDIO Port C: 1 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 emmc/sd response timeout, cmd8, status=0x1ff2800 emmc/sd response timeout, cmd55, status=0x1ff2800 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x162000 [mmc_startup] mmc refix success init_part() 297: PART_TYPE_AML [mmc_init] mmc init success Amlogic multi-dtb tool Single dtb detected start dts,buffer=00000000d3e45620,dt_addr=00000000d3e45620 get_partition_from_dts() 91: ret 0 Amlogic multi-dtb tool Single dtb detected parts: 17 00: logo 0000000000800000 1 01: recovery 0000000001800000 1 02: misc 0000000000800000 1 03: dtbo 0000000000800000 1 04: cri_data 0000000000800000 2 05: param 0000000001000000 2 06: boot 0000000001000000 1 set has_boot_slot = 0 07: rsv 0000000001000000 1 08: metadata 0000000001000000 1 09: vbmeta 0000000000200000 1 10: tee 0000000002000000 1 11: vendor 0000000014000000 1 12: odm 0000000008000000 1 13: system 0000000074000000 1 14: product 0000000008000000 1 15: cache 0000000046000000 2 16: data ffffffffffffffff 4 init_part() 297: PART_TYPE_AML eMMC/TSD partition table have been checked OK! crc32_s:0x1577dad == storage crc_pattern:0x1577dad!!! crc32_s:0xee152b83 == storage crc_pattern:0xee152b83!!! crc32_s:0x79f50f07 == storage crc_pattern:0x79f50f07!!! mmc env offset: 0x4d400000 In: serial Out: serial Err: serial reboot_mode=normal [store]To run cmd[emmc dtb_read 0x1000000 0x40000] _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 dtb_read()-3623: total valid 2 update_old_dtb()-3604: do nothing Amlogic multi-dtb tool Single dtb detected amlkey_init() enter! [EFUSE_MSG]keynum is 4 vpu: clk_level in dts: 7 vpu: vpu_power_on vpu: set clk: 666667000Hz, readback: 666666667Hz(0x100) vpu: vpu_module_init_config vpp: vpp_init vpp: vpp osd2 matrix rgb2yuv.............. cvbs: cpuid:0x2b Net: dwmac.ff3f0000amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 CONFIG_AVB2: null Start read misc partition datas! info->magic = info->version_major = 1 info->version_minor = 0 info->slots[0].priority = 15 info->slots[0].tries_remaining = 7 info->slots[0].successful_boot = 0 info->slots[1].priority = 14 info->slots[1].tries_remaining = 7 info->slots[1].successful_boot = 0 info->crc32 = -1075449479 active slot = 0 wipe_data=successful wipe_cache=successful upgrade_step=2 reboot_mode:::: normal amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet hpd_state=0 edid preferred_mode is <NULL>[0] hdr mode is 0 dv mode is ver:0 len: 0 hdr10+ mode is 0 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]set initrd_high: 0x7f800000 [OSD]fb_addr for logo: 0x7f800000 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]fb_addr for logo: 0x7f800000 [OSD]VPP_OFIFO_SIZE:0xfff01fff [CANVAS]canvas init [CANVAS]addr=0x7f800000 width=3840, height=2160 [OSD]osd_hw.free_dst_data: 0,719,0,575 [OSD]osd1_update_disp_freescale_enable vpp: vpp_matrix_update: 2 cvbs performance type = 9, table = 0 cvbs_config_hdmipll_g12a cvbs_set_vid2_clk vpp: sdr_mode = 0 vpp: Rx hdr_info.hdr_sup_eotf_smpte_st_2084 = 0 amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet InUsbBurn noSof sof timeout, reset usb phy tuning gpio: pin GPIOAO_3 (gpio 3) value is 1 Command: bcb uboot-command Start read misc partition datas! BCB hasn't any datas,exit! Hit Enter or space or Ctrl+C key to stop autoboot -- : 0
Для того, чтобы прервать загрузку и скорректировать параметры загрузки нужно понажимать пробел и появится приглашение консоли U-Boot:
Hit Enter or space or Ctrl+C key to stop autoboot -- : 0 g12a_u219_v1#
Теперь можно поглядеть текущие параметры загрузки. Чтоы длинные строки можно было увиждеть целиком - включаем перенос (Ctrl+a w).
g12a_u219_v1#printenv EnableSelinux=permissive Irq_check_en=0 active_slot=normal avb2=0 baudrate=115200 bcb_cmd=get_avb_mode;get_valid_slot; board_defined_bootup=bootup_X3 boot_part=boot bootargs=init=/init console=ttyS0,115200 no_console_suspend earlyprintk=aml-uart,0xff803000 ramoops.pstore_en=1 ramoops.record_size=0x8000 ramoops.console_size=0x4000 o tg_device=0 reboot_mode_android=normal logo=osd0,loaded,0x3d800000 vout=576cvbs,enable panel_type=lcd_1 hdmitx=,444,8bit hdmimode=1080p60hz frac_rate_policy=1 hdmi_read _edid=1 cvbsmode=576cvbs osd_reverse=0 video_reverse=0 irq_check_en=0 androidboot.selinux=permissive androidboot.firstboot=0 jtag=disable androidboot.hardware=amlogic a ndroidboot.serialno=1234567890 mac=00:df:04:00:38:30 androidboot.mac=00:df:04:00:38:30 bootcmd=ddr_auto_fast_boot_check 6 0 0 50;run storeboot bootdelay=1 bootup_offset=0x1137ad8 bootup_size=0x3f488a cmdline_keys=if keyman init 0x1234; then if keyman read usid ${loadaddr} str; then setenv bootargs ${bootargs} androidboot.serialno=${usid};setenv serial ${usid};else s etenv bootargs ${bootargs} androidboot.serialno=1234567890;setenv serial 1234567890;fi;if keyman read mac ${loadaddr} str; then setenv bootargs ${bootargs} mac=${mac} a ndroidboot.mac=${mac};fi;if keyman read deviceid ${loadaddr} str; then setenv bootargs ${bootargs} androidboot.deviceid=${deviceid};fi;fi; colorattribute=444,8bit cvbs_drv=0 cvbsmode=576cvbs display_bpp=16 display_color_bg=0 display_color_fg=0xffff display_color_index=16 display_height=576 display_layer=osd0 display_width=720 dtb_mem_addr=0x1000000 ethact=dwmac.ff3f0000 ethaddr=00:df:04:00:38:30 factory_reset_poweroff_protect=echo wipe_data=${wipe_data}; echo wipe_cache=${wipe_cache};if test ${wipe_data} = failed; then run init_display; run storeargs;if mmcinfo ; then run recovery_from_sdcard;fi;if usb start 0; then run recovery_from_udisk;fi;run recovery_from_flash;fi; if test ${wipe_cache} = failed; then run init_display; ru n storeargs;if mmcinfo; then run recovery_from_sdcard;fi;if usb start 0; then run recovery_from_udisk;fi;run recovery_from_flash;fi; fb_addr=0x3d800000 fb_height=1080 fb_width=1920 fdt_high=0x20000000 firstboot=0 frac_rate_policy=1 fs_type=rootfstype=ramfs gatewayip=10.18.9.1 hdmi_read_edid=1 hdmimode=1080p60hz hostname=arm_gxbb init_display=get_rebootmode;echo reboot_mode:::: ${reboot_mode};if test ${reboot_mode} = quiescent; then setenv reboot_mode_android quiescent;run storeargs;setenv boota rgs ${bootargs} androidboot.quiescent=1;osd open;osd clear;else if test ${reboot_mode} = recovery_quiescent; then setenv reboot_mode_android quiescent;run storeargs;set env bootargs ${bootargs} androidboot.quiescent=1;osd open;osd clear;else setenv reboot_mode_android normal;run storeargs;hdmitx hpd;hdmitx get_preferred_mode;osd open;o sd clear;imgread pic logo bootup $loadaddr;bmp display $bootup_offset;bmp scale;vout output ${outputmode};vpp hdrpkt;fi;fi; initargs=init=/init console=ttyS0,115200 no_console_suspend earlyprintk=aml-uart,0xff803000 ramoops.pstore_en=1 ramoops.record_size=0x8000 ramoops.console_size=0x4000 initrd_high=7f800000 ipaddr=10.18.9.97 irremote_update=if irkey 2500000 0xe31cfb04 0xb748fb04; then echo read irkey ok!; if itest ${irkey_value} == 0xe31cfb04; then run update;else if itest ${irkey_value} == 0xb748fb04; then run update;\ fi;fi;fi; jtag=disable loadaddr=1080000 lock=10001000 mac=00:df:04:00:38:30 netmask=255.255.255.0 osd_reverse=0 otg_device=0 outputmode=576cvbs panel_type=lcd_1 preboot=run bcb_cmd; run factory_reset_poweroff_protect;run upgrade_check;run init_display;run storeargs;run usb_burning;run upgrade_key;bcb uboot-command;run switch_bo otmode; reboot_mode=cold_boot reboot_mode_android=normal recovery_from_flash=get_valid_slot;echo active_slot: ${active_slot};if test ${active_slot} = normal; then setenv bootargs ${bootargs} ${fs_type} aml_dt=${aml_dt} recove ry_part={recovery_part} recovery_offset={recovery_offset};if imgread kernel ${recovery_part} ${loadaddr} ${recovery_offset}; then wipeisb; bootm ${loadaddr}; fi;else se tenv bootargs ${bootargs} ${fs_type} aml_dt=${aml_dt} recovery_part=${boot_part} recovery_offset=${recovery_offset};if imgread kernel ${boot_part} ${loadaddr}; then boo tm ${loadaddr}; fi;fi; recovery_from_sdcard=if fatload mmc 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;if fatload mmc 0 ${loadaddr} recovery.img; then if fatload mmc 0 ${dtb_me m_addr} dtb.img; then echo sd dtb.img loaded; fi;wipeisb; setenv bootargs ${bootargs} ${fs_type};bootm ${loadaddr};fi; recovery_from_udisk=if fatload usb 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;if fatload usb 0 ${loadaddr} recovery.img; then if fatload usb 0 ${dtb_mem _addr} dtb.img; then echo udisk dtb.img loaded; fi;wipeisb; setenv bootargs ${bootargs} ${fs_type};bootm ${loadaddr};fi; recovery_offset=0 recovery_part=recovery rpmb_state=1 sdc_burning=sdc_burn ${sdcburncfg} sdcburncfg=aml_sdc_burn.ini sdr2hdr=0 serial=1234567890 serverip=10.18.9.113 stderr=serial stdin=serial stdout=serial storeargs=setenv bootargs ${initargs} otg_device=${otg_device} reboot_mode_android=${reboot_mode_android} logo=${display_layer},loaded,${fb_addr} vout=${outputmode},ena ble panel_type=${panel_type} hdmitx=${cecconfig},${colorattribute} hdmimode=${hdmimode} frac_rate_policy=${frac_rate_policy} hdmi_read_edid=${hdmi_read_edid} cvbsmode=$ {cvbsmode} osd_reverse=${osd_reverse} video_reverse=${video_reverse} irq_check_en=${Irq_check_en} androidboot.selinux=${EnableSelinux} androidboot.firstboot=${firstboo t} jtag=${jtag}; setenv bootargs ${bootargs} androidboot.hardware=amlogic;run cmdline_keys; storeboot=boot_cooling;get_system_as_root_mode;echo system_mode: ${system_mode};if test ${system_mode} = 1; then setenv bootargs ${bootargs} ro rootwait skip_initramfs; else setenv bootargs ${bootargs} ${fs_type};fi;get_valid_slot;get_avb_mode;echo active_slot: ${active_slot};if test ${active_slot} != normal; then setenv bootargs ${boo targs} androidboot.slot_suffix=${active_slot};fi;if test ${avb2} = 0; then if test ${active_slot} = _a; then setenv bootargs ${bootargs} root=/dev/mmcblk0p23;else if te st ${active_slot} = _b; then setenv bootargs ${bootargs} root=/dev/mmcblk0p24;fi;fi;fi;if imgread kernel ${boot_part} ${loadaddr}; then bootm ${loadaddr}; fi;run storea rgs; run update; switch_bootmode=get_rebootmode;if test ${reboot_mode} = factory_reset; then setenv reboot_mode_android normal;run storeargs;run recovery_from_flash;else if test ${reboo t_mode} = update; then setenv reboot_mode_android normal;run storeargs;run update;else if test ${reboot_mode} = quiescent; then setenv reboot_mode_android quiescent;run storeargs;setenv bootargs ${bootargs} androidboot.quiescent=1;else if test ${reboot_mode} = recovery_quiescent; then setenv reboot_mode_android quiescent;run storeargs ;setenv bootargs ${bootargs} androidboot.quiescent=1;run recovery_from_flash;else if test ${reboot_mode} = cold_boot; then setenv reboot_mode_android normal;run storear gs;else if test ${reboot_mode} = fastboot; then setenv reboot_mode_android normal;run storeargs;fastboot;fi;fi;fi;fi;fi;fi; try_auto_burn=update 700 750; update=run usb_burning; run sdc_burning; if mmcinfo; then run recovery_from_sdcard;fi;if usb start 0; then run recovery_from_udisk;fi;run recovery_from_flash; upgrade_check=echo upgrade_step=${upgrade_step}; if itest ${upgrade_step} == 3; then run init_display; run storeargs; run update;else fi; upgrade_key=if gpio input GPIOAO_3; then echo detect upgrade key; run update;fi; upgrade_step=2 usb_burning=update 1000 video_reverse=0 wipe_cache=successful wipe_data=successful Environment size: 7754/65532 bytes
Если при вставленной SD-карте выполнить:
fatload mmc 0 1080000 zImage
то успешно загружается в память ядро - файлик zImage с первго раздела вставленной SD-карточки:
g12a_u219_v1#fatload mmc 0 1080000 zImage reading zImage 27871744 bytes read in 1520 ms (17.5 MiB/s)
В данном случае 1080000 - это значение переменной loadaddr из вывода printenv.
Для того, чтоб запустить какое-либо cтороннее ядро нам нужен образ ядра и файл dtb (DeviceTreeBlob). Ядро у нас есть (на карте памяти), а dtb нужно либо скомпилировать, либо - извлечь.
Вот # cat /proc/cmdline
init=/init console=ttyS0,115200 no_console_suspend earlyprintk=aml-uart,0xff803000 ramoops.pstore_en=1 ramoops.record_size=0x8000 ramoops.console_size=0x4000 otg_device =0 reboot_mode_android=normal logo=osd0,loaded,0x3d800000 vout=1080p60hz,enable panel_type=lcd_1 hdmitx=,444,8bit hdmimode=1080p60hz frac_rate_policy=1 hdmi_read_edid=1 cvbsmode=576cvbs osd_reverse=0 video_reverse=0 irq_check_en=0 androidboot.selinux=permissive androidboot.firstboot=0 jtag=disable androidboot.hardware=amlogic androidb oot.serialno=1234567890 mac=00:df:04:00:38:30 androidboot.mac=00:df:04:00:38:30 ro rootwait skip_initramfs androidboot.dtbo_idx=0 --cmdline root=/dev/mmcblk0p18 buildva riant=user
С работающего андроида
console:/ # uname -a Linux localhost 4.9.113 #1 SMP PREEMPT Sat Dec 14 17:30:12 CST 2019 armv7l
Извлечение dtb (DeviceTreeBlob)
https://www.cnx-software.com/2014/05/12/how-to-extract-a-device-tree-file-from-android-firmware-files/
Чтобы извлечь dtb из текущей прошивки нужно сделать образ раздела boot или recovery и распаковать его с помощью утилиты split_bootimg.pl. У меня не получилось распаковать образ раздела boot (распаковывался неполностью), но нормально распаковался образ раздела recovery.
Для этого:
- Подключаем к девайсу флешку и с помощью консоли монтируем ее (или если она (ext)FAT - она смонтируется сама в /mnt/media_rw/xxxx):
mkdir /mnt/media_rw/USB mount /dev/sda1 /mnt/media_rw/USB
- И создаем образ раздела recovery (или boot):
dd if=/dev/block/recovery of=/mnt/media/USB/recovery.img
- Отмонтируем флеху, переносим файлик на комп и распаковываем:
wget wget https://gist.githubusercontent.com/jberkel/1087743/raw/5be96af0e1c1346678379b0c0f0330b71df51f25/split_bootimg.pl chmod a+x ./split_bootimg.pl ./split_bootimg.pl ./recovery.img
Кстати, извлечь этот файлик с помощью стандартных утилит android_bootimg_tools не удалось. RamDisk и kernel извлекаются, а вот третий файлик - нет!
- вывод будет примерно такой:
Page size: 2048 (0x00000800) Kernel size: 9531352 (0x00916fd8) Ramdisk size: 6839445 (0x00685c95) Second size: 78980 (0x00013484) Board name: Command line: androidboot.dtbo_idx=0 --cmdline root=/dev/mmcblk0p18 buildvariant=user Writing recovery.img-kernel ... complete. Writing recovery.img-ramdisk.gz ... complete. Writing recovery.img-second.gz ... complete.
Нужный нам файлик - recovery.img-second.gz
Убедиться, что полученный файлик - это dtb можно, декомпилировав его. Как это сделать - написано ниже.
Изменение аппаратных настроек в файле dtb с помощью DTC
- Установим DTC (если он не установлен):
sudo apt-get install device-tree-compiler
- Преобразуем двоичный файл dtb в редактируемый текстовый файл dts:
dtc -b 0 -O dts -I dtb -o hk1_box.dts recovery.img-second.gz
- Редактируем то, что нам нужно в файле dts:
nano hk1_box.dts
- Преобразуем отредактированный файл dts в двоичный формат dtb:
dtc -b 0 -O dtb -I dts -o hk1_box.dtb hk1_box.dts
Изменение объема памяти, выделенной видеоадаптеру
Вот в таком кусочке кода (параметр size):
linux,cma { compatible = "shared-dma-pool"; reusable; size = <0x0 0x2000000>; alignment = <0x0 0x400000>; linux,cma-default; };
Задается объем памяти, выделенной видяхе. В данном случае выдляется 32Mb.
Изменение доступного объема RAM
decompile your dtb with "dtc -I dtb -O dts meson-gxl-s905w-tx3-mini.dtb > meson-gxl-s905w-tx3-mini.dts" and then edit the dts file: change "reg = <0x0 0x0 0x0 0x40000000>;" in the memory@0 section to "reg = <0x0 0x0 0x0 0x80000000>;" and compile it back into a dtb: "dtc -I dts -O dtb meson-gxl-s905w-tx3-mini.dts > meson-gxl-s905w-tx3-mini.dtb"
Загрузка
kernel load addr: 0x01080000 dtb load addr: 0x1000000
Последние эксперименты
https://forum.armbian.com/topic/12162-single-armbian-image-for-rk-aml-aw/
https://yadi.sk/d/_rQgn_FosYuW0g
https://yadi.sk/d/_rQgn_FosYuW0g/19.11.5/20200127
setenv kernel_addr_r 0x11000000; setenv ramdisk_addr_r 0x13000000; setenv fdt_addr_r 0x1000000; setenv devnum "0"; setenv devtype "mmc"; setenv androidboot.dtbo_idx 0; fatload ${devtype} ${devnum} ${loadaddr} uEnv.txt; env import -t ${loadaddr} ${filesize}; setenv bootargs ${APPEND}; setenv bootargs ${bootargs} mac=${mac}; fatload ${devtype} ${devnum} ${kernel_addr_r} ${LINUX}; fatload ${devtype} ${devnum} ${ramdisk_addr_r} ${INITRD}; fatload ${devtype} ${devnum} ${fdt_addr_r} ${FDT}; fdt addr ${fdt_addr_r}; booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r};
Настройки (bootargs и dtb) лежат в файлике uEnv.txt
setenv androidboot.dtbo_idx 0; run recovery_from_sdcard;
В оригинале загружается содержимое раздела boot и хапускается, а там указан androidboot.dtbo_idx.
imgread kernel ${boot_part} ${loadaddr} bootm ${loadaddr}
Вероятно, можно просто перепаковать??? boot.img - https://www.whitewinterwolf.com/posts/2016/08/11/how-to-unpack-and-edit-android-boot-img/
Или просто добавить этот параметр к строке запуска ядра как тут:
[ 0.000000] Kernel command line: androidboot.mode=normal androidboot.dtbo_idx=0 root=PARTUUID=af01642c-9b84-11e8-9b2a-234eb5e198a0 androidboot.verifiedbootstate=orange androidboot.slot_suffix= androidboot.serialno=HCYRK3318334473094 console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.wificountrycode=US androidboot.veritymode=enforcing androidboot.hardware=rk30board androidboot.console=ttyFIQ0 firmware_class.path=/vendor/etc/firmware init=/init rootwait ro init=/init root=PARTUUID=af01642c-9b84-11e8-9b2a-234eb5e198a0 loop.max_part=7 buildvariant=userdebug earlycon=uart8250,mmio32,0xff130000 swiotlb=1 kpti=0
Ошибки
Если появляется сообщение:
## Flattened Device Tree blob at 01000000 Booting using the fdt blob at 0x1000000 find 1 dtbos No androidboot.dtbo_idx configured And no dtbos will be applied
Значит нужно задать переменную androidboot.dtbo_idx:
setenv androidboot.dtbo_idx 0
Значение которой видно при распаковке boot.img:
Command line: androidboot.dtbo_idx=0 --cmdline root=/dev/mmcblk0p18 buildvariant=user
УДАЛОСЬ ЗАГРУЗИТЬСЯ
Запустить скрипт путем update не удалось (т.к. он не подписан), однако, после пристального изучения вывода printenv оказалось, что его успешно запускает команда recovery_from_sdcard, прописанная в env U-Boot. То есть - готовим флеху, в консоли RS-232 жмем пробелы и в ответ на приглашение U-Boot вводим такое:
run recovery_from_sdcard;
В результате приставка перейдет в режим дуалбута и будет грузиться с SD-карты, когда она вставлена.
boot from sd-card log
Welcome to minicom 2.7.1 OPTIONS: I18n Compiled on May 3 2018, 15:20:11. Port /dev/ttyUSB0, 22:43:26 Press CTRL-A Z for help on special keys SM1:BL:511f6b:81ca2f;FEAT:A0F83180:20282000;POC:F;RCY:0;EMMC:0;READ:0;0.0;CHK:0; bl2_stage_init 0x01 bl2_stage_init 0x81 hw id: 0x0001 - pwm id 0x00 bl2_stage_init 0xc0 bl2_stage_init 0x02 L0:00000000 L1:00000703 L2:00008067 L3:15000020 S1:00000000 B2:20282000 B1:a0f83180 TE: 158641 BL2 Built : 20:29:41, Jun 18 2019. g12a ga659aac - luan.yuan@droid15-sz Board ID = 1 Set cpu clk to 24M Set clk81 to 24M Use GP1_pll as DSU clk. DSU clk: 1200 Mhz CPU clk: 1200 MHz Set clk81 to 166.6M eMMC boot @ 0 sw8 s DDR driver_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:37 board id: 1 Load FIP HDR from eMMC, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0 fw parse done Load ddrfw from eMMC, src: 0x00060200, des: 0xfffd0000, size: 0x0000c000, part: 0 Load ddrfw from eMMC, src: 0x00038200, des: 0xfffd0000, size: 0x00004000, part: 0 PIEI prepare done fastboot data load 00000000 emmc switch 1 ok ddr saved addr:00016000 Load ddr parameter from eMMC, src: 0x02c00000, des: 0xfffd0000, size: 0x00001000, part: 0 00000000 emmc switch 0 ok fastboot data verify verify result: 0 enable_fast_boot dmc_margin_rx==12 dmc_margin_tx==12 steps DDR3 probe ddr clk to 672MHz Load ddrfw from eMMC, src: 0x0002c200, des: 0xfffd0000, size: 0x0000c000, part: 0 dmc_version 0001 Check phy result INFO : End of initialization INFO : Training has run successfully! aml_ddr_fw_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:43 DDR cs0 size: 3928MB DDR cs1 size: 0MB DMC_DDR_CTRL: 0000002dDDR size: 3928MB cs0 DataBus test pass cs0 AddrBus test pass non-sec scramble use zero key ddr scramble enabled 100bdlr_step_size ps== 483 result report boot times 0Enable ddr reg access 00000000 emmc switch 3 ok BL2: rpmb counter: 0x00002374 00000000 emmc switch 0 ok Load FIP HDR from eMMC, src: 0x00010200, des: 0x01700000, size: 0x00004000, part: 0 Load BL3X from eMMC, src: 0x00078200, des: 0x01768000, size: 0x000d0000, part: 0 bl2z: ptr: 05129330, size: 00001e40 0.0;M3 CHK:0;cm4_sp_mode 0 MVN_1=0x00000000 MVN_2=0x00000000 [Image: g12a_v1.1.3389-92241b5 2019-07-02 17:22:49 luan.yuan@droid15-sz] OPS=0x10 ring efuse init 2b 0c 10 00 01 1d 16 00 00 0c 35 30 43 57 50 50 [0.017354 Inits done] secure task start! high task start! low task start! run into bl31 NOTICE: BL31: v1.3(release):4fc40b1 NOTICE: BL31: Built : 15:57:33, May 22 2019 NOTICE: BL31: G12A normal boot! NOTICE: BL31: BL33 decompress pass ERROR: Error initializing runtime service opteed_fast U-Boot 2015.01 (Dec 14 2019 - 17:22:12) DRAM: 3.8 GiB Relocation Offset is: d6e50000 spi_post_bind(spifc): req_seq = 0 register usb cfg[0][1] = 00000000d7f3e528 NAND: get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 MMC: aml_priv->desc_buf = 0x00000000d3e40a70 aml_priv->desc_buf = 0x00000000d3e42db0 SDIO Port B: 0, SDIO Port C: 1 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 emmc/sd response timeout, cmd8, status=0x1ff2800 emmc/sd response timeout, cmd55, status=0x1ff2800 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x162000 [mmc_startup] mmc refix success init_part() 282: PART_TYPE_DOS [mmc_init] mmc init success Amlogic multi-dtb tool Single dtb detected start dts,buffer=00000000d3e45620,dt_addr=00000000d3e45620 get_partition_from_dts() 91: ret 0 Amlogic multi-dtb tool Single dtb detected parts: 17 00: logo 0000000000800000 1 01: recovery 0000000001800000 1 02: misc 0000000000800000 1 03: dtbo 0000000000800000 1 04: cri_data 0000000000800000 2 05: param 0000000001000000 2 06: boot 0000000001000000 1 set has_boot_slot = 0 07: rsv 0000000001000000 1 08: metadata 0000000001000000 1 09: vbmeta 0000000000200000 1 10: tee 0000000002000000 1 11: vendor 0000000014000000 1 12: odm 0000000008000000 1 13: system 0000000074000000 1 14: product 0000000008000000 1 15: cache 0000000046000000 2 16: data ffffffffffffffff 4 init_part() 282: PART_TYPE_DOS eMMC/TSD partition table have been checked OK! crc32_s:0x1577dad == storage crc_pattern:0x1577dad!!! crc32_s:0xee152b83 == storage crc_pattern:0xee152b83!!! crc32_s:0x79f50f07 == storage crc_pattern:0x79f50f07!!! mmc env offset: 0x4d400000 In: serial Out: serial Err: serial reboot_mode=cold_boot [store]To run cmd[emmc dtb_read 0x1000000 0x40000] _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 dtb_read()-3623: total valid 2 update_old_dtb()-3604: do nothing Amlogic multi-dtb tool Single dtb detected amlkey_init() enter! [EFUSE_MSG]keynum is 4 vpu: clk_level in dts: 7 vpu: vpu_power_on vpu: set clk: 666667000Hz, readback: 666666667Hz(0x100) vpu: vpu_module_init_config vpp: vpp_init vpp: vpp osd2 matrix rgb2yuv.............. cvbs: cpuid:0x2b Net: dwmac.ff3f0000amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 CONFIG_AVB2: null Start read misc partition datas! info->magic = info->version_major = 1 info->version_minor = 0 info->slots[0].priority = 15 info->slots[0].tries_remaining = 7 info->slots[0].successful_boot = 0 info->slots[1].priority = 14 info->slots[1].tries_remaining = 7 info->slots[1].successful_boot = 0 info->crc32 = -1075449479 active slot = 0 wipe_data=successful wipe_cache=successful upgrade_step=2 reboot_mode:::: cold_boot amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet hpd_state=0 edid preferred_mode is <NULL>[0] hdr mode is 0 dv mode is ver:0 len: 0 hdr10+ mode is 0 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]set initrd_high: 0x7f800000 [OSD]fb_addr for logo: 0x7f800000 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]fb_addr for logo: 0x7f800000 [OSD]VPP_OFIFO_SIZE:0xfff01fff [CANVAS]canvas init [CANVAS]addr=0x7f800000 width=3840, height=2160 Err imgread(L544):Logo header err. There is no valid bmp file at the given address [OSD]osd_hw.free_dst_data: 0,719,0,575 [OSD]osd1_update_disp_freescale_enable vpp: vpp_matrix_update: 2 cvbs performance type = 9, table = 0 cvbs_config_hdmipll_g12a cvbs_set_vid2_clk vpp: sdr_mode = 2 vpp: Rx hdr_info.hdr_sup_eotf_smpte_st_2084 = 0 amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet InUsbBurn noSof sof timeout, reset usb phy tuning gpio: pin GPIOAO_3 (gpio 3) value is 1 Command: bcb uboot-command Start read misc partition datas! BCB hasn't any datas,exit! amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet Hit Enter or space or Ctrl+C key to stop autoboot -- : 0 card in co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x182000 [mmc_startup] mmc refix success init_part() 282: PART_TYPE_DOS [mmc_init] mmc init success Device: SDIO Port B Manufacturer ID: 3 OEM: 5344 Name: SS08G Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 7.4 GiB mmc clock: 40000000 Bus Width: 4-bit reading s905_autoscript 1351 bytes read in 5 ms (263.7 KiB/s) ## Executing script at 01020000 start amlogic old u-boot reading boot_android ** Unable to read file boot_android ** ** Bad device usb 0 ** reading u-boot.ext ** Unable to read file u-boot.ext ** ** Bad device usb 0 ** reading uEnv.txt 1088 bytes read in 5 ms (211.9 KiB/s) mac=00:df:04:00:38:30 reading /zImage 23357952 bytes read in 1276 ms (17.5 MiB/s) reading /uInitrd 13608950 bytes read in 746 ms (17.4 MiB/s) reading /dtb.img 45989 bytes read in 5 ms (8.8 MiB/s) libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND +-----------------------------+ [rsvmem] fdt get prop fail. | | ## Loading init Ramdisk from Legacy Image at 13000000 ... | Cannot open /dev/ttyUSB0! | Image Name: uInitrd | | Image Type: AArch64 Linux RAMDisk Image (gzip compressed) +-----------------------------+ Data Size: 13608886 Bytes = 13 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Start read misc partition datas! info->magic = info->version_major = 1 info->version_minor = 0 info->slots[0].priority = 15 info->slots[0].tries_remaining = 7 info->slots[0].successful_boot = 0 info->slots[1].priority = 14 info->slots[1].tries_remaining = 7 info->slots[1].successful_boot = 0 info->crc32 = -1075449479 active slot = 0 active_slot is normal DTBO partition header is incorrect load dtb from 0x1000000 ...... Amlogic multi-dtb tool Single dtb detected ## Flattened Device Tree blob at 01000000 Booting using the fdt blob at 0x1000000 No valid dtbo image found libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND [rsvmem] fdt get prop fail. Loading Ramdisk to 7eb05000, end 7f7ff7b6 ... OK Loading Device Tree to 000000001fff1000, end 000000001ffff3a4 ... OK Starting kernel ... uboot time: 6206312 us
reboot sd card log
[ 285.513308] reboot: Restarting system bl31 reboot reason: 0xd bl31 reboot reason: 0x0 system cmd 1. SM1:BL:511f6b:81ca2f;FEAT:A0F83180:20282000;POC:F;RCY:0;EMMC:0;READ:0;0.0;CHK:0; bl2_stage_init 0x01 bl2_stage_init 0x81 hw id: 0x0001 - pwm id 0x00 bl2_stage_init 0xc0 bl2_stage_init 0x02 L0:00000000 L1:00000703 L2:00008067 L3:15000020 S1:00000000 B2:20282000 B1:a0f83180 TE: 154850 BL2 Built : 20:29:41, Jun 18 2019. g12a ga659aac - luan.yuan@droid15-sz Board ID = 1 Set cpu clk to 24M Set clk81 to 24M Use GP1_pll as DSU clk. DSU clk: 1200 Mhz CPU clk: 1200 MHz Set clk81 to 166.6M eMMC boot @ 0 sw8 s DDR driver_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:37 board id: 1 Load FIP HDR from eMMC, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0 fw parse done Load ddrfw from eMMC, src: 0x00060200, des: 0xfffd0000, size: 0x0000c000, part: 0 Load ddrfw from eMMC, src: 0x00038200, des: 0xfffd0000, size: 0x00004000, part: 0 PIEI prepare done fastboot data load 00000000 emmc switch 1 ok ddr saved addr:00016000 Load ddr parameter from eMMC, src: 0x02c00000, des: 0xfffd0000, size: 0x00001000, part: 0 00000000 emmc switch 0 ok fastboot data verify verify result: 0 enable_fast_boot dmc_margin_rx==12 dmc_margin_tx==12 steps DDR3 probe ddr clk to 672MHz Load ddrfw from eMMC, src: 0x0002c200, des: 0xfffd0000, size: 0x0000c000, part: 0 dmc_version 0001 Check phy result INFO : End of initialization INFO : Training has run successfully! aml_ddr_fw_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:43 DDR cs0 size: 3928MB DDR cs1 size: 0MB DMC_DDR_CTRL: 0000002dDDR size: 3928MB cs0 DataBus test pass cs0 AddrBus test pass non-sec scramble use zero key ddr scramble enabled 100bdlr_step_size ps== 476 result report boot times 1Enable ddr reg access 00000000 emmc switch 3 ok BL2: rpmb counter: 0x00002374 00000000 emmc switch 0 ok Load FIP HDR from eMMC, src: 0x00010200, des: 0x01700000, size: 0x00004000, part: 0 Load BL3X from eMMC, src: 0x00078200, des: 0x01768000, size: 0x000d0000, part: 0 bl2z: ptr: 05129330, size: 00001e40 0.0;M3 CHK:0;cm4_sp_mode 0 MVN_1=0x00000000 MVN_2=0x00000000 [Image: g12a_v1.1.3389-92241b5 2019-07-02 17:22:49 luan.yuan@droid15-sz] OPS=0x10 ring efuse init 2b 0c 10 00 01 1d 16 00 00 0c 35 30 43 57 50 50 [0.670124 Inits done] secure task start! high task start! low task start! run into bl31 NOTICE: BL31: v1.3(release):4fc40b1 NOTICE: BL31: Built : 15:57:33, May 22 2019 NOTICE: BL31: G12A normal boot! NOTICE: BL31: BL33 decompress pass ERROR: Error initializing runtime service opteed_fast U-Boot 2015.01 (Dec 14 2019 - 17:22:12) DRAM: 3.8 GiB Relocation Offset is: d6e50000 spi_post_bind(spifc): req_seq = 0 register usb cfg[0][1] = 00000000d7f3e528 NAND: get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 MMC: aml_priv->desc_buf = 0x00000000d3e40a70 aml_priv->desc_buf = 0x00000000d3e42db0 SDIO Port B: 0, SDIO Port C: 1 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 emmc/sd response timeout, cmd8, status=0x1ff2800 emmc/sd response timeout, cmd55, status=0x1ff2800 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x162000 [mmc_startup] mmc refix success init_part() 282: PART_TYPE_DOS [mmc_init] mmc init success Amlogic multi-dtb tool Single dtb detected start dts,buffer=00000000d3e45620,dt_addr=00000000d3e45620 get_partition_from_dts() 91: ret 0 Amlogic multi-dtb tool Single dtb detected parts: 17 00: logo 0000000000800000 1 01: recovery 0000000001800000 1 02: misc 0000000000800000 1 03: dtbo 0000000000800000 1 04: cri_data 0000000000800000 2 05: param 0000000001000000 2 06: boot 0000000001000000 1 set has_boot_slot = 0 07: rsv 0000000001000000 1 08: metadata 0000000001000000 1 09: vbmeta 0000000000200000 1 10: tee 0000000002000000 1 11: vendor 0000000014000000 1 12: odm 0000000008000000 1 13: system 0000000074000000 1 14: product 0000000008000000 1 15: cache 0000000046000000 2 16: data ffffffffffffffff 4 init_part() 282: PART_TYPE_DOS eMMC/TSD partition table have been checked OK! crc32_s:0x1577dad == storage crc_pattern:0x1577dad!!! crc32_s:0xee152b83 == storage crc_pattern:0xee152b83!!! crc32_s:0x79f50f07 == storage crc_pattern:0x79f50f07!!! mmc env offset: 0x4d400000 In: serial Out: serial Err: serial reboot_mode=cold_boot [store]To run cmd[emmc dtb_read 0x1000000 0x40000] _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 dtb_read()-3623: total valid 2 update_old_dtb()-3604: do nothing Amlogic multi-dtb tool Single dtb detected amlkey_init() enter! [EFUSE_MSG]keynum is 4 vpu: clk_level in dts: 7 vpu: vpu_power_on vpu: set clk: 666667000Hz, readback: 666666667Hz(0x100) vpu: vpu_module_init_config vpp: vpp_init vpp: vpp osd2 matrix rgb2yuv.............. cvbs: cpuid:0x2b Net: dwmac.ff3f0000amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 CONFIG_AVB2: null Start read misc partition datas! info->magic = info->version_major = 1 info->version_minor = 0 info->slots[0].priority = 15 info->slots[0].tries_remaining = 7 info->slots[0].successful_boot = 0 info->slots[1].priority = 14 info->slots[1].tries_remaining = 7 info->slots[1].successful_boot = 0 info->crc32 = -1075449479 active slot = 0 wipe_data=successful wipe_cache=successful upgrade_step=2 reboot_mode:::: cold_boot amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet hpd_state=0 edid preferred_mode is <NULL>[0] hdr mode is 0 dv mode is ver:0 len: 0 hdr10+ mode is 0 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]set initrd_high: 0x7f800000 [OSD]fb_addr for logo: 0x7f800000 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]fb_addr for logo: 0x7f800000 [OSD]VPP_OFIFO_SIZE:0xfff01fff [CANVAS]canvas init [CANVAS]addr=0x7f800000 width=3840, height=2160 Err imgread(L544):Logo header err. There is no valid bmp file at the given address [OSD]osd_hw.free_dst_data: 0,719,0,575 [OSD]osd1_update_disp_freescale_enable vpp: vpp_matrix_update: 2 cvbs performance type = 9, table = 0 cvbs_config_hdmipll_g12a cvbs_set_vid2_clk vpp: sdr_mode = 2 vpp: Rx hdr_info.hdr_sup_eotf_smpte_st_2084 = 0 amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet InUsbBurn noSof sof timeout, reset usb phy tuning gpio: pin GPIOAO_3 (gpio 3) value is 0 detect upgrade key InUsbBurn noSof sof timeout, reset usb phy tuning card in co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x182000 [mmc_startup] mmc refix success init_part() 282: PART_TYPE_DOS [mmc_init] mmc init success Device: SDIO Port B Manufacturer ID: 3 OEM: 5344 Name: SS08G Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 7.4 GiB mmc clock: 40000000 Bus Width: 4-bit Device: SDIO Port B Manufacturer ID: 3 OEM: 5344 Name: SS08G Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 7.4 GiB mmc clock: 40000000 Bus Width: 4-bit reading aml_autoscript 709 bytes read in 4 ms (172.9 KiB/s) ## Executing script at 01080000 ## Error: "bootfromsd" not defined Saving Environment to aml-storage... mmc env offset: 0x4d400000 Writing to MMC(1)... done reboot use default mode: normal bl31 reboot reason: 0xd bl31 reboot reason: 0x1 system cmd 1.
boot from emmc after install_aml.sh
SM1:BL:511f6b:81ca2f;FEAT:A0F83180:20282000;POC:F;RCY:0;EMMC:0;READ:0;0.0;CHK:0; bl2_stage_init 0x01 bl2_stage_init 0x81 hw id: 0x0001 - pwm id 0x00 bl2_stage_init 0xc0 bl2_stage_init 0x02 L0:00000000 L1:00000703 L2:00008067 L3:15000020 S1:00000000 B2:20282000 B1:a0f83180 TE: 403002 BL2 Built : 20:29:41, Jun 18 2019. g12a ga659aac - luan.yuan@droid15-sz Board ID = 1 Set cpu clk to 24M Set clk81 to 24M Use GP1_pll as DSU clk. DSU clk: 1200 Mhz CPU clk: 1200 MHz Set clk81 to 166.6M eMMC boot @ 0 sw8 s DDR driver_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:37 board id: 1 Load FIP HDR from eMMC, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0 fw parse done Load ddrfw from eMMC, src: 0x00060200, des: 0xfffd0000, size: 0x0000c000, part: 0 Load ddrfw from eMMC, src: 0x00038200, des: 0xfffd0000, size: 0x00004000, part: 0 PIEI prepare done fastboot data load 00000000 emmc switch 1 ok ddr saved addr:00016000 Load ddr parameter from eMMC, src: 0x02c00000, des: 0xfffd0000, size: 0x00001000, part: 0 00000000 emmc switch 0 ok fastboot data verify verify result: 0 enable_fast_boot dmc_margin_rx==12 dmc_margin_tx==12 steps DDR3 probe ddr clk to 672MHz Load ddrfw from eMMC, src: 0x0002c200, des: 0xfffd0000, size: 0x0000c000, part: 0 dmc_version 0001 Check phy result INFO : End of initialization INFO : Training has run successfully! aml_ddr_fw_vesion: LPDDR4_PHY_V_0_1_15 build time: Jun 18 2019 20:29:43 DDR cs0 size: 3928MB DDR cs1 size: 0MB DMC_DDR_CTRL: 0000002dDDR size: 3928MB cs0 DataBus test pass cs0 AddrBus test pass non-sec scramble use zero key ddr scramble enabled 100bdlr_step_size ps== 480 result report boot times 0Enable ddr reg access 00000000 emmc switch 3 ok BL2: rpmb counter: 0x00002374 00000000 emmc switch 0 ok Load FIP HDR from eMMC, src: 0x00010200, des: 0x01700000, size: 0x00004000, part: 0 Load BL3X from eMMC, src: 0x00078200, des: 0x01768000, size: 0x000d0000, part: 0 bl2z: ptr: 05129330, size: 00001e40 0.0;M3 CHK:0;cm4_sp_mode 0 MVN_1=0x00000000 MVN_2=0x00000000 [Image: g12a_v1.1.3389-92241b5 2019-07-02 17:22:49 luan.yuan@droid15-sz] OPS=0x10 ring efuse init 2b 0c 10 00 01 1d 16 00 00 0c 35 30 43 57 50 50 [0.017354 Inits done] secure task start! high task start! low task start! run into bl31 NOTICE: BL31: v1.3(release):4fc40b1 NOTICE: BL31: Built : 15:57:33, May 22 2019 NOTICE: BL31: G12A normal boot! NOTICE: BL31: BL33 decompress pass ERROR: Error initializing runtime service opteed_fast U-Boot 2015.01 (Dec 14 2019 - 17:22:12) DRAM: 3.8 GiB Relocation Offset is: d6e50000 spi_post_bind(spifc): req_seq = 0 register usb cfg[0][1] = 00000000d7f3e528 NAND: get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 get_sys_clk_rate_mtd() 290, clock setting 200! NAND device id: 0 ff ff ff ff ff No NAND device found!!! nand init failed: -6 MMC: aml_priv->desc_buf = 0x00000000d3e40a70 aml_priv->desc_buf = 0x00000000d3e42db0 SDIO Port B: 0, SDIO Port C: 1 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 400000 emmc/sd response timeout, cmd8, status=0x1ff2800 emmc/sd response timeout, cmd55, status=0x1ff2800 co-phase 0x2, tx-dly 0, clock 400000 co-phase 0x2, tx-dly 0, clock 40000000 aml_sd_retry_refix[983]:delay = 0x0,gadjust =0x162000 [mmc_startup] mmc refix success init_part() 282: PART_TYPE_DOS [mmc_init] mmc init success Amlogic multi-dtb tool Single dtb detected start dts,buffer=00000000d3e45620,dt_addr=00000000d3e45620 get_partition_from_dts() 91: ret 0 Amlogic multi-dtb tool Single dtb detected parts: 17 00: logo 0000000000800000 1 01: recovery 0000000001800000 1 02: misc 0000000000800000 1 03: dtbo 0000000000800000 1 04: cri_data 0000000000800000 2 05: param 0000000001000000 2 06: boot 0000000001000000 1 set has_boot_slot = 0 07: rsv 0000000001000000 1 08: metadata 0000000001000000 1 09: vbmeta 0000000000200000 1 10: tee 0000000002000000 1 11: vendor 0000000014000000 1 12: odm 0000000008000000 1 13: system 0000000074000000 1 14: product 0000000008000000 1 15: cache 0000000046000000 2 16: data ffffffffffffffff 4 init_part() 282: PART_TYPE_DOS eMMC/TSD partition table have been checked OK! crc32_s:0x1577dad == storage crc_pattern:0x1577dad!!! crc32_s:0xee152b83 == storage crc_pattern:0xee152b83!!! crc32_s:0x79f50f07 == storage crc_pattern:0x79f50f07!!! mmc env offset: 0x4d400000 In: serial Out: serial Err: serial reboot_mode=cold_boot [store]To run cmd[emmc dtb_read 0x1000000 0x40000] _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 _verify_dtb_checksum()-3406: calc 5d3b67d1, store 5d3b67d1 dtb_read()-3623: total valid 2 update_old_dtb()-3604: do nothing Amlogic multi-dtb tool Single dtb detected amlkey_init() enter! [EFUSE_MSG]keynum is 4 vpu: clk_level in dts: 7 vpu: vpu_power_on vpu: set clk: 666667000Hz, readback: 666666667Hz(0x100) vpu: vpu_module_init_config vpp: vpp_init vpp: vpp osd2 matrix rgb2yuv.............. cvbs: cpuid:0x2b Net: dwmac.ff3f0000amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 CONFIG_AVB2: null Start read misc partition datas! info->magic = info->version_major = 1 info->version_minor = 0 info->slots[0].priority = 15 info->slots[0].tries_remaining = 7 info->slots[0].successful_boot = 0 info->slots[1].priority = 14 info->slots[1].tries_remaining = 7 info->slots[1].successful_boot = 0 info->crc32 = -1075449479 active slot = 0 wipe_data=successful wipe_cache=successful upgrade_step=2 reboot_mode:::: cold_boot amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet hpd_state=0 edid preferred_mode is <NULL>[0] hdr mode is 0 dv mode is ver:0 len: 0 hdr10+ mode is 0 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]set initrd_high: 0x7f800000 [OSD]fb_addr for logo: 0x7f800000 [OSD]load fb addr from dts:/meson-fb [OSD]load fb addr from dts:/fb [OSD]fb_addr for logo: 0x7f800000 [OSD]VPP_OFIFO_SIZE:0xfff01fff [CANVAS]canvas init [CANVAS]addr=0x7f800000 width=3840, height=2160 Err imgread(L544):Logo header err. There is no valid bmp file at the given address [OSD]osd_hw.free_dst_data: 0,719,0,575 [OSD]osd1_update_disp_freescale_enable vpp: vpp_matrix_update: 2 cvbs performance type = 9, table = 0 cvbs_config_hdmipll_g12a cvbs_set_vid2_clk vpp: sdr_mode = 2 vpp: Rx hdr_info.hdr_sup_eotf_smpte_st_2084 = 0 amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet InUsbBurn noSof sof timeout, reset usb phy tuning gpio: pin GPIOAO_3 (gpio 3) value is 1 Command: bcb uboot-command Start read misc partition datas! BCB hasn't any datas,exit! amlkey_init() enter! amlkey_init() 71: already init! [EFUSE_MSG]keynum is 4 [KM]Error:f[key_manage_query_size]L515:key[usid] not programed yet [KM]Error:f[key_manage_query_size]L515:key[deviceid] not programed yet Hit Enter or space or Ctrl+C key to stop autoboot -- : 0 card out (Re)start USB... USB0: USB3.0 XHCI init start Register 3000140 NbrPorts 2 Starting the controller USB XHCI 1.10 scanning bus 0 for devices... 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found ** Bad device usb 0 ** ** Bad device usb 1 ** ** Bad device usb 2 ** ** Bad device usb 3 ** reading emmc_autoscript 759 bytes read in 4 ms (184.6 KiB/s) ## Executing script at 01020000 reading u-boot.emmc ** Unable to read file u-boot.emmc ** reading uEnv.txt 1103 bytes read in 3 ms (358.4 KiB/s) reading /zImage 23357952 bytes read in 652 ms (34.2 MiB/s) reading /uInitrd 13608950 bytes read in 382 ms (34 MiB/s) reading /dtb.img 45989 bytes read in 4 ms (11 MiB/s) mac=00:df:04:00:38:30 [rsvmem] get fdtaddr NULL! rsvmem - reserve memory Usage: rsvmem check - check reserved memory rsvmem dump - dump reserved memory rsvmem check failed ## Loading init Ramdisk from Legacy Image at 13000000 ... Image Name: uInitrd Image Type: AArch64 Linux RAMDisk Image (gzip compressed) Data Size: 13608886 Bytes = 13 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Start read misc partition datas! info->magic = info->version_major = 1 info->version_minor = 0 info->slots[0].priority = 15 info->slots[0].tries_remaining = 7 info->slots[0].successful_boot = 0 info->slots[1].priority = 14 info->slots[1].tries_remaining = 7 info->slots[1].successful_boot = 0 info->crc32 = -1075449479 active slot = 0 active_slot is normal DTBO partition header is incorrect load dtb from 0x1000000 ...... Amlogic multi-dtb tool Single dtb detected ## Flattened Device Tree blob at 01000000 Booting using the fdt blob at 0x1000000 No valid dtbo image found libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND [rsvmem] fdt get prop fail. Loading Ramdisk to 7eb05000, end 7f7ff7b6 ... OK Loading Device Tree to 000000001fff1000, end 000000001ffff3a4 ... OK Starting kernel ... uboot time: 5974060 us
Discussion