1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FreeBSDAdvent Calendar 2021

Day 16

PlatformIO in BastilleBSD

Last updated at Posted at 2021-12-15

PlatformIO(pio)のCLIはpythonで作られているのでラッパーのスクリプトはFreeBSDでも動きますがツールチェインのバイナリが用意されていないので、ビルドはできません。

ツールチェインをFreeBSD用に用意するのは大変なので、FreeBSDにはLinuxバイナリ互換機能があるので、これを使う方法を思いつきました。

環境はBastilleBSDを使うので、こちらのページを参考に設定します。pythonもインストールしておきます。

pythonのパッケージマネージャのpipはpkgになってないので、手動で入れます。

% sudo bastille cmd piojail python -m ensurepip

pioをインストールします。

% sudo bastille cmd piojail pip3 install -U platformio

これでプロジェクトは作れるようになります。

しかしpio runするとtoolchainが無いのでエラーになります。

Error: Could not find the package with 'toolchain-gccarmnoneeabi @ >=1.60301.0' requirements for your system 'freebsd_amd64'

このfreebsd_amd64というのは、/usr/local/lib/python3.8/site-packages/platformio/util.pyのget_systype()で設定されています。

ここでlinuxを偽装します。

def get_systype():
#    type_ = platform.system().lower()
    type_ = 'linux'
#    arch = platform.machine().lower()
    arch = 'i686'

設定を確認するとこうなります。

# pio --version
PlatformIO Core, version 5.2.4
# pio system info
--------------------------  -------------------------
PlatformIO Core             5.2.4
Python                      3.8.12-final.0
System Type                 linux_i686
Platform                    FreeBSD-13.0-RELEASE-p4
File System Encoding        utf-8
Locale Encoding             UTF-8
PlatformIO Core Directory   /root/.platformio
PlatformIO Core Executable  /usr/local/bin/platformio
Python Executable           /usr/local/bin/python
Global Libraries            0
Development Platforms       3
Tools & Toolchains          8
--------------------------  -------------------------

これでlinuxのtoolchainがインストールされますが、soが無くてコマンドが実行できません。(toolchainによっては/compatの下のsoだけで実行できるケースもあるようです)

Building in release mode
Compiling .pio/build/lpc812/FrameworkMbedCore/cmsis/TARGET_CORTEX_M/mbed_tz_context.o
arm-none-eabi-gcc: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

soファイルはpioのパッケージファイルに入っていて、ホームディレクトリの.platformio以下にありますので、パスをLD_LIBRARY_PATHに設定します。(/compt/linux/libにコピーするリンクを張るかしてもいいです)

pkgなsoも必要だったのでインストールします。

追記:armのgccがlibisl.so.15の依存が増えてたのでrpmからファイルを拾い出して/compatにコピーしました。

% sudo bastille pkg piojail install linux-c7-devtools

ビルドできました。

# pio run
Processing lpc812 (platform: nxplpc@3.5.0; board: lpc812; framework: mbed)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nxplpc/lpc812.html
PLATFORM: NXP LPC (3.5.0) > NXP LPC800-MAX
HARDWARE: LPC812 30MHz, 4KB RAM, 16KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External (blackmagic, jlink)
PACKAGES: 
 - framework-mbed 5.51001.181029 (5.10.1) 
 - toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 39 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio/build/lpc812/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]   5.9% (used 240 bytes from 4096 bytes)
Flash: [===       ]  27.8% (used 4556 bytes from 16384 bytes)
========================= [SUCCESS] Took 1.48 seconds =========================

もともとpioはMacOS Xで使っていたのですが、El capitanのPythonが2.7で現行のpio ver5ではPython 3以上になりupgradeができなかったので、あきらめてFreeBSDでも使えるようにしてみました。

MacOS Xの以前のバージョンでもそうでしたがすべてのplatformがちゃんと使えるとは限りません。

atmelavr

まずはArudinoを試してみます。

% pio init --board miniatmega328

なぜかアップロードツールのavrdudeはpioの方にはなくて、FreeBSDのpkgをインストールしました。

% pio run --target upload --upload-port /dev/cuaU0

ところがerrorになります。探してみたところplatformio.iniに以下を追加してOK牧場でした。デフォルトの115200ではこけるようです。ユーザーアカウントでビルドしている場合cuaU0のパーミッションを変更しておく必要があります。/etc/devfs.rulesで設定するのが良いです。

upload_speed = 57600

timsp430

パッケージが無いようです。

Error: Could not find the package with 'platformio/toolchain-timsp430 @ ~1.40603.190926' requirements for your system 'linux_i686'

microchippic32

ビルドでエラーになります。

Compiling .pio/build/chipkit_dp32/FrameworkArduino/Print.cpp.o
/home/hiroki/.platformio/packages/framework-arduinomicrochippic32/cores/pic32/HardwareSerial.cpp: In function 'bool Serial_available()':
/home/hiroki/.platformio/packages/framework-arduinomicrochippic32/cores/pic32/HardwareSerial.cpp:897:54: internal compiler error: Segmentation fault
 bool Serial_available() { return Serial.available(); }
                                                      ^

/home/hiroki/.platformio/packages/framework-arduinomicrochippic32/cores/pic32/HardwareSerial.cpp:897:54: internal compiler error: Aborted
pic32-g++: internal compiler error: Aborted (program cc1plus)
*** [.pio/build/chipkit_dp32/FrameworkArduino/HardwareSerial.cpp.o] Error 255
========================= [FAILED] Took 121.50 seconds =========================

espressif32

ビルドはできるようです。uploadもできました。

espressif8266

ビルドはできるようです。uploadは試してません。

nxplpc

ビルドはできるようです。uploadは試してません。

ststm32

ビルドはできるようです。uploadは試してません。

ststm8

ライブラリのビルドでこけます。

atmelsam

パッケージが無いようです。

Error: Could not find the package with 'platformio/toolchain-gccarmnoneeabi @ ~1.70201.0' requirements for your system 'linux_i686'

raspberrypi

ビルドはできるようです。uploadは試してません。

gd32v

パッケージが無いようです。

Error: Could not find the package with 'platformio/toolchain-gd32v @ ~9.2.0' requirements for your system 'linux_i686'

後日追記:Linux方面にはとんと疎いものでi686は32bitで64bitはx86_64になるようです。Linuxバイナリ互換機能は64bitバイナリもサポートしているので、x86_64でもちゃんと使えるようです。

FreeBSD 13.1でPythonが3.8から3.9になって動かなくなったので、再インストールしました。

% pio system info
--------------------------  -------------------------
PlatformIO Core             6.1.3
Python                      3.9.13-final.0
System Type                 linux_x86_64
Platform                    FreeBSD-13.1-RELEASE
File System Encoding        utf-8
Locale Encoding             UTF-8
PlatformIO Core Directory   /home/hiroki/.platformio
PlatformIO Core Executable  /usr/local/bin/platformio
Python Executable           /usr/local/bin/python
Global Libraries            0
Development Platforms       8
Tools & Toolchains          20
--------------------------  -------------------------

公式なサポートでもないし、たまたま使えてるだけなので、ご注意ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?