Початок роботи#
Цей посібник охоплює покроковий процес налаштування системи контролю версій, отримання та збирання вихідного коду для певного порту, побудову документації, запуск тестів, а також опис структури директорій кодової бази MicroPython.
Контроль версій за допомогою git#
MicroPython розміщено на GitHub та використовує Git для контролю версій. Робочий процес передбачає витягування та відправлення коду до і з головного репозиторію. Встановіть відповідну версію Git для вашої операційної системи, щоб виконати наступні кроки.
Примітка
Для ознайомлення з інструкціями зі встановлення зверніться до інструкцій зі встановлення Git. Дізнайтесь про базові команди git з цього Git Handbook або інших джерел в Інтернеті.
Примітка
До репозиторію включено файл .git-blame-ignore-revs, який дозволяє уникнути засмічення виводу git blame комітами, що стосуються лише форматування коду без функціональних змін. Дивіться документацію git blame щодо того, як це використовувати.
Отримання коду#
Рекомендується підтримувати форк репозиторію MicroPython для власних цілей розробки. Процес отримання вихідного коду включає наступне:
Зробіть форк репозиторію https://github.com/micropython/micropython
Тепер у вас буде форк за адресою <https://github.com/<your-user-name>/micropython>.
Клонуйте форкнутий репозиторій за допомогою наступної команди:
$ git clone https://github.com/<your-user-name>/micropython
Потім налаштуйте віддалені репозиторії, щоб мати можливість співпрацювати над проєктом MicroPython.
Налаштування віддаленого upstream:
$ cd micropython
$ git remote add upstream https://github.com/micropython/micropython
Загальноприйнятою практикою є налаштування upstream та origin у форкнутому репозиторії для зручності обміну змінами коду. Ви можете підтримувати власне відображення, але рекомендується, щоб origin вказував на ваш форк, а upstream — на головний репозиторій MicroPython.
Після наведеної вище конфігурації ваше налаштування має виглядати подібним чином:
$ git remote -v
origin https://github.com/<your-user-name>/micropython (fetch)
origin https://github.com/<your-user-name>/micropython (push)
upstream https://github.com/micropython/micropython (fetch)
upstream https://github.com/micropython/micropython (push)
Тепер у вас є копія вихідного коду. За замовчуванням ви вказуєте на гілку master. Для подальшої розробки рекомендується працювати на окремій гілці розробки.
$ git checkout -b dev-branch
Ви можете дати їй будь-яку назву. Вам доведеться компілювати MicroPython щоразу, коли ви переходите на іншу гілку.
Компіляція та збирання коду#
При компіляції MicroPython ви компілюєте конкретний port, зазвичай для конкретної плати. Почніть зі встановлення необхідних залежностей. Потім зберіть крос-компілятор MicroPython, перш ніж успішно компілювати та збирати. Це стосується зокрема при використанні Linux для компіляції. Інструкції для Windows наведено в пізнішому розділі.
Необхідні залежності#
Встановіть необхідні залежності для Linux:
$ sudo apt-get install build-essential libffi-dev git pkg-config
Для порту stm32 потрібен крос-компілятор ARM:
$ sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi
Дивіться ARM GCC toolchain для отримання актуальних відомостей.
Також потрібен Python 3. Перевірте наявність Python у вашій системі:
$ python3
Python 3.5.0 (default, Jul 17 2020, 14:04:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Усі підтримувані порти мають різні вимоги до залежностей, дивіться відповідні readme-файли.
Збирання крос-компілятора MicroPython#
Майже для всіх портів спочатку потрібно зібрати mpy-cross для попередньої компіляції скриптів Python, що будуть включені до мікропрограми порту:
$ cd mpy-cross
$ make
Примітка
Зверніть увагу, що mpy-cross потрібно збирати для архітектури хоста, а не цільової архітектури.
Якщо збирання пройшло успішно, ви побачите повідомлення, подібне до такого:
LINK mpy-cross
text data bss dec hex filename
279328 776 880 280984 44998 mpy-cross
Примітка
Використовуйте make -C mpy-cross для збирання крос-компілятора одним командним рядком без переходу до директорії mpy-cross, інакше для наступних кроків вам знадобиться виконати cd ...
Збирання Unix-порту MicroPython#
Unix-порт — це версія MicroPython, що працює на Linux, macOS та інших Unix-подібних операційних системах. Він надзвичайно корисний для розробки MicroPython, оскільки дозволяє уникнути необхідності розгортати код на пристрої для тестування. У багатьох відношеннях він працює подібно до бінарного файлу python CPython.
Для збирання Unix-порту переконайтеся, що встановлені всі залежності, пов’язані з Linux, як описано в розділі необхідних залежностей. Дивіться Необхідні залежності, щоб переконатися, що всі залежності встановлені для цього порту. Також переконайтеся, що у вас є робоче середовище для gcc та GNU make. У прикладі нижче використовувалася Ubuntu 20.04, але інші Unix-системи мають працювати з незначними змінами:
$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
потім зберіть:
$ cd ports/unix
$ make submodules
$ make
Якщо MicroPython зібрано правильно, ви побачите наступне:
LINK micropython
text data bss dec hex filename
412033 5680 2496 420209 66971 micropython
Тепер запустіть:
$ ./micropython
MicroPython v1.13-38-gc67012d-dirty on 2020-09-13; linux version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> print("hello world")
hello world
>>>
Збирання Windows-порту#
Windows-порт включає файл проєкту Visual Studio micropython.vcxproj, який можна використовувати для збирання micropython.exe. Його можна відкрити у Visual Studio або зібрати з командного рядка за допомогою msbuild. Альтернативно, його можна зібрати за допомогою mingw, або у Windows через Cygwin, або у Linux. Дивіться документацію порту windows для отримання додаткової інформації.
Збирання порту STM32#
Як і для Unix-порту, вам потрібно встановити деякі необхідні залежності, як описано в розділі Необхідні залежності, а потім зібрати:
$ cd ports/stm32
$ make submodules
$ make
Зверніться до документації stm32 для отримання детальної інформації про прошивку мікропрограми.
Примітка
Дивіться Необхідні залежності, щоб переконатися, що всі залежності встановлені для цього порту. Потрібен крос-компілятор. arm-none-eabi-gcc також має бути в $PATH або вказаний вручну через CROSS_COMPILE — або встановленням змінної середовища, або в аргументах командного рядка make.
Ви також можете вказати, яку плату використовувати:
$ cd ports/stm32
$ make BOARD=<board> submodules
$ make BOARD=<board>
Дивіться ports/stm32/boards для доступних плат. Наприклад, «OPENMV4» або «OPENMV4P».
Збирання документації#
Документація MicroPython створюється за допомогою Sphinx. Якщо у вас вже встановлено Python, встановіть Sphinx за допомогою pip. Рекомендується використовувати віртуальне середовище:
$ python3 -m venv env
$ source env/bin/activate
$ pip install -r docs/requirements.txt
Перейдіть до директорії docs:
$ cd docs
Зберіть документацію:
$ make html
Відкрийте docs/build/html/index.html у браузері для перегляду документації локально. Зверніться до документації про імпортування документації для використання Read the Docs.
Запуск тестів#
Для запуску всіх тестів у наборі тестів на Unix-порту використовуйте:
$ cd ports/unix
$ make test
Для запуску вибраних тестів на платі/пристрої, підключеному через USB, використовуйте:
$ cd tests
$ ./run-tests.py -t /dev/ttyACM0
Дивіться також Написання тестів.
Додаткові цілі make для розробників#
У всіх портах на основі make є ціль для виведення розміру конкретного об’єктного файлу. Коли зміна обмежується одним файлом, це корисно при тестуванні варіантів для пошуку менших альтернатив.
Наприклад, для виведення розміру objstr.o у директорії py/ при стандартному збиранні unix:
$ make build-standard/py/objstr.sz
Аналогічно, є ціль для збереження попередньо обробленої версії файлу:
$ make build-standard/py/objstr.pp
У ports/unix є додаткові цілі, пов’язані з запуском тестів:
$ make test//int # Run all tests matching the pattern "int"
$ make test/ports/unix # Run all tests in ports/unix
$ make test-failures # Re-run only the failed tests
$ make print-failures # print the differences for failed tests
$ make clean-failures # delete the .exp and .out files from failed tests
Локальне використання ci.sh#
MicroPython використовує GitHub Actions для безперервної інтеграції. Щоб зменшити залежність від конкретної CI-системи, фактичні кроки збирання для Unix-систем містяться у файлі tools/ci.sh. Його також можна використовувати як скрипт на робочих станціях розробників з певними застереженнями:
Для більшості кроків передбачається Ubuntu/Debian-система, подібна до тієї, що використовується під час CI.
Деякі конкретні кроки передбачають певні версії Ubuntu.
Кроки налаштування можуть викликати системний менеджер пакетів для встановлення пакетів, завантаження та встановлення програмного забезпечення з Інтернету тощо.
Для отримання повідомлення про використання, включаючи список команд, виконайте:
$ tools/ci.sh --help
Наприклад, ви можете зібрати та протестувати мінімальний unix-порт за допомогою:
$ tools/ci.sh unix_minimal_build unix_minimal_run_tests
Якщо ви використовуєте оболонку bash, ви можете додати команду ci з автодоповненням табуляцією:
$ eval $(tools/ci.sh --bash-completion)
Для оболонки zsh замініть --bash-completion на --zsh-completion. Для оболонки fish замініть --bash-completion на --fish-completion.
Потім, ввівши:
$ ci unix_cov<tab>
Це доповнить назву кроку ci до unix_coverage_. Повторне натискання Tab покаже список відповідних кроків:
$ ci unix_coverage_<tab>
unix_coverage_32bit_build
unix_coverage_32bit_run_native_mpy_tests…
Структура папок#
Є кілька директорій, на які варто звернути увагу з точки зору розміщення певних деталей реалізації. Нижче наведено розбивку папок верхнього рівня у вихідному коді.
py
Містить компілятор, середовище виконання та реалізацію основної бібліотеки.
mpy-cross
Містить крос-компілятор MicroPython, який попередньо компілює скрипти Python до байткоду.
ports
Код для всіх версій MicroPython для підтримуваних портів.
lib
Низькорівневі C-бібліотеки, що використовуються будь-яким портом, переважно сторонні бібліотеки.
drivers
Містить драйвери для конкретного апаратного забезпечення, призначені для роботи з кількома портами.
extmod
Містить реалізацію на C більш неосновних модулів.
docs
Містить стандартну документацію, розміщену за адресою https://docs.micropython.org/.
tests
Реалізація набору тестів.
tools
Містить скрипти, що використовуються в процесі збирання та CI, а також інструменти для користувачів, такі як
mpremote.
examples
Приклади коду для збирання MicroPython як бібліотеки, а також нативних модулів.