четверг, 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

21 комментарий:

  1. Очень интересно, проект продолжается или уже нет?

    ОтветитьУдалить
  2. Нет, выяснилось что плата с браком (похоже адресная линия А15 на память не разведена), поэтому памяти доступно всего 1 г( несмотря на физические 2 г).
    Вообщем интерес я потерял...
    Однако успел попробовать грузить Дебиан с СД карты - работает (естественно без всяких 3д и видео ускорений)

    ОтветитьУдалить
    Ответы
    1. Напиши как завел Дебиан!!!! Очень интересует!!!

      Удалить
    2. СД карту разбил на 2 раздела: 1 фат для размещения там ядра, 2 extfs и скопировать туда корень arm версии линукса. Не забыть добавить в cmdline ядра в конце console=tty0. Ну и правильный initramfs - указать откуда грузить систему.
      Както так...

      Удалить
    3. Буду разбираться. Ссылочки кинешь где почитать. Буду благодарен!!!

      Удалить
    4. Насчет ссылок не помогу, но отвечу на конкретные вопросы.

      Удалить
  3. cmdline ядра в конце console=tty0
    Это при компиляции добавлять или можно потом?
    У меня помню было при загрузки ругался на tty1 power off чтото такое.

    ОтветитьУдалить
    Ответы
    1. Да, при компиляции, и еще вставить root=/dev/(второй раздел сд карты), ну или править initram

      Удалить
  4. Скажите, есть исходники ядра на Amlogic и есть приставка на нем. Можно скомпилить ядро и бутлоадер или проблематично? И можно вытянуть конфигурацию ядра с этого устройства? Надеюсь не ступил я в вопросе)))

    ОтветитьУдалить
    Ответы
    1. Если железка сделана на основе распространенных референсов, то исходники ядра (и uboot) с сайта амложик скорее всего подойдут. Для компиляции ядра нужен DTS(конфиг оборудования) и собственно конфиг ядра, их можно вытащить из прошивки или подобрать. Для компиляции uboot (зачем,если можно использовать родной?) нужен конфиг, но его придется подбирать.

      Удалить
  5. Вытащил DTS из прошивки.
    Но пытался скомпилить с openlinux.amlogic.com на конфиг meson8n2_n200 и не получилось. Уже несколько файлов удалили и на готхабе закрыли проект.
    Скажите как Вы кимпилили на свою приставку?

    ОтветитьУдалить
    Ответы
    1. Что откуда удалили?
      вот исходники ядра http://openlinux.amlogic.com:8000/download/ARM/kernel/, я использовал старую версию arm-src-kernel-2015-01-15-321cfb5a46.tar.gz

      Удалить
  6. Когда компилишь по этому мануалу http://openlinux.amlogic.com:8000/download/doc/linux-3.14-buildroot-pkg-201512-release-v1.0.pdf по конфигу meson8n2_n200 то вылазиют ошибки что нет некоторых файлов на этом сервере и на гитхаб которого тоже уже нет.

    ОтветитьУдалить
    Ответы
    1. я собирал просто ядро, примерные шаги по ссылке в п.2

      Удалить
  7. Собрал я по мануалу, написал этим составителям, кое как помогли)
    Теперь не понятно как сделать п.4
    4.
    Insert SD card into your platform and reboot it into uboot. Replace original uboot
    with the new one under uboot prompt:
    # mmcinfo
    # ext2load mmc 0 ${loadaddr} u-boot.bin
    # store rom_write ${loadaddr} 0 60000
    # reset
    5.
    Enter uboot again, and execute “run bootsdcard” under the prompt:
    # defenv
    # saveenv
    # run bootsdcard

    ОтветитьУдалить
    Ответы
    1. Я имел ввиду что сборку ядра по тому мануалу делать, uboot можно родной оставить. Чтобы достоверно выяснить что там происходит нужно подключатся к дебаг консоли на последовательный порт (искать на плате). Как вариант - не понравился DTS.

      Удалить
  8. Вставляю в приставку сд карту, перегружаюсь(хоть со спичкой хоть нет) и ничего не происходит. Грузит Андроид.
    Может подскажите?

    ОтветитьУдалить
  9. Скажите, а с ядра как нибудь можно вытащить(изменить) строку инициализации?

    ОтветитьУдалить
    Ответы
    1. Честно - незнаю, и может не имеет смысла, если в ядре стоит использовать только параметры бутлоадера.
      Но можно поменять строку параметров бутлоадера (uboot). Доступ через консоль дебаг.

      Удалить
  10. Купил Uart попал в консоль, а вот как ее глянуть и изменить? На память не помните?

    ОтветитьУдалить
    Ответы
    1. чтобы войти в режим командной строки у меня ентер жать при загрузке. там будет подсказка - список команд. Команда на изменения параметров кажется setenv bootargs.

      Удалить