Building CircuitPython

Similar documents
Raspberry Pi Kernel-o-Matic

CircuitPython on the nrf52

1. Install a Virtual Machine Download Ubuntu Create a New Virtual Machine Seamless Operation between Windows an Linux...

git Version: 2.0b Merge combines trees, and checks out the result Pull does a fetch, then a merge If you only can remember one command:

The instructions in this document are applicable to personal computers running the following Operating Systems:

Zephyr Kernel Installation & Setup Manual

Introduction to Git and Github Repositories

MicroPython Basics: Load Files & Run Code

CircuitPython with Jupyter Notebooks

CS3210: Operating Systems

Index. Alias syntax, 31 Author and commit attributes, 334

Using git to download and update BOUT++

Table of Contents. Concepts

Installing and Using Docker Toolbox for Mac OSX and Windows

Why You Should Not Use Arch

Git, the magical version control

Git Guide. Meher Krishna Patel. Created on : Octorber, 2017 Last updated : October, More documents are freely available at PythonDSP

Working with GIT. Florido Paganelli Lund University MNXB Florido Paganelli MNXB Working with git 1/47

GUIDE TO MAKE A REAL CONTRIBUTION TO AN OPEN SOURCE PROJECT 1. 1

How to git with proper etiquette

MakeCode. Created by Peli de Halleux. Last updated on :29:54 AM UTC

Managing build infrastructure of a Debian derivative

Adafruit seesaw. Created by Dean Miller. Last updated on :30:23 AM UTC

TangeloHub Documentation

Programming Microcontrollers using OpenOCD on a Raspberry Pi

manifold Documentation

2 Installing the Software

CS Fundamentals of Programming II Fall Very Basic UNIX

Manually Mount Usb Device Linux Command Line Ubuntu 12.04

Adafruit's Raspberry Pi Lesson 1. Preparing an SD Card for your Raspberry Pi

Lab1 tutorial CS

Software Development I

Lab2 - Bootloader. Conventions. Department of Computer Science and Information Engineering National Taiwan University

Lab Exercise Git: A distributed version control system

Welcome to Linux Foundation E-Learning Training

Git & Github Fundamental by Rajesh Kumar.

Installing Eclipse (C++/Java)

How To Reinstall Grub In Windows 7 Without Losing Data And Programs

Overview. during this tutorial we will examine how touse git from the command line. finally we will explore a graphical visualisation of git activity

SiFive HiFive1 Getting Started Guide. c SiFive, Inc.

CS 215 Fundamentals of Programming II Spring 2019 Very Basic UNIX

API RI. Application Programming Interface Reference Implementation. Policies and Procedures Discussion

Chapter 5. Version Control: Git

What is version control? (discuss) Who has used version control? Favorite VCS? Uses of version control (read)

Drupal Command Line Instructions Windows 7 Network Drive >>>CLICK HERE<<<

How To Manually Update Ubuntu Server To Using Cd

Getting Started with the LPC810

The Old World. Have you ever had to collaborate on a project by

Linux Manually Mounting External Hard Drive Mac Terminal

Git for Newbies. ComMouse Dongyue Studio

Creating a Patch. Created by Carl Heymann on 2010 Sep 14 1

213/513/613 Linux/Git Bootcamp. Cyrus, Eugene, Minji, Niko

Using GitHub to Share with SparkFun a

CPU Temperature Logging with CircuitPython

How To Manually Install Software In Linux Mint 13 From Usb

INFO Object-Oriented Programming

Formatting 1. Commands starting with $ are Linux console commands on the host PC:

CS197U: A Hands on Introduction to Unix

Tips on how to set up a GitHub account:

Effective Software Development and Version Control

Configuring Ubuntu to Code for the OmniFlash or OmniEP

Proper Debugging of ATSAMD21 Processors

Code::Blocks Student Manual

From Commits to Collaboration: A Git Tutorial for Social Scientists

Git Tutorial. André Sailer. ILD Technical Meeting April 24, 2017 CERN-EP-LCD. ILD Technical Meeting, Apr 24, 2017 A. Sailer: Git Tutorial 1/36

Welcome to Linux Foundation E-Learning Training

AMath 483/583 Lecture 2

Android System Development Training 4-day session

Agenda. - Final Project Info. - All things Git. - Make sure to come to lab for Python next week

Eugene, Niko, Matt, and Oliver

Revision Control and GIT

Welcome to Linux Foundation Virtual Training

Getting the files for the first time...2. Making Changes, Commiting them and Pull Requests:...5. Update your repository from the upstream master...

CS 261 Recitation 1 Compiling C on UNIX

Manual Of Virtualbox Additions Ubuntu Server 12.04

