Прошивка для esp32 nodemcu lua на базе последней idf4.4

Тема в разделе "ESP8266, ESP32", создана пользователем serg3295, 11 июл 2022.

  1. ИгорьК

    ИгорьК Гуру

    Добрый день!

    Детский вопрос. Новый дебиан виртуальный. После git pull (то есть первичный запрос репозитория), install.sh - должна ли произойти сборка (make) на дефолтных настройках? make menuconfig вызывается. Указываю только какие необходимы модули.

    make вылетает с ошибкой:
    Код (Bash):
    [ 95%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/ow.c.obj
    /home/igor/dev-esp32-breack/components/modules/node.c: In function 'node_info':
    /home/igor/dev-esp32-breack/components/modules/node.c:475:45: error: expected expression before ',' token
      475 |       add_int_field(L,    BUILDINFO_LFS_SIZE,   "lfs_size");
          |                                             ^
    [ 95%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/pipe.c.obj
    make[4]: *** [esp-idf/modules/CMakeFiles/__idf_modules.dir/build.make:365: esp-idf/modules/CMakeFiles/__idf_modules.dir/node.c.obj] Error 1
    make[4]: *** Waiting for unfinished jobs....
    [ 96%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/rotary_driver.c.obj
    make[4]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make[3]: *** [CMakeFiles/Makefile2:5130: esp-idf/modules/CMakeFiles/__idf_modules.dir/all] Error 2
    make[3]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make[2]: *** [Makefile:136: all] Error 2
    make[2]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make failed with exit code 2, output of the command is in the /home/igor/dev-esp32-breack/build/log/idf_py_stderr_output_61230 and /home/igor/dev-esp32-breack/build/log/idf_py_stdout_output_61230
    make[1]: *** [Makefile:18: all] Error 2
    make[1]: Leaving directory '/home/igor/dev-esp32-breack'
    make: *** [Makefile:10: all] Error 2
    igor@debianTEST:~/dev-esp32-breack$
     
    ================

    В чем причина? Что-то где-то не указано?

    И, конечно, не хватает документации. Раз заявлена поддержка новых модулей - их где-то нужно указывать до сборки. Где? Вы частично разъясняли такие вещи как, например, "make IDFPY_ARGS="set-target esp32с6"" но где-то же это должно быть собрано в одном месте, иначе получается мы работаем по слухам?

    ==================

    И самый прикол: Если отправить на поиск строку "make IDFPY_ARGS="set-target esp32с6" из предыдущего абзаца, то гугл приводит нас на этот сайт и никуда больше. Это уже масонская ложа? :)

    upload_2024-12-16_9-7-34.png
     
    Последнее редактирование: 16 дек 2024 в 10:09
  2. serg3295

    serg3295 Гуру

    Да, сборка может быть произведена с дефолтными настройками.

    При смене субмодулей (версии esp-idf) необходимо выполнить команду
    git submodule update --recursive

    При смене цели, а тем более субмодулей, рекомендуется произвести очистку каталога сборки.
    make clean
    make fullclean
    ./install.sh
    make menuconfig

    Для сборки esp-idf/sdk используются утилиты Espressif. Поэтому можно пользоваться документацией на оригинальном сайте Espressif.
    Например, для установки цели ссылка.
    Тот вариант, что предложил я для смены цели, просто передаёт параметры в утилиту idf.py

    Дополнение.

    Документация на новый модуль 'console' и скорректированная документация на модуль 'uart' находятся на сайте.
    Включение модулей в прошивку производится там же, где и всех остальных модулей, в menuconfig.
     
    Последнее редактирование: 16 дек 2024 в 12:08
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Гуру

    Та же картинка. И, замечу, это свежий pull без всякой истории на машине. Может, дело в том что это Дебиан?


    Код (Bash):

    [ 95%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/otaupgrade.c.obj
    [ 95%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/ow.c.obj
    [ 95%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/pipe.c.obj
    /home/igor/dev-esp32-breack/components/modules/node.c: In function 'node_info':
    /home/igor/dev-esp32-breack/components/modules/node.c:475:45: error: expected expression before ',' token
      475 |       add_int_field(L,    BUILDINFO_LFS_SIZE,   "lfs_size");
          |                                             ^
    make[4]: *** [esp-idf/modules/CMakeFiles/__idf_modules.dir/build.make:365: esp-idf/modules/CMakeFiles/__idf_modules.dir/node.c.obj] Error 1
    make[4]: *** Waiting for unfinished jobs....
    [ 96%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/rotary_driver.c.obj
    make[4]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make[3]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make[3]: *** [CMakeFiles/Makefile2:5130: esp-idf/modules/CMakeFiles/__idf_modules.dir/all] Error 2
    make[2]: *** [Makefile:136: all] Error 2
    make[2]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make failed with exit code 2, output of the command is in the /home/igor/dev-esp32-breack/build/log/idf_py_stderr_output_73652 and /home/igor/dev-esp32-breack/build/log/idf_py_stdout_output_73652
    make[1]: *** [Makefile:18: all] Error 2
    make[1]: Leaving directory '/home/igor/dev-esp32-breack'
    make: *** [Makefile:10: all] Error 2
    igor@debianTEST:~/dev-esp32-breack$
     

    Пы Сы. Вы сами попробуйте - найдется же виртуальная машина какая-нибудь.
     
  4. serg3295

    serg3295 Гуру

    Покажите, пожалуйста, содержимое файла ${PROJECT_DIR}/components/platform/partitions.csv
     
    ИгорьК нравится это.
  5. serg3295

    serg3295 Гуру

    И сделайте скриншот из Git-graph. Вот такой кусочек.
    16-12-24_11-18.png
    Мне интересна ветка dev-esp32
     
    ИгорьК нравится это.
  6. ИгорьК

    ИгорьК Гуру

    upload_2024-12-16_11-49-51.png

    С удаленной машиной я работаю через ssh терминал, там нет VSCode и, следовательно, Git-graph.

    На домашнем компьютере (сейчас доступа нет) я сделал Git pull и все поломалось (Сильно то не расстроился, есть еще где скомпилировать). Но сейчас показать не могу.
     
  7. serg3295

    serg3295 Гуру

    Файл partitions нормальный.

    VS Code умеет работать через ssh на удалённой машине. Я когда-то устанавливал его на Raspberry 4.
    А вот расширения не факт что будут работать удалённо. В итоге я быстро отказался от такой схемы, и использую на удалённых машинах neovim.

    Что касается сборки.

    Я полагаю, вы использовали на дебиане свежий git clone, а не git pull
    1. Проверяем, установлены ли на этом дебиане следующие команды (должны быть, конечно, но вдруг...):
    - grep
    - cut
    - tr
    - awk

    2. Проверяем, что у нас вот так:
    Код (Bash):
    git status
    On branch dev-esp32
    Your branch is up to date with 'upstream/dev-esp32'.

    nothing to commit, working tree clean
     
    3. смотрим в хвост файла components/modules/CMakeLists.txt
    там должны быть строчки
    Код (Bash):
    execute_process(
    COMMAND grep "^lfs,.*" ${PROJECT_DIR}/components/platform/partitions.csv
    COMMAND cut -d, -f5
    COMMAND tr -d " "
    COMMAND awk "{print strtonum( $1 )}"
    OUTPUT_STRIP_TRAILING_WHITESPACE
    OUTPUT_VARIABLE buildinfo_lfs_size
    )

    file(CONFIGURE OUTPUT ${PROJECT_DIR}/components/platform/include/buildinfo.h
      CONTENT "${buildinfo_h}"
      @ONLY
    )

     
     
    ИгорьК нравится это.
  8. serg3295

    serg3295 Гуру

    Возможно, в некоторых версиях Linux не установлене команда tr "из коробки".
    Хотя это ведь coreutils.

    Поменяйте одну строчку в components/modules/CMakeLists.txt.
    Код (Text):
    diff --git a/components/modules/CMakeLists.txt b/components/modules/CMakeLists.txt
    index 0fab0691..98929efa 100644
    --- a/components/modules/CMakeLists.txt
    +++ b/components/modules/CMakeLists.txt
    @@ -252,7 +252,7 @@ execute_process(
    execute_process(
    COMMAND grep "^lfs,.*" ${PROJECT_DIR}/components/platform/partitions.csv
    COMMAND cut -d, -f5
    -COMMAND tr -d " "
    +COMMAND sed "s/[[:space:]]*//g"
    COMMAND awk "{print strtonum( $1 )}"
    OUTPUT_STRIP_TRAILING_WHITESPACE
    OUTPUT_VARIABLE buildinfo_lfs_size
     
    Последнее редактирование: 16 дек 2024 в 14:52
    ИгорьК нравится это.
  9. ИгорьК

    ИгорьК Гуру

    Конечно.

    Код (Bash):

    igor@debianTEST:~/dev-esp32-breack$ git pull origin dev-esp32
    From https://github.com/nodemcu/nodemcu-firmware
    * branch              dev-esp32  -> FETCH_HEAD
    Already up to date.
    igor@debianTEST:~/dev-esp32-breack$
     

    Код (Bash):
    igor@debianTEST:~/dev-esp32-breack$ git status
    On branch dev-esp32
    Your branch is up to date with 'origin/dev-esp32'.

    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            "sdkconfig\\"

    nothing added to commit but untracked files present (use "
    git add" to track)
    igor@debianTEST:~/dev-esp32-breack$


    Код (Bash):

    execute_process(
      COMMAND ${CMAKE_COMMAND} -E env TZ=UTC0 -- git show --quiet --date=format-local:%Y%m%d%H%M --format=%cd HEAD
      OUTPUT_STRIP_TRAILING_WHITESPACE
      OUTPUT_VARIABLE release_dts
    )

    execute_process(
    COMMAND grep "^lfs,.*" ${PROJECT_DIR}/components/platform/partitions.csv
    COMMAND cut -d, -f5
    COMMAND tr -d " "
    COMMAND awk "{print strtonum( $1 )}"
    OUTPUT_STRIP_TRAILING_WHITESPACE
    OUTPUT_VARIABLE buildinfo_lfs_size
    )

    file(CONFIGURE OUTPUT ${PROJECT_DIR}/components/platform/include/buildinfo.h
      CONTENT "${buildinfo_h}"
      @ONLY
    )
     
     
  10. ИгорьК

    ИгорьК Гуру

    Поменял:

    Код (Bash):
    execute_process(
      COMMAND ${CMAKE_COMMAND} -E env TZ=UTC0 -- git show --quiet --date=format-local:%Y%m%d%H%M --format=%cd HEAD
      OUTPUT_STRIP_TRAILING_WHITESPACE
      OUTPUT_VARIABLE release_dts
    )

    execute_process(
    COMMAND grep "^lfs,.*" ${PROJECT_DIR}/components/platform/partitions.csv
    COMMAND cut -d, -f5
    COMMAND sed "s/[[:space:]]*//g"
    COMMAND awk "{print strtonum( $1 )}"
    OUTPUT_STRIP_TRAILING_WHITESPACE
    OUTPUT_VARIABLE buildinfo_lfs_size
    )

    file(CONFIGURE OUTPUT ${PROJECT_DIR}/components/platform/include/buildinfo.h
      CONTENT "${buildinfo_h}"
      @ONLY
    )
     
    Там же:

    Код (Bash):
    [ 94%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/can.c.obj
    [ 94%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/uart.c.obj
    [ 94%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/eth.c.obj
    In file included from /home/igor/dev-esp32-breack/components/modules/dac.c:9:
    /home/igor/dev-esp32-breack/sdk/esp32-esp-idf/components/driver/deprecated/driver/dac.h:16:2: warning: #warning "The legacy DAC driver is deprecated, please use `driver/dac_oneshot.h`, `driver/dac_cosine.h` or `driver/dac_continuous.h` instead" [-Wcpp]
       16 | #warning "The legacy DAC driver is deprecated, please use `driver/dac_oneshot.h`, `driver/dac_cosine.h` or `driver/dac_continuous.h` instead"
          |  ^~~~~~~
    /home/igor/dev-esp32-breack/components/modules/node.c: In function 'node_info':
    /home/igor/dev-esp32-breack/components/modules/node.c:475:45: error: expected expression before ',' token
      475 |       add_int_field(L,    BUILDINFO_LFS_SIZE,   "lfs_size");
          |                                             ^
    make[4]: *** [esp-idf/modules/CMakeFiles/__idf_modules.dir/build.make:365: esp-idf/modules/CMakeFiles/__idf_modules.dir/node.c.obj] Error 1
    make[4]: *** Waiting for unfinished jobs....
    [ 94%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/i2s.c.obj
    In file included from /home/igor/dev-esp32-breack/sdk/esp32-esp-idf/components/driver/deprecated/driver/i2s.h:23,
                     from /home/igor/dev-esp32-breack/components/modules/i2s.c:18:
    /home/igor/dev-esp32-breack/sdk/esp32-esp-idf/components/driver/deprecated/driver/adc.h:19:2: warning: #warning "legacy adc driver is deprecated, please migrate to use esp_adc/adc_oneshot.h and esp_adc/adc_continuous.h for oneshot mode and continuous mode drivers respectively" [-Wcpp]
       19 | #warning "legacy adc driver is deprecated, please migrate to use esp_adc/adc_oneshot.h and esp_adc/adc_continuous.h for oneshot mode and continuous mode drivers respectively"
          |  ^~~~~~~
    /home/igor/dev-esp32-breack/sdk/esp32-esp-idf/components/driver/deprecated/driver/i2s.h:27:2: warning: #warning "This set of I2S APIs has been deprecated, please include 'driver/i2s_std.h', 'driver/i2s_pdm.h' or 'driver/i2s_tdm.h' instead. if you want to keep using the old APIs and ignore this warning, you can enable 'Suppress leagcy driver deprecated warning' option under 'I2S Configuration' menu in Kconfig" [-Wcpp]
       27 | #warning "This set of I2S APIs has been deprecated, \
          |  ^~~~~~~
    make[4]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make[3]: *** [CMakeFiles/Makefile2:5130: esp-idf/modules/CMakeFiles/__idf_modules.dir/all] Error 2
    make[3]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make[2]: *** [Makefile:136: all] Error 2
    make[2]: Leaving directory '/home/igor/dev-esp32-breack/build'
    make failed with exit code 2, output of the command is in the /home/igor/dev-esp32-breack/build/log/idf_py_stderr_output_85417 and /home/igor/dev-esp32-breack/build/log/idf_py_stdout_output_85417
    make[1]: *** [Makefile:18: all] Error 2
    make[1]: Leaving directory '/home/igor/dev-esp32-breack'
    make: *** [Makefile:10: all] Error 2
     
     
  11. serg3295

    serg3295 Гуру

    Что ж, радует, что пакет coreutils со всеми утилитами на месте. Строчку с tr можно возвращать
    Что в файле /components/platform/include/buildinfo.h после компиляции?
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Код (Bash):
     cat buildinfo.h
    #ifndef __BUILDINFO_H__
    #define __BUILDINFO_H__

    #ifdef CONFIG_LUA_NUMBER_INT64
    #define BUILDINFO_BUILD_TYPE "integer"
    #else
    #ifdef CONFIG_LUA_NUMBER_DOUBLE
    #define BUILDINFO_BUILD_TYPE "double"
    #else
    #define BUILDINFO_BUILD_TYPE "float"
    #endif
    #endif

    #define USER_PROLOG ""
    #define BUILDINFO_BRANCH "dev-esp32"
    #define BUILDINFO_COMMIT_ID "7b21778e6d9d3c78615abcd291ec7a65699759a6"
    #define BUILDINFO_RELEASE "1.4.0-master_20151229 +904"
    #define BUILDINFO_RELEASE_DTS "202412100008"
    #define BUILDINFO_BUILD_DATE "2024-12-16 13:57"
    #define BUILDINFO_MODULES "adc,bit,console,file,gpio,http,httpd,i2c,mqtt,net,node,ow,pipe,sjson,spi,struct,time,tmr,uart,wifi"
    #define BUILDINFO_LFS_SIZE
    #endif  /* __BUILDINFO_H__ */
    igor@debianTEST:~/dev-esp32-breack/components/platform/include$
     
     
  13. ИгорьК

    ИгорьК Гуру

    @serg3295 , вы сами не пробовали сделать git clone в новую директорию и попробовать скомпилировать?
     
  14. serg3295

    serg3295 Гуру

    Я сейчас через телефон в интернете. Мне 1,5 Гб sdk не скачать будет. Только вечером могу проверить.
    Пока что видно, что не вычисляется BUILDINFO_LFS_SIZE. Поле в buildinfo.h пустое. А почему - непонятно.
     
    ИгорьК нравится это.
  15. serg3295

    serg3295 Гуру

    Гляньте ещё права доступа к внутренностям проекта. Может нет прав на чтение partitions.csv и ему неоткуда брать размер LFS для расчёта.
    Других мыслей у меня пока нет.
     
    ИгорьК нравится это.
  16. serg3295

    serg3295 Гуру

    Нет, всё-таки есть :)
    Что написано в файле sdkconfig про partitions?
    Код (C++):
    #
    # Partition Table
    #
    # CONFIG_PARTITION_TABLE_SINGLE_APP is not set
    # CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
    # CONFIG_PARTITION_TABLE_TWO_OTA is not set
    CONFIG_PARTITION_TABLE_CUSTOM=y
    CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="components/platform/partitions.csv"
    CONFIG_PARTITION_TABLE_FILENAME="components/platform/partitions.csv"
    CONFIG_PARTITION_TABLE_OFFSET=0x8000
    CONFIG_PARTITION_TABLE_MD5=y
    # end of Partition Table
     
     
    ИгорьК нравится это.
  17. ИгорьК

    ИгорьК Гуру

    upload_2024-12-16_15-54-5.png
     
  18. serg3295

    serg3295 Гуру

    Я склонировал в другую папку на свой ноутбук. Всё собралось без ошибок. В menuconfig не заходил.

    ❯ git clone --branch dev-esp32 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git nodemcu-firmware-esp32
    ❯ cd nodemcu-firmware-esp32
    ❯ git status
    On branch dev-esp32
    Your branch is up to date with 'origin/dev-esp32'.

    nothing to commit, working tree clean
    ❯ git submodule init
    ❯ git submodule update --recursive
    ❯ ./install.sh
    ......

    ❯ make
    . /home/serg/temp/nodemcu-firmware-esp32/sdk/esp32-esp-idf/export.sh && make "all"
    Setting IDF_PATH to '/home/serg/temp/nodemcu-firmware-esp32/sdk/esp32-esp-idf'
    .....
    .......
    Project build complete. To flash, run this command:
    ...

    Затем в menuconfig подключил те же модули, что и у вас. Всё собралось без ошибок.

    Я не вижу какой командой вы клонируете репо, возможно что-то не так получается с путями для CMake.
    Попробуйте набрать те же команды, что я выше привёл. Если снова вылезет ошибка, выкладывайте под спойлер всю портянку вывода от команды make, будем смотреть. Обычно ошибка в выводе проявляется чуть раньше, отсутствие значения для buildinfo_lfs_size может быть уже следствием.

    Попробуйте выполнить в командной строке команду
    ❯ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5 | tr -d " " | awk "{print strtonum( \$1 )}"
    65536

    Она делает то же самое, что CMake. Выведет 65636? Если нет, отрезайте с конца по одной команде и смотрите вывод.
    ❯ grep "^lfs,.*" ./components/platform/partitions.csv
    lfs, 0xC2, 0x01, , 0x10000 #нашли строчку с lfs
    ❯ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5
    0x10000 получили пятый столбец
    ❯ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5 | tr -d " "
    0x10000 #обрезали пробелы

    И мне непонятно откуда в вашем buildinfo.h поле BUILDINFO_RELEASE "1.4.0-master_20151229 +904"
    У меня
    #define BUILDINFO_RELEASE "tmr-libmain-binpatch150 +889"
    проверка
    ❯ git describe --tags --long
    tmr-libmain-binpatch150-889-g7b21778e
    Скорее всего ни на что не влияет, но почему разные то?
     
    Последнее редактирование: 16 дек 2024 в 18:33
    ИгорьК нравится это.
  19. ИгорьК

    ИгорьК Гуру

    Код (Bash):
    igor@debianTEST:~/nodemcu-firmware-esp32$ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5 | tr -d " " | awk "{print strtonum( \$1 )}"
    awk: line 2: function strtonum never defined
    igor@debianTEST:~/nodemcu-firmware-esp32$
     
    Код (Bash):
    igor@debianTEST:~/nodemcu-firmware-esp32$ grep "^lfs,.*" ./components/platform/partitions.csv
    lfs,           0xC2, 0x01,           , 0x10000
    igor@debianTEST:~/nodemcu-firmware-esp32$
     
    Код (Bash):
    igor@debianTEST:~/nodemcu-firmware-esp32$ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5
    0x10000
    igor@debianTEST:~/nodemcu-firmware-esp32$
     
    Код (Bash):
    igor@debianTEST:~/nodemcu-firmware-esp32$ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5 | tr -d " "
    0x10000
    igor@debianTEST:~/nodemcu-firmware-esp32$
     
    Код (Bash):
    igor@debianTEST:~/nodemcu-firmware-esp32$ git describe --tags --long
    1.4.0-master_20151229-904-g7b21778e
     
    Код (Bash):
    igor@debianTEST:~/nodemcu-firmware-esp32$ grep "^lfs,.*" ./components/platform/partitions.csv | cut -d, -f5 | tr -d " " | awk "{  print strtonum( \$1 )}"
    awk: line 2: function strtonum never defined
     
     
  20. serg3295

    serg3295 Гуру

    Понятно.
    Тогда gawk надо установить.
    И проверить с awk "{ print strtonum( \$1 )}"
    Если не пойдёт, то gawk "{ print strtonum( \$1 )}"
     
    ИгорьК нравится это.