Сборка прошивки IskraJS и её прошивка: Что я делаю не так?

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем VGrishin, 3 окт 2016.

  1. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Попробовал сделать сборку прошивки. Cреда - DEBIAN (64-разрядный).
    Скачал компилятор gcc-arm-none-eabi-5_4-2016q3, установил, прописал путь.
    Клонировал ветку: git clone https://github.com/amperka/Espruino/tree/iskrajs
    Описания платы там почему-то не оказалось.
    Скопировал вручную ISKRAJS.py в соответствующий каталог.
    Дал команду ISKRAJS=1 RELEASE=1 make
    Вроде все сработало нормально.
    Кстати говоря, получившийся после компиляции исполняемый файл запускается в Линуксе и интерпретатор работает. Что странно....

    В Windows XP
    Запустил IDE.
    Зашел в FLASHER.
    В Advanced Firmware Update указал, где находится файл: file:///K:/espruino-ISKRA-2
    Нажал Advanced Flash Firmware.
    В соответствии с инструкцией нажимая RESET и BTN1 получил мигающие светодиоды.
    А затем получил сообщение Error downloading file....

    Вопрос, что я делаю не так?

    В теме "Компилим флэшеньку" нашел совет:
    "Нужно приклеивать бутлоадер. Поэтому есть простой скрипт: $ ./scripts/create_iskrajs_image.sh"
    Но возникли сомнения в том плане, что если затереть загрузчик в процессоре, то плата превратится просто в кирпич...
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Всё верно. Нужно `$ ./scripts/create_iskrajs_image.sh`. Плата не превратится в кирпич потому что сама логика Espruino Web IDE такова, что при прошивке, в подсунутом бинарнике она перепрыгивает через бутлоадер (в случае Iskra JS это 16 КБ) и начинает писать с первого байта непосредственно Espruino Firmware.
     
  3. VGrishin

    VGrishin Нуб

    Для начала выяснилось, что в клонированной ветке https://github.com/amperka/Espruino/tree/iskrajs такого скрипта просто нет. Скопировал его вручную.
    После запуска ./scripts/create_iskrajs_image.sh
    Вываливается куча warning
    а в конце
    make: *** [src/jswrap_espruino.o] Ошибка 1
    make: *** Ожидание завершения заданий...
    make: *** wait: Нет дочерних процессов. Останов.
    Build failed
    :(
     
  4. nailxx

    nailxx Официальный Нерд Администратор

    Это странно. Скрипт там есть: вы же его откуда-то скопировали?!

    Возможно, не переключили бранч после клона:

    Код (Bash):
    $ git clone https://github.com/amperka/espruino
    $ cd espruino
    $ git checkout iskrajs
    $ git branch
      ...
    * iskrajs
      master
    $ ls scripts/create_iskrajs_image.sh
    scripts/create_iskrajs_image.sh
     
  5. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Копировал из архивного файла, который находится там же, где и исходники git.

    Да, действительно. Хитрая штука этот git...

    После этого попытался скомпилировать. Любопытно то, что классический (он же рекомендуемый: export PATH=$PATH:.........) способ указания пути к исполняемым файлам компилятора на этот раз не работал. Пришлось путь прописывать непосредственно в /etc/profile.

    Далее прошла компиляция. С выдачей диагностики.
    vgrishin@debian:~/STM32/Iskra-JS-N2/espruino$ ISKRAJS=1 RELEASE=1 make
    LD espruino_1v86.1121_iskrajs.elf
    libs/crypto/mbedtls/library/ecp_curves.c: In function 'ecp_mod_p256k1':
    libs/crypto/mbedtls/library/ecp_curves.c:1209:19: warning: inlining failed in call to 'ecp_mod_koblitz.constprop': --param inline-unit-growth limit reached [-Winline]
    static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t p_limbs,
    ^
    libs/crypto/mbedtls/library/ecp_curves.c:1320:11: warning: called from here [-Winline]
    return( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) );
    ^
    libs/crypto/mbedtls/library/ecp_curves.c: In function 'ecp_mod_p224k1':
    libs/crypto/mbedtls/library/ecp_curves.c:1209:19: warning: inlining failed in call to 'ecp_mod_koblitz.constprop': --param inline-unit-growth limit reached [-Winline]
    static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t p_limbs,
    ^
    libs/crypto/mbedtls/library/ecp_curves.c:1305:11: warning: called from here [-Winline]
    return( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) );
    ^
    libs/crypto/mbedtls/library/ecp_curves.c: In function 'ecp_mod_p192k1':
    libs/crypto/mbedtls/library/ecp_curves.c:1209:19: warning: inlining failed in call to 'ecp_mod_koblitz.constprop': --param inline-unit-growth limit reached [-Winline]
    static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t p_limbs,
    ^
    libs/crypto/mbedtls/library/ecp_curves.c:1288:11: warning: called from here [-Winline]
    return( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) );
    ^
    GEN espruino_1v86.1121_iskrajs.lst
    GEN espruino_1v86.1121_iskrajs.bin
    bash scripts/check_size.sh espruino_1v86.1121_iskrajs.bin
    GEN espruino_1v86.1121_iskrajs.hex
    PASS - size of 434120 is under 770048 bytes
    Это нормально, или как? IMHO скорее всего - нет.
    Тем более, что при попытке прошить получившийся файл espruino_1v86.1121_iskrajs.bin опять появилась диагностика Error downloading file....
    Может, IDE с локального диска вообще не прошивает? Или имя файла необходимо задавать не так как у меня: file:///K:/espruino_1v86.1121_iskrajs.bin
    (Прошивку я скопировал на диск K )

    Кстати говоря, сколько примерно должна длиться прошивка? Если коннект на скорости 9600 бит в секунду, то минут 8...
     
    Последнее редактирование: 5 окт 2016
  6. nailxx

    nailxx Официальный Нерд Администратор

    Warning’и при компиляции — это нормально для Espruino. Всё в порядке.

    Насколько я знаю, да, шить файл с винта через `file:///...` нельзя из-за политики безопасности Chrome Applications. Можете поднять какой-нибудь примитивный файл-сервер в директрории, где прошивка лежит.

    Например:

    Код (Bash):
    $ cd /path/to/my/espruino/dir
    $ python3 -m http.server
    Serving HTTP on 0.0.0.0 port 8000 ...
    Ну и после этого грузить http://localhost:8000/espruino_1v86.1121_iskrajs.bin
     
  7. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Сработало.

    Но радость оказалась несколько преждевременной...
    После загрузки, которая прошла без диагностических сообщений и вроде бы нормально,
    загорелся LED1. И IDE перестал находить порт...
    Кнопка RST, а также отключение и подключение платы эффекта не дали.

    Normal Firmware Update сработал нормально и работоспособность платы восстановилась.

    Похоже, что с помощью команд
    Код (Bash):
    $ git clone https://github.com/amperka/espruino
    $ cd espruino
    $ git checkout iskrajs
    $ git branch
    скачалась какая-то не та ветка кода...

    Или даже не знаю, что и думать...
     
  8. nailxx

    nailxx Официальный Нерд Администратор

    А если перед RST зажать BTN1, плата переходит в режим бутлоадера? Т.е. мигают ли попеременно LED1 и BUSY?
     
  9. VGrishin

    VGrishin Нуб

    Здравствуйте!
    Да. Иначе бы не удалось сделать Normal Firmware Update.
     
  10. nailxx

    nailxx Официальный Нерд Администратор

    Тоже верно… Это странно, т.к. если вы ничего в коде не меняли, в рамках обычного Firmware Update вам шьётся абсолютно такой же .bin.

    Можете сравнить то, что у вас с http://js.amperka.ru/binaries/espruino_1v86.164_iskrajs.bin?

    Хотя я вижу, что у вас даже не та версия получается :-/

    Можно несколько верхних строк `$ git log` после переключения в бранч `iskrajs`?
     
  11. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Скачал все еще раз:
    Код (Bash):

    vgrishin@debian:~/STM32/Iskra-JS-N3$ git clone https://github.com/amperka/espruino
    Cloning into 'espruino'...
    remote: Counting objects: 31888, done.
    remote: Total 31888 (delta 0), reused 0 (delta 0), pack-reused 31888
    Receiving objects: 100% (31888/31888), 49.78 MiB | 29 KiB/s, done.
    Resolving deltas: 100% (21425/21425), done.
    Checking out files: 100% (2236/2236), done.
    vgrishin@debian:~/STM32/Iskra-JS-N3$ cd espruino
    vgrishin@debian:~/STM32/Iskra-JS-N3/espruino$ git checkout iskrajs
    Branch iskrajs set up to track remote branch iskrajs from origin.
    Switched to a new branch 'iskrajs'
    vgrishin@debian:~/STM32/Iskra-JS-N3/espruino$ git branch
    * iskrajs
      master
    vgrishin@debian:~/STM32/Iskra-JS-N3/espruino$
     
    А вот и log.
    Код (Bash):
    vgrishin@debian:~/STM32/Iskra-JS-N3/espruino$ git log
    commit 521ccec71adf57ab89d205c8fcc6af9d0e12d8a6
    Merge: 9013ae5 b03f627
    Author: niggor <zotov.bmstu@gmail.com>
    Date:   Mon Sep 12 12:20:31 2016 +0300

        Merge pull request #1 from amperka/https
       
        added Https module to binary

    commit b03f6277c95b433ef9b0ce9b6a7b595abdf47799
    Author: Harry Morgan <zotov.bmstu@gmail.com>
    Date:   Fri Sep 9 20:12:53 2016 +0300

        added tls and crypto modules to makefile

    commit c1da7ee2e78747d20d680538b046cc70a6ac692f
    Author: Harry Morgan <zotov.bmstu@gmail.com>
    Date:   Fri Sep 9 19:17:58 2016 +0300

        add native https support

    commit 9013ae5105468975a35324584c79e96e207736e5
    Merge: 72ed417 703ce8a
    Author: Harry Morgan <zotov.bmstu@gmail.com>
    Date:   Fri Sep 9 18:57:22 2016 +0300

        Merge branch 'master' into iskrajs
       
        обновление ветки iskrajs до оригинальной espruino/Espruino master

    commit 703ce8a6b785c18c5823f6c8597160176cda1127
    Author: Gordon Williams <gw@pur3.co.uk>
    Date:   Fri Sep 9 16:14:17 2016 +0100

        fix #916

    commit 0cdbf28a36155a2af061ef885b3ed738a66eaccf
    Author: Gordon Williams <gw@pur3.co.uk>
    Date:   Fri Sep 9 15:15:39 2016 +0100

        Update bootloader. Need to leave much more space now for some reason (my GCC version?). Now allow a long (3 sec) press to drop through to Espruino but without loading saved code

    commit e791616c161cb7bea222098ac90235b402e62ffa
    Author: Gordon Williams <gw@pur3.co.uk>
    Date:   Fri Sep 9 14:50:21 2016 +0100

        fix saving with bootloader

    commit 50f4f82d9b7d144bc221fa69bf99b44272cb3a2c
    Author: Gordon Williams <gw@pur3.co.uk>
    :
     
  12. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Попробовал загрузить сегодня прошивку со своего сервера:
    http://559t.iki.rssi.ru/~vgrishin/TEMP/espruino_1v86.1121_iskrajs.bin
    Получил сообщение Error downloading file

    Скачал с этого сервера файл и подсчитал контрольные суммы файла,
    получившегося после компиляции и скачанного с сервера. Они совпали.

    Тот же самый файл загружается с localhost:8000/espruino_1v86.1121_iskrajs.bin
    нормально, но не работает...
     
  13. VGrishin

    VGrishin Нуб

    Здравствуйте!

    А вот нельзя ли как-нибудь скачать исходники именно той прошивки, которая грузится по команде "Normal Firmware Update"?
    Естественно с Makefile, библиотеками, заголовочными файлами, скриптами и т.д.,
    чтобы можно было ее попробовать скомпилировать. И загрузить.
     
  14. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Есть какие-либо соображения, в какую сторону копать?

    Наличие требуемых компилятором 32-разрядных библиотек я проверил.
    Они есть в /usr/lib32/
    libc.a и libc.so непосредственно, а libcurses.a и libcurces.so в виде ссылок, указывающих на эти библиотеки. Ссылки не оборванные.

    IMHO есть только три варианта.
    Либо скачивается неправильная прошивка, о чем собственно свидетельствует диагностика в процессе трансляции, либо используется неправильный компилятор (сейчас установлен gcc-arm-none-eabi-5_4-2016q3), либо подключаются какие-то не те библиотеки.
    Больше никаких вариантов я не вижу.

    Сам процесс заливки прошивки (нормальной) проходит успешно как локально (с помощью python3 -m http.server), так и с моего сервера. Здесь проблем нет.

    Кстати, какой длины получается нормальный *.bin файл?
    У меня получается порядка 428 кб.

    Собственно все это дело я затеял с единственной целью - убрать глюк с некорректным формированием двух синусоидальных сигналов, о чем я уже писал (http://forum.amperka.ru/threads/Удалось-ли-кому-нибудь-получить-два-РАЗНЫХ-сигнала-на-аналоговых-выходах-a4-и-a5.9508/). Я писал bug report.
    G.Williams признал наличие проблемы и исправил код. Теперь осталось только его скомпилировать. Но вот здесь обнаружилась такая засада....
     
    Последнее редактирование: 13 окт 2016
  15. VGrishin

    VGrishin Нуб

    Здравствуйте!

    Посыпаю голову пеплом :)

    Забыл, что необходимо запускать скрипт
    Код (Bash):
    ./scripts/create_iskrajs_image.sh
    После этого все заработало. Внес коррекции, которые сделал G.Williams.
    После этого получил sin и cos. Максимальная частота формирования отсчетов получилась около 100 КГц. Наверняка контроллер позволяет получить частоты минимум на порядок большие. Но для этого необходимо писать на С и разбираться с программированием таймеров.
    Похоже, что реализуется цифро-аналоговое преобразование с разрядностью 12 бит.

    Кстати говоря, скрипт
    Код (Bash):
    ./scripts/create_iskrajs_image.sh
    достаточно любопытный.
    Вроде как он приклеивает загрузчик. Но после его использования длина бинарного файла увеличивается более чем вдвое... Может, кроме приклейки загрузчика он делает что-то еще?
    Просто 600 Кб для загрузчика IMHO многовато.
     
    sys нравится это.