Мой сборщик и флешер

Neov

Member
Универсальное, удобное, быстрое, кроссплатформенное, самодостаточное решение для сборки и прошивки RTL87xx чипов. Отличная альтернатива ардуинам.
Сборка основана на waf, прошивка подсмотрена на форуме, требуется jlinkarm(.dll/.so/.dylib).
Что это дает:
  • Быстрый старт
  • Никаких bash, mingw, cygwin, binutils, makefile etc.
  • Кросплатформенно, требуется только Python 2.7 и arm-none-eabi-(gcc/nm/objcopy), которые есть почти под все ОС.
  • Быстр, быстрее make
    $time PATH=$PATH:/c/projects/wafmeba-RTL00MP3/tools/5.4\ 2016q3/bin/ mingw32-make
    ...
    real 1m21.065s
    user 0m0.015s
    sys 0m0.015s


    $time PATH=$PATH:/c/projects/wafmeba-RTL00MP3/tools/5.4\ 2016q3/bin/ mingw32-make -j
    ...
    real 0m38.266s
    user 0m0.015s
    sys 0m0.000s

    python waf build -j1
    ...
    Waf: Leaving directory `c:\projects\wafmeba-RTL00MP3\build'
    'build' finished successfully (55.487s)

    python waf build
    ...
    Waf: Leaving directory `c:\projects\wafmeba-RTL00MP3\build'
    'build' finished successfully (26.572s)
  • Флешер в комплекте
  • Любая IDE
how-to
  1. Установите Python 2.7, добавьте путь в PATH
  2. Скопируйте содержимое требуемой папки из applications
  3. Скопируйте файлы соответствующего выбранного проекта
  4. Если требуется, проведите настройку в wscript: пути к gcc, nm, objcopy; путь к библиотеке jlinkarm.
Основные команды
  • python waf configure - конфигурирование, выполняется единожды
  • python waf clean - очистка
  • python waf build - сборка
  • python waf ram - прямая загрузка в ram
  • python waf flash - прошивка
  • python waf reset - reset
  • python waf webfs - генерация образа webfs (для проекта RTL00_WEB)
Линковка идет в порядке содержимого файлов "__*". Список includes в файле _includes.
Для прошивки подойдет любой программатор, совместимый с jlinkarm(.dll/.so/...), т.е. подойдет и JLink OB, перепрошитый ST-Link.
GCC должен быть: либо в PATH, либо находиться в папке tools.

Во всех проектах, кроме PINE64SDK и RTL00MP3, требуется копия или символьная ссылка на RTL00MP3/RTL00_SDKV35a at master · pvvx/RTL00MP3 · GitHub

Бета версия. Отлажено пока только для RTL8710AF под Windows, Linux. Автор ответственности за порчу модулей/чипов не несёт :)

magres / wafmeba — Bitbucket
 
Последнее редактирование:

pvvx

Активный участник сообщества
@Neov - без полной реструктуризации SDK далеко не уехать. В оф.SDK много ошибок, связанных с кучей впихнутого хлама и переплетения десятков ненужных примеров, каждый из которых имеет свои ветки управления WiFi и прочего. Т.е. нет единого WiFi API и других интерфейсов (загрузки, к примеру). Так- же нет никакой возможности разбивки SDK на либы. Нет совместимости с разными boot-loader-ами (от разных версий SDK). Нет... Ну, а о том, что в оф. SDK нет 1/3 исходников и разговор не идет.
Из-за этих "нет" и "т.д." "телепузикам" сложно освоить SDK и работают с ним всего несколько чел на форуме - готовых примеров, кроме моих и на моей сборке SDK пока вообще нет.
Я только начал данный процесс, 50% сделано в моем SDK, но до завершения ещё далеко. Одному и на условиях хобби это долго, но со временем соберется на всё 100+%. До определенной стадии там будет полный бардак, а оптимизация и окончательная структуризация только в конце, когда будет переделано за 90% задач.

А сборка стандартного SDK (3.4) очень просто работает в IAR и делать ничего не требуется.
На "RTL-00/PADI iot stamp, для официального SDK 3.5a под Windows" не работает 50% периферии чипа. Закрыто программно в бинарных либах. Собирается из командной строки в Win и Линух и делать тоже ничего не требует.
Процесс линковки и используемые для этого утилиты - это последняя часть в глобальной реструктуризации SDK - она самая простая и имеет сотни решений на вкус и цвет. Python там является оптимальным решением, но пока нет общей ясности что и как придется собирать (как разобьется на библиотеки и прочее).
В вашем примере Python пожирает и транслирует весь хлам из SDK, а нужного там всего не более 50% для любого собираемого примера.
Кроме моей кривой на текущий момент сборки SDK скоро выйдет mbed вариант "add support for REALTEK_RTL8195AM"... Хоть какая-то альтернатива. Тогда и заживем :)
Там уже другой загрузчик (но тоже закрытый - в bin файле) и многое другое. Так-же процесс висит на создании WiFi API части...
В моей версии SDK, всё, кроме совсем внутренних потрахов WiFi драйвера, будет с исходниками. Это условие уже выполнено к 95%, включая заголовки и описания ВСЕХ рабочих структур ко всем процедурам WiFi драйвера (регистры RF тоже).
 