AMath 483/583 Lecture 2. Notes: Notes: Homework #1. Class Virtual Machine. Notes: Outline:

Git for Subversion users

TDDC88 Lab 4 Software Configuration Management

Github/Git Primer. Tyler Hague

USING GIT FOR AUTOMATION AND COLLABORATION JUSTIN ELLIOTT - MATT HANSEN PENN STATE UNIVERSITY

Get VirtualBox. VirtualBox/Ubuntu Setup. Go to and select Downloads.

Git Workflows. Sylvain Bouveret, Grégory Mounié, Matthieu Moy

Quick Start Guide for BeagleBone. Table of Contents. by Brian Fraser Last update: Sept 24, 2017

Lab E2: bypassing authentication and resetting passwords

Arch Linux Grub You Need To Load The Kernel First

GETTING STARTED WITH. Michael Lessard Senior Solutions Architect June 2017

Setting up the programming environment on Windows

Git: Distributed Version Control

Gunnery Documentation

Section 1: Tools. Kaifei Chen, Luca Zuccarini. January 23, Make Motivation How... 2

Continuous integration & continuous delivery. COSC345 Software Engineering

Introduction to Git and GitHub for Writers Workbook February 23, 2019 Peter Gruenbaum

Setting up my Dev Environment ECS 030

Welcome to Linux Foundation E-Learning Training

1 Installation (briefly)

Manually Mount Usb Flash Drive Ubuntu Server Command Line

Introduction to Version Control

Version Control: Gitting Started

How To Startup Windows Service Windows 7. Repair Dual Boot >>>CLICK HERE<<<

Ubuntu Manually Mount Cdrom Drive Command Line Vmware

Transcription:

Building CircuitPython Created by Dan Halbert Last updated on 2018-05-18 03:47:12 AM UTC

Guide Contents Guide Contents Introduction Linux Setup Install a Real or Virtual Linux Machine Native Linux Linux on a Virtual Machine Vagrant Install Build Tools on Ubuntu MacOS Setup Windows Subsystem for Linux Setup Install WSL Install Build Tools Build CircuitPython Moving Files to Windows Mounting a CircuitPython Board in WSL Manual Setup Build CircuitPython Fetch the Code to Build Build mpy-cross Build CircuitPython Run your build! When to make clean Updating Your Repo Adding Frozen Modules ESP8266 and nrf Builds ESP8266 Build nrf Build 2 3 4 4 4 4 4 4 5 6 6 7 7 7 8 9 10 10 10 10 10 11 11 12 13 13 13 Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 2 of 13

Introduction Adafruit's CircuitPython is an open-source implementation of Python for microcontrollers. It's derived from (also known as, a "fork" of) MicroPython, a ground-breaking implementation of Python for microcontrollers and constrained environments. CircuitPython ships on many Adafruit products. We regularly create new releases and make it easy to update your installation with new builds. However, you might want to build your own version of CircuitPython. You might want to keep up with development versions between releases, adapt it to your own hardware, add or subtract features, or add "frozen" modules to save RAM space. This guide explains how to build CircuitPython yourself. CircuitPython is meant to be built in a POSIX-style build environment. We'll talk about building it on Linux-style systems or on MacOS. It's possible, but tricky, to build in other environments such as CygWin or MinGW: we may cover how to use these in the future. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 3 of 13

Linux Setup Install a Real or Virtual Linux Machine If you don't already have a Linux machine, you can set one up in several different ways. You can install a Linux distribution natively, either on its own machine or as a dual-boot system. You can install Linux on a virtual machine on, say, a Windows host machine. You can also use Windows Subsystem for Linux (WSL), available on Microsoft Windows 10, which allows you to run a Linux distribution with an emulation layer substituting for the Linux kernel. We recommend using the Ubuntu distribution of Linux or one of its variants (Kubuntu, Mint, etc.). The instructions here assume you are using Ubuntu. The 16.04 LTS (Long Term Support) version is stable and reliable. The 18.04 LTS version will arrive in April, 2018, but the ARM gcc toolchain will not be available immediately on 18.04, so stick with 16.04 LTS for now. (We'll update this guide when it's available.) Native Linux You can install Ubuntu on a bare machine easily. Follow the directions (this link is for 16.04) on the Ubuntu website. You can also install Ubuntu on a disk shared with your Windows installation, or on a separate disk, and make a dualboot installation. Linux on a Virtual Machine Linux can also be installed easily on a virtual machine. First you install the virtual machine software, and then create a new virtual machine, usually giving the VM software a.iso file of Ubuntu or another distribution. On Windows, VM Workstation Player and VirtualBox are both free and easily installed. Vagrant Vagrant is software that is designed to make it easy to set up and use pre-configured virtual machines. There are potential stumbling blocks. This guide will include Vagrant information in the future. Install Build Tools on Ubuntu The Ubuntu 16.04 LTS Desktop distribution includes nearly everything you need to build CircuitPython. You just need to install git and the ARM processor toolchain (compiler, linker, etc.). In a terminal window, do: sudo apt install git sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa # If you don't have add-apt-repository, do: # sudo apt install add-apt-repository sudo apt update sudo apt install gcc-arm-embedded Now move to the Build CircuitPython section of this guide. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 4 of 13

