Генерация файла микропифона + кода Python `.hex` из командной строки
Можно ли сгенерировать .hex
файл с MicroPython и моим собственным программным кодом на python в командной строке Linux, а не в одном из редакторов?
3 ответа
Глядя на тег в вашем вопросе, похоже, что вы хотите использовать MicroPython на BBC micro: немного, верно? Если это так, то вы можете использовать этот инструмент командной строки Python: https://github.com/ntoll/uflash/
Инструкции по его установке и использованию можно найти в README по этой ссылке.
Это работает с Python 2 и 3, и ваш дистрибутив Linux, скорее всего, будет иметь по крайней мере одну версию Python из коробки.
Если у вас установлен pip, вы можете легко установить его с помощью: pip install uflash
Но вы также можете загрузить исходный код, используя git или загрузив zip-файл с GitHub ( https://github.com/ntoll/uflash/archive/master.zip), и запускать его, не устанавливая ничего. В этом случае вы можете выполнить скрипт uFlash с Python:
python uflash.py path_to_your_code.py
А текущая версия uFlash включает последнюю версию MicroPython для micro:bit.
Работа с настройкой командной строки хоста Ubuntu 22.04 с докером Карлоса Атенсио для создания собственной прошивки
После непродолжительных попыток настроить набор инструментов я, наконец, решил поискать в Google образ Docker с набором инструментов и нашел https://github.com/carlosperate/docker-microbit-toolchain в этом коммите от Carlos Atencio, Micro: Сотрудник Bit Foundation, и это просто сработало:
# Get examples.
git clone https://github.com/bbcmicrobit/micropython
cd micropython
git checkout 7fc33d13b31a915cbe90dc5d515c6337b5fa1660
# Get Docker image.
docker pull ghcr.io/carlosperate/microbit-toolchain:latest
# Build setup to be run once.
docker run -v $(pwd):/home --rm ghcr.io/carlosperate/microbit-toolchain:latest yt target bbc-microbit-classic-gcc-nosd@https://github.com/lancaster-university/yotta-target-bbc-microbit-classic-gcc-nosd
docker run -v $(pwd):/home --rm ghcr.io/carlosperate/microbit-toolchain:latest make all
sudo chmod -R +666 .
# Build one example.
tools/makecombinedhex.py build/firmware.hex examples/counter.py -o build/counter.hex
# Build all examples.
for f in examples/*; do b="$(basename "$f")"; echo $b; tools/makecombinedhex.py build/firmware.hex "$f" -o "build/${b%.py}.hex"; done
Затем вы можете запустить пример, который хотите запустить:
cp build/counter.hex "/media/$USER/MICROBIT/"
Что uflash делает, чтобы отправить свой собственный предварительно скомпилированный файл firmware.hex , который является частью, требующей набора инструментов, и затем он просто использует его для создания объединенного шестнадцатеричного кода в Python.
Самое интересное, что теперь, когда у нас есть набор инструментов, мы также можем создавать примеры непосредственно в C/C++/assembly: Как скомпилировать код C/C++ в файл .hex для BBC micro:bit?который, вероятно, может работать намного быстрее.
Предыдущие неудачные попытки настроить его самостоятельно
Менеджер пакетов Yotta, используемый BBC Microbit, немного сгнил почти сразу после того, как был снят с производства.pip install yota
подходы вроде: https://flames-of-code.netlify.app/blog/microbit-cpp-1/ очень сложно.
ССАГПЗgcc-arm-embedded
набор инструментов PPAppa:team-gcc-arm-embedded/ppa
также было прекращено: https://askubuntu.com/questions/1243252/how-to-install-arm-none-eabi-gdb-on-ubuntu-20-04-lts-focal-fossa , и теперь вам придется скачать с сайта arm.com.
Настройка Docker от Atencios объясняет, как это сделать: https://github.com/carlosperate/docker-microbit-toolchain/blob/master/Dockerfile , ключ, вероятно, использует его волшебным образомrequirements.txt
, скорее всего, отодвинулся от того дня, когда все действительно работало, чтобы избежать бесконечного количества проблем с зависимостями yotta. Он на Ubuntu 20.04.
Вы можете написать код micropython для микробита в любом текстовом редакторе, например vscode или vim. Сохраните его как файл.py.
Чтобы создать файл.hex, используйте инструмент py2exe, который устанавливается вместе с uflash при установке uflash с помощью команды:
pip install uflash
Чтобы создать файл.hex для файла microbit micropython с именем hello.py:
py2hex hello.py
Это создает файл с именем hello.hex. Его можно перетащить на подключенный микробит через файловый проводник. Я использую Nautilus, и микробит отображается как "МИКРОБИТ".
Вы можете автоматизировать создание и загрузку файла.hex на микробит с помощью uflash, например
uflash hello.py
Это создаст файл.hex, а затем загрузит его на прикрепленный микробит. Однако файл.hex не останется в вашей файловой системе. Микробит имеет привычку больше не прикрепляться к файловой системе после загрузки файла.hex, и его необходимо повторно прикреплять между сборками.