четверг, 28 января 2016 г.

Amlogic S812 легкий Dual Boot

Дано: андроид приставка М8 с s812 на борту, плата M8 V8_8 20150923, прошивка k200.bcm4335.2015.201510211111 (U-boot-00000-g92ff5df-dirty(m8_n200C_v1@) (Oct 21 2015 - 10:20:19)).

Задача: сделать двойную загрузку линукс/андроид с минимальными затратами.

Проект в стадии реализации прерван...

Что нужно...
  1. Берем исходники ядра и компонентов с http://openlinux.amlogic.com:8000/download/ARM/, (хотя можно попробовать с родным ядром просто изменив строку параметров ядра.). Родной конфиг и дерево устройств DTS можно легко добыть из родной прошивки или из дампа  раздела boot.
  2. Собираем ядро в формате uImage. Примерный порядок действий  http://www.cnx-software.com/2014/03/10/amlogic-gpl-source-code-release-kernel-3-10-u-boot-and-drivers-wi-fi-nand-tvin-mali-gpu/
  3. Создаем recovery.img. (например так mkbootimg --kernel uImage --ramdisk ramdisk.gz --second myboard.dtb --base 10000000 --pagesize 2048 -o recovery.img)
  4. SD карту разбиваем на два раздела, первый (20-30мб) форматируем fat32 и кидаем туда recovery.img, второй делаем ext4 и развертываем туда любимый linuxroot.
  5. Грузимся с зажатой кнопкой для восстановления - должно загрузится новое ядро.


кусок Uboot лога:
update by key...
Enter USB burn
Try connect time out 1001, 1000, 1318
 sdio_detect return 1
[mmc_init] SDIO Port B:0, if_type=7, initialized OK!
Device: SDIO Port B
Manufacturer ID: 0
OEM: 0
Name: ran Speed: 20000000
Rd Block Len: 512
SD version 2.0
High Capacity: No
Capacity: 2028994560
Boot Part Size: 0
Bus Width: 4-bit

** Unable to open "aml_sdc_burn.ini" from mmc 0:1 --- file not exist**
reading aml_autoscript

** Unable to read "aml_autoscript" from mmc 0:1 **
enter recovery
Device: SDIO Port B
Manufacturer ID: 0
OEM: 0
Name: ran Speed: 20000000
Rd Block Len: 512
SD version 2.0
High Capacity: No
Capacity: 2028994560
Boot Part Size: 0
Bus Width: 4-bit
reading recovery.img

6811731 bytes read
## ANDROID Format IMAGE
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.33
   Image Type:   ARM Linux Kernel Image (lzo compressed)
   Data Size:    6784865 Bytes = 6.5 MiB
   Load Address: 00208000
   Entry Point:  00208000
   Verifying Checksum ... OK
    Ramdisk start addr = 0x12679000, len = 0x427
    Flat device tree start addr = 0x12679800, len = 0x547a magic=0xedfe0dd0
   Uncompressing Kernel Image ... OK

простая консоль на последовательный порт для отладки (в initramfs):

/bin/sh -i </dev/ttyS0 >/dev/ttyS0 2>&1