cmake 是否可以在本地编译microbit python代码?

4xrmg8kj  于 2022-11-11  发布在  Python
关注(0)|答案(4)|浏览(155)

我正在运行Ubuntu 22.04和xorg。我需要找到一种方法来编译microbit python代码本地固件十六进制文件。首先,我按照这里的https://microbit-micropython.readthedocs.io/en/latest/devguide/flashfirmware.html指南。
经过大量的调试,我得出了这样的结论:https://pastebin.com/MGShD31N
但是,platform.h文件确实存在。

sawntoe@uwubuntu:~/Documents/Assignments/2022/TVP/micropython$ ls /home/sawntoe/Documents/Assignments/2022/TVP/micropython/yotta_modules/mbed-classic/api/platform.h
/home/sawntoe/Documents/Assignments/2022/TVP/micropython/yotta_modules/mbed-classic/api/platform.h
sawntoe@uwubuntu:~/Documents/Assignments/2022/TVP/micropython$

在这一点上,我放弃了这一点,并尝试使用Mu编辑器与AppImage。然而,Mu需要Wayland,而我在Xorg上。
有人知道这是否可行吗?谢谢。

vs91vp4v

vs91vp4v1#

Mu和uflash命令可以从.hex文件中检索Python代码。例如,使用uflash可以执行以下操作:

uflash my_script.py

我认为你想要的是在某种程度上可以做到,但它比仅仅使用他们的web python编辑器更难:https://python.microbit.org/v/2

ny6fqffe

ny6fqffe2#

Peter Till回答了原来的问题。下面的附加内容通过展示如何自动化构建和加载过程来补充这个答案。我使用Debian。原来的问题说使用Ubuntu,它是在Debian上构建的。

用于查找和装载micro:bit的脚本

当代码加载到micro:bit时,板从系统中卸载。因此每次您有新代码要加载时,您必须重新安装板。
我修改了一个脚本来查找和挂载micro:bit。


# !/bin/bash

BASEPATH="/media/$(whoami)/"
MICRO="MICROBIT"

if [ $# -eq 0 ]
then
    echo "no argument supplied, use 'mount' or 'unmount'"
    exit 1
fi

if [ $1 == "--help" ]
then
    echo "mounts or unmounts a BBC micro:bit"
    echo "args: mount - mount the microbit, unmout - unmount the microbit"
fi

# how many MICRO found in udiksctl dump

RESULTS=$(udisksctl dump | grep IdLabel | grep -c -i $MICRO)

case "$RESULTS" in

0 )     echo "no $MICRO found in 'udkisksctl dump'"
        exit 0
        ;;

1 )     DEVICELABEL=$(udisksctl dump | grep IdLabel | grep -i $MICRO | cut -d ":" -f 2 | sed 's/^[ \t]*//')
        DEVICE=$(udisksctl dump | grep -i "IdLabel: \+$DEVICELABEL" -B 12 | grep " Device:" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
        DEVICEPATH="$BASEPATH""$DEVICELABEL"
        echo "found one $MICRO, device: $DEVICE"

        if [[ -z $(mount | grep "$DEVICE") ]]
        then
            echo "$DEVICELABEL was unmounted"
            if [ $1 == "mount" ]
            then
                udisksctl mount -b "$DEVICE"
                exit 0
            fi
        else
                echo "$DEVICELABEL was mounted"
                if [ $1 == "unmount" ]
                then
                    udisksctl unmount -b "$DEVICE"
                    exit 0
                fi
        fi
        ;;

* )     echo "more than one $MICRO found"

        ;;

    esac

echo "exiting without doing anything"

我在.bashrc文件中将此脚本别名为mm

自动挂载micro:bit并刷新python文件

我使用inotifywait命令来运行mm,然后运行uflash来加载我正在处理的.py文件。每次保存python文件时,都会运行别名命令mm,然后运行uflash命令。

while inotifywait -e modify <your_file>.py ; do mm && uflash <your_file>.py ; done
ttvkxqim

ttvkxqim3#

好吧,那么详细说明一下彼得·提尔的回答。
首先,你可以使用uflash:

uflash path/to/your/code .

或者,您可以使用microfs:

ufs put path/to/main.py
ctehm74n

ctehm74n4#

将Ubuntu 22.04主机CLI设置与卡洛斯Atencio的Docker配合使用,以构建您自己的固件

在尝试设置工具链一段时间后,我最终决定使用工具链在Google上搜索Docker图像,并从Micro:Bit基金会的员工卡洛斯Atencio那里找到了https://github.com/carlosperate/docker-microbit-toolchainat this commit,这绝对奏效了:


# 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

# Build one example.

docker run -v $(pwd):/home --rm ghcr.io/carlosperate/microbit-toolchain:latest \
  tools/makecombinedhex.py build/firmware.hex examples/counter.py -o build/counter.hex

# Build all examples.

docker run -v $(pwd):/home --rm ghcr.io/carlosperate/microbit-toolchain:latest \
  bash -c '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/"

更多评论请访问:从命令行为BBC micro:bit生成micropython + python代码'.hex'文件

相关问题