💭
環境構築
環境構築
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