Последнее редактирование:

Neov

Member
@pvvx , внимательно смотрите в описание. Я не предлагаю свою версию SDK, я предлагаю свой метод сборки и прошивки, на примере официального SDK 3.5a. правим wscript и собираем альтернативный SDK, RTL00-mp3 и др.

А сборка стандартного SDK (3.4) очень просто работает в IAR и делать ничего не требуется.
Собирается из командной строки в Win и Линух и делать тоже ничего не требует.
Не на столько все радужно. Вам стоит попробовать.
 
Последнее редактирование:

pvvx

Активный участник сообщества
@pvvx , внимательно смотрите в описание. Я не предлагаю свою версию SDK, я предлагаю свой метод сборки и прошивки, на примере официального SDK 3.5a. правим wscript и собираем альтернативный SDK, RTL00-mp3 и др.
А в чем он "свой"?
Во первых претензий то нет, но дал вам описание что и как сейчас обстоят дела с разными SDK.
Что предлагаете собирать с помощью вашего wscript? Или точнее - а зачем оно всё (?), если нечего собирать и нет описания как, а то, что есть и так собирается путем скачивания и набора в командной строке mingw32-make.exe.
По поводу прошивки - а куда и что ваш вариант прошивает, если существует несколько вариантов?
Не на столько все радужно. Вам стоит попробовать.
Я пробовал. Вышло только одно "но" - пришлось поправить определение #ifeq ($(findstring CYGWIN, $(OS)), CYGWIN) в application.mk. На чистой операционке, не захламленной как у меня, и этого не надо.
В IAR просто переключил адаптер на Jlink и всё поехало.

Вопросов с вашим сборщиком мульон :)
Как с помощью вашего варианта запустить прошивку в RAM у RTL8711AM? (SDRAM после RESET отключена - её инициализация произойдет в boot, с калибровкой и стиранием, если не выставлен bit21 в control reg).
Как выбрать вариант загрузки в RAM? Их 4 штуки - разные биты в control reg.

Как выбрать вариант сборки со стандартными либами СИ или со встроенными в ROM? Тут ещё варианты - с обработкой в printf плавающей точки или без.
Надо лезть в программу питона и менять её (?):

Вариант 1 (встроенные либы, объем кода меньше):
LFLAGS += -nostdlib -Wl,-nostdlib
LIBS +=_platform_new _wlan
ADD_SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c
Если надо с_printf() с float -
ADD_SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c

Вариант 2 (стандартные либы, объем кода больше):
LFLAGS += --specs=nano.specs
LIBS +=_platform_new _wlan m c nosys gcc

Это пример к неокончательной версии.
По поводу прошивки - вопросов и вариантов тоже много. Без их выбора данная система не нужна.
Основной выбор у нас такой:
1) Переписывать или нет boot-loader
2) Каким номером писать прошивку (у Ameba 2 выбора - основная и OTA, у меня пока 5 номеров 0 (резервная), 1, 2, 3, 4 - номер прошивки.
4) Установка пинов переключения номера прошивки.
5) Коррекция заголовков прошивок Ameba и коррекция указателя на OTA прошивку в секторе 9. Без этого пины выбора в Ameba не работают. Кроме того если там назначено 2 пина, то первый не всегда работает (ошибка в их boot-ах) :)
6) Сброс калибровок в 9-ом секторе.
7) Прописывание MAC в 10-ом секторе в соответствии с форматом его свертки, а не по смещению в секторе. (Требуется вписать адрес и указатель c данными MAC в конец блоков. При чтении - развернуть упакованные данные в 512 байт и в них уже прочесть получившийся MAC)
 
Последнее редактирование:

Neov

Member
С этого и надо было начинать :)
Конечно, придется править, достаточно открыть wscript, внимательно его посмотреть и все станет ясным.
Вариант 1 (встроенные либы, объем кода меньше):
LFLAGS += -nostdlib -Wl,-nostdlib
LIBS +=_platform_new _wlan
ADD_SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c
Если надо с_printf() с float -
ADD_SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c
Открываем wscript и правим
Код:
    bld(
        features='ameba_link',
        source= AMEBA_BUILDLIST_SRC + AMEBA_BUILDLIST_DRAM + AMEBA_BUILDLIST_OBJS,
        lscript='rlx8195A-symbol-v02-img2.ld',
        lflags=['-mcpu=cortex-m3', '-mthumb', '-g', '--specs=nano.specs', '-nostartfiles', '-Os', '-Wl,--gc-sections', '-Wl,--cref', '-Wl,--entry=Reset_Handler', '-Wl,--no-enum-size-warning', '-Wl,--no-wchar-size-warning'],
        libdir='component/soc/realtek/8195a/misc/bsp/lib/common/GCC/',
        libs=['_platform', '_wlan', '_p2p', '_wps', '_rtlstd', '_websocket', '_xmodem', 'm', 'c', 'nosys', 'gcc'],
        target='app',
    )
