💭

環境構築

2020/09/23に公開

環境構築

Embedded Rust Techniquesを参考にして下記の環境で開発環境を構築する

ベースマシンはWindowsを使う。

  • WSL2 + Dockerを使う
  • WSL2がUSBへのアクセスが出来ないのでUSBを使う部分はWSL2以外で実現
    • デバッグフレームワーク (OpenOCD, ST-Linkなど)

Docker環境の構築

イメージの作成

# Pull base image.
# FROM rust:latest

# Pull base image.
FROM ubuntu:latest

# Install Rust
RUN apt-get update && apt-get install -y curl gcc
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
ENV PATH="/root/.cargo/bin:$PATH"
RUN rustup update

# Rust for ARM
RUN rustup target add thumbv6m-none-eabi thumbv7m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf

# Install GDB QEMU
RUN apt-get update && apt-get install -y tzdata
ENV TZ=Asia/Tokyo
RUN apt-get update && apt-get install -y gdb-multiarch openocd qemu-system-arm pkg-config
RUN apt-get update && apt-get install -y openssl libssl-dev

# Install cargo-binutils
RUN cargo install cargo-binutils
RUN rustup component add llvm-tools-preview
RUN cargo install cargo-generate

# Install Telnet
RUN apt-get update && apt-get install -y telnet

# xPack QEMU Armを使用できるようにする
RUN apt-get update && apt-get install -y wget
RUN wget https://github.com/xpack-dev-tools/qemu-arm-xpack/releases/download/v2.8.0-9/xpack-qemu-arm-2.8.0-9-linux-x64.tar.gz
RUN tar xvf xpack-qemu-arm-2.8.0-9-linux-x64.tar.gz
RUN rm xpack-qemu-arm-2.8.0-9-linux-x64.tar.gz
RUN mv xpack-qemu-arm-2.8.0-9 xpack-qemu-arm
RUN mkdir -p ~/opt
RUN mv xpack-qemu-arm ~/opt/
ENV PATH $PATH:~/opt/xpack-qemu-arm/bin

# デバッガのインストール
RUN apt-get update && apt-get install -y lldb

起動スクリプト

フォルダ構成

├── Docker
│   ├── Dockerfile
│   ├── dockerbuild.sh
│   └── run_docker.sh
└── src
    ├── app_old
    ├── cortex-m-quickstart
    ├── nuttx
    ├── qemu
    ├── sample
    └── stm32l4xx-hal

ここで、Dockerコンテナの起動スクリプト(run_docker.sh)として以下を準備する

#!/bin/sh

HOST_PATH=$PWD/..

# store a command history inside containers into this file

touch $HOME/.rust_history

xhost local:

sudo docker run --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $HOST_PATH:/mnt/rust \
-v $HOME/.rust_history:/root/.bash_history \
-w /mnt/rust \
--sysctl fs.mqueue.msg_max=128 \
--ulimit msgqueue=8192000 \
--ulimit core=-1 \
--shm-size=12G \
--name rust-embedded \
-i -t rust-for-embedded:latest \
/bin/bash

ボードアクセス

デバイスアクセスのためのツールのインストールはWindowsのツールインストールを参考にする

具体的には次の2つをWindowsにインストールする

  • OpenOCD
  • ST-LINK USBドライバ

ボードへの接続確認

ターゲットボードはNUCLEO-L476RGを使う

ここでは、次の2つを行う

  • OpenOCDでターゲットボードとPCを接続する
  • Dockerコンテナ上からボードへTelnet接続する

OpenOCD

ターゲットボードに合わせた設定ファイルを指定する

openocd -f interface/stlink-v2-1.cfg -f target/stm32l4x.cfg

OpenOCDが正しくインストールされていればこれで接続できる

Telnet接続

dockerコンテナからはlocalhostではなくhost.docker.internalを使うことでアクセスが可能

$ telnet host.docker.internal 4444
Trying 192.168.65.2...
Connected to host.docker.internal.
Escape character is '^]'.
Open On-Chip Debugger
>

接続を確認できれば、開発環境の準備は完了です。

Discussion