MacOS Setup To build CircuitPython on MacOS, you need to install git, python3, and the ARM toolchain. The easiest way to do this is to first install Homebrew, a software package manager for MacOS. Follow the directions on its webpages. Now install the software you need: brew update brew install git brew install python3 And finally, install the ARM toolchain (note the cask ): brew cask install gcc-arm-embedded That's it! Now you can move on and actually Build CircuitPython. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 5 of 13

Windows Subsystem for Linux Setup Windows Subsystem for Linux (WSL) is a new feature of Windows 10 that lets you run Ubuntu and other versions of Linux right in Windows. It's real Ubuntu, without the Linux kernel, but with all the software packages that don't need a graphical interface. You can build CircuitPython in WSL easily. It's easier to install than a Linux virtual machine. The filesystem access is slower than on regular Linux, so builds will take somewhat longer, but it's quite usable. Install WSL To install WSL, you need to be running a recent version of 64-bit Windows 10. Go to Control Panel > Programs >Windows Features, and check the box for Windows Subsystem for Linux. After that, you'll have to reboot Windows. After it's rebooted, go to the Microsoft Store, search for Ubuntu, and install it. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 6 of 13

Then launch Ubuntu. You'll see a terminal console window and you'll be asked some initial setup questions. Install Build Tools WSL Ubuntu comes with git already installed. So we just need to install python (version 2: python3 is already installed), basic build tools and the ARM processor toolchain (compiler, linker, etc.). In the WSL console, do: sudo apt install python build-essential sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa sudo apt update sudo apt install gcc-arm-embedded Build CircuitPython From this point on, you can build CircuitPython just as it's built in regular Ubuntu, described in the Build CircuitPython section of this guide. Moving Files to Windows You can copy files to and from Windows through the /mnt/c. For instance, if you want to copy a CircuitPython build to the desktop, do: cp build-circuitplayground_express/firmware.uf2 /mnt/c/users/yourname/desktop Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 7 of 13

Warning: Don't build in a shared folder (in /mnt/c). You'll probably have filename and line-ending problems. You might be tempted to clone and build CircuitPython in a folder shared with the Windows filesystem (in /mnt/c somewhere). That can cause problems, especially if you use git commands on the Windows side in that folder. The CircuitPython build assumes case-sensitive filenames, but Windows usually ignores filename case differences. You may also have line-ending problems (CRLF vs. LF). It's better to clone and build inside your home directory in WSL, and copy files over to a shared folder as needed. Mounting a CircuitPython Board in WSL You can mount your...boot or CIRCUITPY drive in WSL. Create a mount point and then mount it. Note that you'll have to remount each time the drive goes away, such as when you restart the board or switch between the BOOT drive and CIRCUITPY. So it's probably more convenient to copy files to the board from Windows instead of WSL. # You only need to do this once. # Choose the appropriate drive letter. sudo mkdir /mnt/d # Now mount the drive. sudo mount -t drvfs D: /mnt/d # Now you can look at the contents, copy things, etc. ls /mnt/d cp firmware.bin /mnt/d # etc. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 8 of 13

Manual Setup If the setup instructions above don't work for your particular OS setup, for whatever reason, you can get the ball rolling by installing these tools in whatever way you can and then getting them to work with the Makefile in circuitpython/atmelsamd (2.x branch) or circuitpython/ports/atmel-samd. (master branch): git python2 python3 ARM gcc toolchain: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 9 of 13

