kopia lustrzana https://github.com/peterhinch/micropython-samples
146 wiersze
5.3 KiB
Markdown
146 wiersze
5.3 KiB
Markdown
# fastbuild - Pull and build Pyboard firmware under Linux
|
|
|
|
These scripts are intended to speed and simplify rebuilding firmware from
|
|
source notably where pyboards of different types are in use, or when
|
|
frozen bytecode necessitates repeated compilation and deployment. In
|
|
particular `buildpyb` will detect the attached Pyboard type, build the
|
|
appropriate firmware, put the board into DFU mode and deploy it.
|
|
|
|
The scripts should be run as your normal user and can proceed without user
|
|
interaction.
|
|
|
|
Includes udev rules to avoid jumps from `/dev/ttyACM0` to `/dev/ttyACM1`
|
|
and ensuring Pyboards of all types appear as `/dev/pyboard`. Rules are also
|
|
offered for USB connected WiPy (V1.0) and FTDI USB/serial adaptors.
|
|
|
|
These scripts use Python scripts `pyb_boot` to put the Pyboard into DFU mode
|
|
and `pyb_check` to determine the type of attached board. These use the
|
|
`pyboard.py` module in the source tree to execute scripts on the attached
|
|
board.
|
|
|
|
The scripts will require minor edits to reflect your directory structure.
|
|
|
|
Scripts updated 12 Sep 2021 to fix handling of submodules.
|
|
|
|
###### [Main README](../README.md)
|
|
|
|
# Frozen modules and manifests
|
|
|
|
The method of specifying modules to be frozen has changed (as of Oct 2019).
|
|
The files and directories to be frozen are now specified in a file with the
|
|
default name `manifest.py`. This may be found in `/ports/stm32/boards` or the
|
|
eqivalent for other ports.
|
|
|
|
In practice it can be advantageous to override the default. You might want to
|
|
freeze a different set of files depending on the specific board or project.
|
|
This is done by issuing
|
|
```
|
|
make BOARD=$BOARD FROZEN_MANIFEST=$MANIFEST
|
|
```
|
|
where `BOARD` specifies the target (e.g. 'PYBV11') and `MANIFEST` specifies the
|
|
path to the manifest file (e.g. '~/my_manifest.py').
|
|
|
|
A manifest file comprises `include` and `freeze` statements. The latter have
|
|
one or two args. The first is a directory specifier. If the second exists it
|
|
can specify a single file or more, by passing an iterable. Consider the
|
|
following manifest file:
|
|
```python
|
|
include("$(MPY_DIR)/ports/stm32/boards/PYBD_SF2/manifest.py")
|
|
freeze('$(MPY_DIR)/drivers/dht', 'dht.py')
|
|
freeze('$(MPY_DIR)/tools', ('upip.py', 'upip_utarfile.py'))
|
|
freeze('/path/to/pyb_d_modules')
|
|
```
|
|
Taking the lines in order:
|
|
1. This includes another manifest file located in the source tree.
|
|
2. The single file argument freezes the file 'dht.py' found in the MicroPython
|
|
source tree `drivers` directory.
|
|
3. Passing an iterable causes the two specified files to be frozen.
|
|
4. Passing a directory without arguments causes all files and subdirectories
|
|
to be frozen. Assume '../pyb_d_modules' contains a file `rats.py` and a
|
|
subdirectory `foo` containing `bar.py`. Then `help('modules')` will show
|
|
`rats` and `foo/bar`. This means that Python packages are frozen correctly.
|
|
|
|
On Linux symlinks are handled as you would expect.
|
|
|
|
# The build scripts
|
|
|
|
### Optional Edit (all scripts)
|
|
|
|
In these scripts you may wish to edit the `-j 8` argument to `make`. This
|
|
radically speeds build on a multi core PC. Empirically 8 gave the fastest build
|
|
on my Core i7 4/8 core laptop: adjust to suit your PC.
|
|
|
|
### Dependencies and setup (on PC)
|
|
|
|
Python3
|
|
The following Bash code installs pyserial, copies `49-micropython.rules` to
|
|
(on most distros) `/etc/udev/rules.d`. It installs `rshell` if you plan to
|
|
use it (recommended).
|
|
|
|
As root:
|
|
```
|
|
apt-get install python3-serial
|
|
pip install pyserial
|
|
cp 49-micropython.rules /etc/udev/rules.d
|
|
pip3 install rshell
|
|
```
|
|
|
|
The build scripts expect an environment variable MPDIR holding the path to the
|
|
MicroPython source tree. To set this up, as normal user issue (edited for your
|
|
path to the MicroPython source tree):
|
|
|
|
```
|
|
cd ~
|
|
echo export MPDIR='/mnt/qnap2/data/Projects/MicroPython/micropython' >> .bashrc
|
|
echo >> .bashrc
|
|
```
|
|
|
|
Close and restart the terminal session before proceding.
|
|
|
|
Verify that `pyboard.py` works. To do this, close and restart the terminal
|
|
session. Run Python3, paste the following and check that the red LED lights:
|
|
|
|
```python
|
|
import os
|
|
mp = os.getenv('MPDIR')
|
|
sys.path.append(''.join((mp, '/tools')))
|
|
import pyboard
|
|
pyb = pyboard.Pyboard('/dev/pyboard')
|
|
pyb.enter_raw_repl()
|
|
pyb.exec('pyb.LED(1).on()')
|
|
pyb.exit_raw_repl()
|
|
```
|
|
|
|
### Build script: `buildpyb`
|
|
|
|
This checks the attached pyboard. If it's a V1.0, V1.1 or Lite it or a Pyboard
|
|
D series it builds the correct firmware and deploys it. Otherwise it produces
|
|
an error message.
|
|
|
|
It freezes a different set of files depending on whether the board is a Pyboard
|
|
V1.x or a Pyboard D. It can readily be adapted for finer-grain control or to
|
|
produce project-specific builds.
|
|
|
|
You will need to change the `MANIFESTS` variable which is the directory
|
|
specifier for my manifest files.
|
|
|
|
Optional argument `--clean` - if supplied does a `make clean` to delete
|
|
all files produced by the previous build before proceeding.
|
|
|
|
### Update source: `buildnew`
|
|
|
|
Report state of master branch, update sources and issue `make clean` for
|
|
Pyboard variants and ESP8266. Builds cross compiler and unix port.
|
|
|
|
If you don't use the Unix build you may wish to delete the unix make commands.
|
|
|
|
### ESP8266 Build
|
|
|
|
`buildesp` A script to build and deploy ESP8266 firmware. Accepts optional
|
|
`--clean` or `--erase` arguments. Both perform a `make clean` but the second
|
|
also erases the ESP8266 flash.
|
|
|
|
You will need to change the `MANIFEST` variable which is the directory
|
|
specifier for my esp8266 manifest file.
|
|
|