#!/usr/bin/env bash # http://docs.platformio.org/en/latest/faq.html#faq-install-shell-commands sudo apt install -f -y python3 python3-git python3-pip checkinstall libpmix-bin libpmix-dev python3-starlette python3-jsonrpc python3-h11 python3-uvicorn python3-wsproto python3-ifaddr python3-zeroconf python3-all python3-setuptools python3-docutils python3-sphinx python3-sphinx-rtd-theme python3-pytest python3-pytest-xdist #Build deps sudo apt install -f -y python3-jsondiff python3-semantic-version python3-pyelftools python3-tabulate python3-marshmallow # zephyr python deps sudo apt-get install -y python3-pykwalify sudo pip3 install ajsonrpc # ajsonrpc.dispatcher ajsonrpc.manager # sudo python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/develop/scripts/get-platformio.py)" # uninstall existing version pip3 uninstall platformio # install the latest development version of PlatformIO USER=platformio PROJECT=platformio-core LICENSE="apache" SECTION="devel" HOMEPAGE="https://platformio.org/" PACKAGE="platformio-core" RELEASE=$(curl "https://api.github.com/repos/${USER}/${PROJECT}/releases?per_page=5" | jq -r '.[0] | .tag_name') VERSION=$(echo "${RELEASE}" | cut -c 2- | cut -f1 -d"-") BUILD_HOME="/var/tmp/platformio-core-"${VERSION}"_build" DEBEMAIL="person@company.tld" DEBFULLNAME="Testy McTester" DESCRIPTION="A professional collaborative platform for embedded development." LONG_DESCRIPTION=" Cross-platform IDE, Unified Debugger, Static Code Analyzer, Remote Unit Testing,\n Build System, Firmware File Explorer and Memory Inspection." RSS_FEED="https://github.com/${USER}/${PROJECT}/releases.atom" # xdg-open ${RSS_FEED} echo ${RSS_FEED} # Make the BUILD_HOME directory and clone upstream mkdir -p ${BUILD_HOME} cd ${BUILD_HOME} || exit # --branch can take tags and detaches the HEAD at that commit git clone http://github.com/${USER}/${PROJECT}.git --branch=${RELEASE} ${PACKAGE}-${VERSION} cd ${PACKAGE}-${VERSION} || exit mkdir -p m4 # Use py.test-3 sed -i 's/py.test/#py.test-3/g' Makefile # sed -i 's/ignore/ignore-path/g' Makefile cat <.git/gbp.conf [DEFAULT] # this is the upstream-branch: upstream-branch=master EOF # disable pylint false positive with no-member for libraries with C-binding. sed -i '/^disable=.*/ s/.*/&\n signature-differs\,/' ${PWD}/.pylintrc sed -i '/^disable=.*/ s/.*/&\n no-member\,/' ${PWD}/.pylintrc # debianize the BUILD_HOME directory echo ${DEBFULLNAME} dh_make \ --createorig \ --single \ --native \ --copyright ${LICENSE} \ --yes # Customize the debian directory values #sed -i 's,^\(Description: \).*,\1'${DESCRIPTION}',' debian/control sed -i "s,^\(Description: \).*,\1${DESCRIPTION}," debian/control sed -i 's,^\(Section: \).*,\1'${SECTION}',' debian/control sed -i "s,^\(Maintainer: \).*,\1'${DEBFULLNAME}\ \<${DEBEMAIL}\>'," debian/control sed -i 's,^\(Homepage: \).*,\1'${HOMEPAGE}',' debian/control sed -i "s/.*insert\ long.*/${LONG_DESCRIPTION}/" debian/control echo **************** cat debian/control echo **************** BUILD_OPTIONS="" cat <debian/rules #!/usr/bin/make -f %: dh \$@ override_dh_auto_configure: dh_auto_configure -- ${BUILD_OPTIONS} EOF cat <debian/watch version=4 opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/${PROJECT}-$1\.tar\.gz/ \ http://github.com/${USER}/${PROJECT}/tags .*/v?(\d\S+)\.tar\.gz EOF dpkg-buildpackage -us -uc -b echo ${PACKAGE}_${VERSION}_amd64.deb sudo dpkg -i ../${PACKAGE}_${VERSION}_amd64.deb # install some platforms # platformio platform install espressif8266 # platformio platform install espressif32 # platformio platform install nordicnrf51 # platformio platform install nordicnrf52 # platformio platform install ststm32 # platformio platform install timsp430 # platformio platform install atmelavr DEST=/home/default git clone --depth 1 https://github.com/platformio/platform-espressif8266 ${DEST}/.platformio/platforms/espressif8266 git clone --depth 1 https://github.com/platformio/platform-espressif32 ${DEST}/.platformio/platforms/espressif32 git clone --depth 1 https://github.com/platformio/platform-nordicnrf51 ${DEST}/.platformio/platforms/nordicnrf51 git clone --depth 1 https://github.com/platformio/platform-nordicnrf52 ${DEST}/.platformio/platforms/nordicnrf52 git clone --depth 1 https://github.com/platformio/platform-ststm32 ${DEST}/.platformio/platforms/ststm32 git clone --depth 1 https://github.com/platformio/platform-timsp430 ${DEST}/.platformio/platforms/timsp430 git clone --depth 1 https://github.com/platformio/platform-atmelavr ${DEST}/.platformio/platforms/atmelavr git clone --depth 1 https://github.com/platformio/platform-atmelsam ${DEST}/.platformio/platforms/atmelsam git clone --depth 1 https://github.com/platformio/platform-native ${DEST}/.platformio/platforms/native pio pkg install --global --tool "platformio/framework-cmsis@^2.50700.210515" pio pkg install --global --tool "platformio/framework-zephyr^2.30400.230914" # pip install puts the results in usr/local/bin so we don't have a path issue #platformio: /usr/local/bin/platformio mkdir -p ${HOME}/PlatformIO/Projects pio settings set enable_telemetry No pio settings set projects_dir ${HOME}/PlatformIO/Projects pio settings get pio boards # https://dokk.org/documentation/platformio/v3.5.1/faq/#zsh-completion mkdir -p ${HOME}/.zshrc.d/ cat >${HOME}/.zshrc.d/008_platformio.zsh <<'EOF' if [[ -d "/usr/local/bin/platformio" ]]; then autoload bashcompinit && bashcompinit eval "$(_PLATFORMIO_COMPLETE=source platformio)" eval "$(_PLATFORMIO_COMPLETE=source pio)" fi EOF cat >~/.profile <<'EOF' if [ -d "/usr/local/bin/platformio" ] ; then eval "$(_PLATFORMIO_COMPLETE=source platformio)" eval "$(_PLATFORMIO_COMPLETE=source pio)" fi EOF # http://docs.platformio.org/en/latest/faq.html#platformio-udev-rules # https://raw.githubusercontent.com/platformio/platformio-core/develop/scripts/99-platformio-udev.rules # curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules sudo bash -c "cat > /etc/udev/rules.d/99-platformio-udev.rules" <<'EOF' # # Boards # # CP210X USB UART SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666" # FT232R USB UART SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0666" # Prolific Technology, Inc. PL2303 Serial Port SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0666" # QinHeng Electronics HL-340 USB-Serial adapter SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666" # Arduino boards SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="[08][02]*", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="[08][02]*", MODE:="0666" # Arduino SAM-BA ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MM_DEVICE_IGNORE}="1" ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{MTP_NO_PROBE}="1" SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666" # Digistump boards SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1" # STM32 discovery boards, with onboard st/linkv2 SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374?", MODE:="0666" # USBtiny SUBSYSTEMS=="usb", ATTRS{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0666" # USBasp V2.0 SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE:="0666" # Teensy boards ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", ENV{ID_MM_DEVICE_IGNORE}="1" ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", ENV{MTP_NO_PROBE}="1" SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666" #TI Stellaris Launchpad SUBSYSTEMS=="usb", ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="0666" #TI MSP430 Launchpad SUBSYSTEMS=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0666" # # Debuggers # # Black Magic Probe SUBSYSTEM=="tty", ATTRS{interface}=="Black Magic GDB Server" SUBSYSTEM=="tty", ATTRS{interface}=="Black Magic UART Port" # opendous and estick ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204f", MODE="660", GROUP="plugdev", TAG+="uaccess" # Original FT232/FT245 VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess" # Original FT2232 VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="660", GROUP="plugdev", TAG+="uaccess" # Original FT4232 VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE="660", GROUP="plugdev", TAG+="uaccess" # Original FT232H VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="660", GROUP="plugdev", TAG+="uaccess" # DISTORTEC JTAG-lock-pick Tiny 2 ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8220", MODE="660", GROUP="plugdev", TAG+="uaccess" # TUMPA, TUMPA Lite ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", MODE="660", GROUP="plugdev", TAG+="uaccess" # XDS100v2 ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", MODE="660", GROUP="plugdev", TAG+="uaccess" # Xverve Signalyzer Tool (DT-USB-ST), Signalyzer LITE (DT-USB-SLITE) ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca0", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca1", MODE="660", GROUP="plugdev", TAG+="uaccess" # TI/Luminary Stellaris Evaluation Board FTDI (several) ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcd9", MODE="660", GROUP="plugdev", TAG+="uaccess" # TI/Luminary Stellaris In-Circuit Debug Interface FTDI (ICDI) Board ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcda", MODE="660", GROUP="plugdev", TAG+="uaccess" # egnite Turtelizer 2 ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bdc8", MODE="660", GROUP="plugdev", TAG+="uaccess" # Section5 ICEbear ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c140", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c141", MODE="660", GROUP="plugdev", TAG+="uaccess" # Amontec JTAGkey and JTAGkey-tiny ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="660", GROUP="plugdev", TAG+="uaccess" # TI ICDI ATTRS{idVendor}=="0451", ATTRS{idProduct}=="c32a", MODE="660", GROUP="plugdev", TAG+="uaccess" # STLink v1 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", MODE="660", GROUP="plugdev", TAG+="uaccess" # STLink v2 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="660", GROUP="plugdev", TAG+="uaccess" # STLink v2-1 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="660", GROUP="plugdev", TAG+="uaccess" # Hilscher NXHX Boards ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0028", MODE="660", GROUP="plugdev", TAG+="uaccess" # Hitex STR9-comStick ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002c", MODE="660", GROUP="plugdev", TAG+="uaccess" # Hitex STM32-PerformanceStick ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002d", MODE="660", GROUP="plugdev", TAG+="uaccess" # Altera USB Blaster ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess" # Amontec JTAGkey-HiSpeed ATTRS{idVendor}=="0fbb", ATTRS{idProduct}=="1000", MODE="660", GROUP="plugdev", TAG+="uaccess" # SEGGER J-Link ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0102", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0103", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0104", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0105", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0107", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0108", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1010", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1011", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1012", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1013", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1014", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1016", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1017", MODE="660", GROUP="plugdev", TAG+="uaccess" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1018", MODE="660", GROUP="plugdev", TAG+="uaccess" # Raisonance RLink ATTRS{idVendor}=="138e", ATTRS{idProduct}=="9000", MODE="660", GROUP="plugdev", TAG+="uaccess" # Debug Board for Neo1973 ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="660", GROUP="plugdev", TAG+="uaccess" # Olimex ARM-USB-OCD ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", MODE="660", GROUP="plugdev", TAG+="uaccess" # Olimex ARM-USB-OCD-TINY ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", MODE="660", GROUP="plugdev", TAG+="uaccess" # Olimex ARM-JTAG-EW ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="001e", MODE="660", GROUP="plugdev", TAG+="uaccess" # Olimex ARM-USB-OCD-TINY-H ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="660", GROUP="plugdev", TAG+="uaccess" # Olimex ARM-USB-OCD-H ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", MODE="660", GROUP="plugdev", TAG+="uaccess" # USBprog with OpenOCD firmware ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c63", MODE="660", GROUP="plugdev", TAG+="uaccess" # TI/Luminary Stellaris In-Circuit Debug Interface (ICDI) Board ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="660", GROUP="plugdev", TAG+="uaccess" # Marvell Sheevaplug ATTRS{idVendor}=="9e88", ATTRS{idProduct}=="9e8f", MODE="660", GROUP="plugdev", TAG+="uaccess" # Keil Software, Inc. ULink ATTRS{idVendor}=="c251", ATTRS{idProduct}=="2710", MODE="660", GROUP="plugdev", TAG+="uaccess" # CMSIS-DAP compatible adapters ATTRS{product}=="*CMSIS-DAP*", MODE="660", GROUP="plugdev", TAG+="uaccess" EOF