Build CircuitPython Fetch the Code to Build Once your build tools are installed, fetch the CircuitPython source code from its GitHub repository ("repo") and also fetch the git "submodules" it needs. The submodules are extra code that you need that's stored in other repos. In the commands below, you're cloning from Adafruit's CircuitPython repo. But if you want to make changes, you might want to "fork" that repo on GitHub to make a copy for yourself, and clone from there. git clone https://github.com/adafruit/circuitpython.git cd circuitpython git submodule update --init --recursive Build mpy-cross Build the mpy-cross compiler first, which compiles Circuitpython.py files into.mpy files. It's needed to include library code in certain boards. make -C mpy-cross Build CircuitPython Now you're all set to build CircuitPython. If you're in the master branch of the repo, you'll be building the latest version (3.0 as of this writing). Choose which board you want to build for. The boards available are all the subdirectories in ports/atmel-samd/boards/. cd ports/atmel-samd make BOARD=circuitplayground_express If you want to build the 2.x version of CircuitPython, you need to check out that branch, and build in a slightly different location. git checkout 2.x cd atmel-samd make BOARD=circuitplayground_express Run your build! When you've successfully built, you'll see output like: Create build-circuitplayground_express/firmware.bin Create build-circuitplayground_express/firmware.uf2 python2../../tools/uf2/utils/uf2conv.py -b 0x2000 -c -o build-circuitplayground_express/firmware.uf2 bui Converting to uf2, output size: 485888, start address: 0x2000 Wrote 485888 bytes to build-circuitplayground_express/firmware.uf2. Copy firmware.uf2 to your board the same way you'd update CircuitPython: Double-click to get the BOOT drive, and Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 10 of 13

then just copy the.uf2 file: # Double-click the reset button, then: cp build-circuitplayground_express/firmware.uf2 /media/yourname/cplayboot The board will restart, and your build will start running. If you're using a board without a UF2 bootloader, you'll need to use bossac and the firmware.bin file, not the.uf2 file. Detailed instructions are here. When to make clean After you make changes to code, normally just doing make BOARD=... will be sufficient. The changed files will be recompiled and CircuitPython will be rebuilt. However, there are some circumstance where you must do: make clean BOARD=... If you have changed the #include file structure in certain ways, or if you have defined QSTR's (a way of defining constants strings in the CircuitPython source), then you must make clean before rebuilding. If you're not sure, it's always safe to make clean and then make. It might take a little longer to build, but you'll be sure it was rebuilt properly. Updating Your Repo When there are changes in the GitHub repo, you might want to fetch those and then rebuild. Just "pull" the new code (assuming you haven't made changes yourself), update the submodules if necessary, and rebuild: git pull git submodule update --init --recursive # Then make again. Those are the basics. There's a lot more to know about how to keep your forked repo up to date, merge "upstream" (Adafruit's) changes into your code, etc. We'll be writing all that up later. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 11 of 13

Adding Frozen Modules Normally, all imported Python modules in CircuitPython are loaded into RAM in compiled form, whether they start as.mpy or.py files. Especially on M0 boards, a user program can run out of RAM if too much code needs to be loaded. To ameliorate this problem, a CircuitPython image can include compiled Python code that is stored in the image, in flash memory, and executed directly from there. These are "internal frozen modules". The circuitplayground_express and esp8266 builds use this technique. If you would like to build a custom image that includes some frozen modules, you can imitate how it's done in the circuitplayground_express build. Look at boards/circuit_playground_express/mpconfigboard.mk : LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld USB_VID = 0x239A USB_PID = 0x8019 USB_PRODUCT = "CircuitPlayground Express" USB_MANUFACTURER = "Adafruit Industries LLC" SPI_FLASH_FILESYSTEM = 1 CHIP_VARIANT = SAMD21G18A CHIP_FAMILY = samd21 # Include these Python libraries in firmware. FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Thermistor Notice the FROZEN_MPY_DIRS lines in the file. Pick the mpconfigboard.mk file for the board you are using, and add one or more similar lines. You will need to do add directories for the libraries you want to include. If these are existing libraries in GitHub, you can add them as submodules. For instance, suppose you want to add the Adafruit_CircuitPython_HID library to the feather_m0_express build. Add this line to boards/feather_m0_express/mpconfigboard.mk : FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID Then add the library as a submodule: cd circuitpython/frozen git submodule add https://github.com/adafruit/adafruit_circuitpython_hid When you add the submodule it will be cloned into the frozen/ directory. Note that there is limited unused space available in the images, especially in the non-express M0 builds, and you may not be able to fit all the libraries you want to freeze. You can of course try to simplify the library code if necessary to make it fit. Adafruit Industries https://learn.adafruit.com/building-circuitpython Page 12 of 13

ESP8266 and nrf Builds ESP8266 Build The esp8266 board build requires a different toolchain. You must install https://github.com/pfalcon/esp-open-sdk. Follow the directions in the README. Note the caveats for MacOS about case-sensitive filesystems. nrf Build Setting up the nrf toolchain and other needed software is complicated. For the nrf52, check out the README for that board. There is also general nrf information in the README file in the ports/nrf directory. Adafruit Industries Last Updated: 2018-05-18 03:47:11 AM UTC Page 13 of 13