При этом редактируем содержимое файла _build_src _build_objs. Страшно?

А в чем он "свой"?
Читаем первый абзац шапки.

Что предлагаете собирать с помощью вашего wscript? Или точнее - а зачем оно всё (?), если нечего собирать
Как это нечего? есть ваш SDK, есть rtl00-mp3, rtlhttpd и т.д.

По поводу прошивки - а куда и что ваш вариант прошивает, если существует несколько вариантов?
Пока только Image1 + Image2. Загрузка в RAM, и др. в планах.
 

pvvx

Активный участник сообщества
При этом редактируем содержимое файла _build_src _build_objs. Страшно?
Неа - мне что *.bat/.cmd, что *.py - уровень батника и при каждой трансляции переписываю как надо в данном случае :) При тестах только этим и приходится заниматься. Но как "телепузикам" поступать? Или эта тема только ваш личный блог достижений? :)
Я вам уже описал - пока ещё не до авто-сборки моей текущей свалки SDK. Нет полностью сформированных концепций и пока каждый раз там что-то меняется. Т.е. итоговый вариант ещё не сформирован и никаких четких рекомендаций не выработано для создания прошивальщика.
Для Ameba уже всё описано и там жестко и изменений наверно не будет. Но вам придется согласовать загрузчик из SDK с их Arduino загрузчиком для "телепузиков". Иначе там беда - зависание при некоторых разных калибровках-установках прописанных для Spic в 9-ом секторе. Ну и скорректировать описанное (адрес OTA в 9-ом секторе и заголовки прошивок) про пины переключения.
 
Последнее редактирование:

Neov

Member
Смотря кого считать "телепузиками". Отредактировать в блокноте пару файлов я не считаю непосильной задачей :)
Я вам уже описал - пока ещё не до авто-сборки моей текущей свалки SDK. Нет полностью сформированных концепций и пока каждый раз там что-то меняется. Т.е. итоговый вариант ещё не сформирован и никаких четких рекомендаций не выработано для создания прошивальщика.
Тем не менее, Ваш же SDK требует сборки :)
Тем не менее я готов развивать эту тему вместе с развитием Вашего SDK.
P.S. Уже оценили скорость компиляции? :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Отредактировать в блокноте пару файлов я не считаю непосильной задачей :)
Бывают вопросы и что такое "блокнот"?
Не берите примеры из программатора на pas - она писалась когда исследовался чип и там многое неправильно, как и в файлах *.jlink. Было многое неизвестно. А пока нет времени исправить.
 

Neov

Member
Бывают вопросы и что такое "блокнот"?
Тогда таким телепузикам тут явно не место
Не берите примеры из программатора на pas - она писалась когда исследовался чип и там многое неправильно, как и в файлах *.jlink. Было многое неизвестно.
Прошивка кажется сносной, но если Вам известен более правильный алгоритм, и Вы поделитесь, я бы внедрил с удовольствием
 

pvvx

Активный участник сообщества
Прошивка кажется сносной, но если Вам известен более правильный алгоритм, и Вы поделитесь, я бы внедрил с удовольствием
Описано уже: RTL871x Flash Memory Map
К битам выбора "запуска в RAM" RTL8710AF - загрузчик в ROM-BIOS надо прибавить BIT21 - он означает, что SDRAM инициализирована и туда записаны данные. Никак не влияет на ROM-BIOS, а смотрится в boot-loader-е и startup коде уже image, инициализировать или нет ему SDRAM. Если не выставлен - инициализирует SDRAM контроллер и калибрует с проверкой на запись (убивает данные там)...
Тогда таким телепузикам тут явно не место
Второе соо примерно от такого... :)
 

pvvx

Активный участник сообщества
В _build_dram, _build_objs, _build_src, _includes нет возможности вписать комментарии или сделать полный список, выбирая маркером, что нужно для текущего проекта.
 

pvvx

Активный участник сообщества
waf не мой, "я просто разместил объяву"
строчки закомментированы, не бойтесь :)
Т.е. их можно вырезать? :)
The Waf Book
90 килобайт бинарного коммента :)
Значит в SDK далее получите сотню мегабайт бинарной либы и один хидер.
 
Последнее редактирование:

Neov

Member
Т.е. их можно вырезать? :)
The Waf Book
90 килобайт бинарного коммента :)
Значит в SDK далее получите сотню мегабайт бинарной либы и один хидер.
вырезайте, если так мешает. Вообще waf лучше не трогать, он стандартный.
Этот коммент никуда далее не идёт.
 

pvvx

Активный участник сообщества
вырезайте, если так мешает. Вообще waf лучше не трогать, он стандартный.
Этот коммент никуда далее не идёт.
Файл build.axf тоже стандартный. Оставить его для вашей системы в SDK (остальное удалю)?
Получиться как раз типовая системка под waf :)
Собираться будет сверх быстро :)
 
Последнее редактирование:
Сверху Снизу