LoginSignup
1
0

More than 1 year has passed since last update.

RaspberryPiPico の実行イメージをWSL2とVM上のUbuntuでビルドしてみた

Posted at

目標

RaspberryPiPico で動作する実行イメージを生成する。
RaspberryPiPicoは実行イメージである".uf2"ファイルを書き込めば動作する。このファイルを作成するための手順を環境構築から記載した。

想定する動作環境

動作環境は以下の通り

  • OS: Ubuntu 22.04 LTS
  • VM: VMWare Workstation 16 Player, WSL2
  • PC: 普通のWindows10

※WSL2上のUbuntuでもVM上でも両方動きました。

環境構築

環境構築をしていきます。
大まかな手順は以下の通り。

  • SDKモジュールとパッケージのダウンロード
  • 環境変数の設定

必要なパッケージやSDKモジュールのダウンロード

ビルドに必要なパッケージをインストールする。

$ sudo apt update
$ sudo apt install -y git build-essential gcc cmake gcc-arm-none-eabi

RaspberryPi Pico のSDKをインストールする。今回は/opt以下に入れるので、sudoを用いる。

$ sudo git clone https://github.com/raspberrypi/pico-sdk.git /opt/pico-sdk
$ sudo git -C /opt/pico-sdk submodule update --init

SDKがダウンロードされたかチェックする。

~$ ls /opt/pico-sdk
cmake            docs      LICENSE.TXT             README.md  tools
CMakeLists.txt   external  pico_sdk_init.cmake     src
CONTRIBUTING.md  lib       pico_sdk_version.cmake  test

環境変数の設定

環境変数"PICO_SDK_PATH"にSDKのパスを設定する。
"/etc/profile.d/pico-sdk.sh"を作成する。このシェルスクリプトは、起動時に自動的に実行される。"export ..."で環境変数を登録する。

/etc/profile.d/pico-sdk.sh
export PICO_SDK_PATH=/opt/pico-sdk

ここで再起動する。
もしくは"source /etc/profile"コマンドで環境変数が反映される。(文字の色づけが失われるかも)

再起動したら(もしくは、sourceしたら)、環境変数のせっていが反映されていることを確認する。

$ echo $PICO_SDK_PATH
/opt/pico-sdk

環境構築の初期設定は終わり。

コードを書いていく&ビルドする

コードを書いてビルドする手順の概略は以下の通り

  • プロジェクトを入れるディレクトリを作ってそこに移動する
  • ソースコードを書く
  • CMakeLists.txtを書く
  • buildディレクトリを作成して移動する
  • cmakeする
  • buildする
  • ".uf2"(RaspberryPiPicoに書き込むファイル)ができている

プロジェクトを入れるディレクトリを作る

コードをまとめるプロジェクト用のディレクトリをつくる。プロジェクトという単位で管理されるわけじゃないが、わかりやすさのためにまとめた方が良い。

ビルド用のディレクトリを作成する。

$ mkdir helloworld
$ cd helloworld/

コードを書く

ソースコードを作成する。ファイル名はhello.cとする。まずは、ファイルがひとつの場合を紹介する。

hello_w.c
#include <stdio.h>
#include <pico/stdlib.h>

int main()
{
    stdio_init_all();

    while (true) {
        printf("Hello world\n");
        sleep_ms(500);
    }
}

CMakeList.txtを作成する。

CMakeList.txtを、ソースコードと同じディレクトリに作成する。変更のポイントは以下の通り。基本的にココだけ帰ればOK。

  • このサンプルの1行目の"set(APP_NAME "に続く"helloworld"がアプリ名。実行イメージのファイル名となる。この場合、"helloworld.uf2"が作成される。".uf2"のファイル名を変えたい場合はココを変える。なお、プロジェクトのディレクトリ名と同じでなくても良い。
  • このサンプルの2行目の"set(SOURCE_FILES "に続いてソースコードのファイル名を指定する。この例では、ソースコードがひとつだけだが、ソースコードが複数ある場合、全てのソースファイル名をスペースで区切ってここに列挙する。
CMakeLists.txt
set(APP_NAME helloworld)  #最終的にできあがるファイル名を指定
set(SOURCE_FILES hello_w.c)  #ソースコードを指定。複数ある場合はスペースで区切って指定

cmake_minimum_required(VERSION 3.13)

include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)

project(${APP_NAME} C CXX ASM)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

pico_add_extra_outputs(${PROJECT_NAME})

target_link_libraries(${PROJECT_NAME} pico_stdlib)

pico_enable_stdio_usb(${PROJECT_NAME} 1)
pico_enable_stdio_uart(${PROJECT_NAME} 0)

ここまでの成果を確認する。"CMakeLists.txt"と"hello_w.c"がある。

$ pwd
/home/hoge/helloworld
$ ls
CMakeLists.txt  hello_w.c

build ディレクトリを作成する & cmake する & make する

ビルドの中間ファイルと実行イメージ".uf"ファイルを格納するディレクトリを作成する。名前は"build"とする。

ディレクトリ"build"を作成する。

$ mkdir build 
$ cd build/

cmakeする。最後に"Build files have been written to..."と出てくればOK。

$ cmake ../
PICO_SDK_PATH is /opt/pico-sdk
PICO platform is rp2040.
:(省略)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hoge/helloworld/build

ビルドするための環境ができあがったことを確認する。"Makefile"があればOK。

$ ls
CMakeCache.txt  cmake_install.cmake  generated  pico-sdk
CMakeFiles      elf2uf2              Makefile   pioasm

makeでビルドする。

$ make

makeが終わったら、lsで確認する。ファイル名の末尾が".uf2"が出来ていればOK。(この場合は"helloworld.uf2)
このファイルをRaspberryPiPicoに書き込む。

$ ls
CMakeCache.txt       generated       helloworld.elf.map  pico-sdk
CMakeFiles           helloworld.bin  helloworld.hex      pioasm
cmake_install.cmake  helloworld.dis  helloworld.uf2
elf2uf2              helloworld.elf  Makefile

その他

ソースコードを書き換えたら

ソースコードを書き換えたら、"build"ディレクトリに移動して、cmakeしてmakeする。

$ pwd
/home/hoge/helloworld/build
$ cmake ../
$ make

CMakeLists.txtを書き換えたら

CMakeList.txtを書き換えたら、"build"ディレクトリごと削除してまた作れば良い。

$ pwd
/home/hoge/helloworld/build
$ cd ../
$ rm -rf build/
$ mkdir build
$ cd build
$ cmake ../

複数のソースコードがある場合、ソースコードが増えた場合

このサンプルのCMakeLists.txtの 2行目の"hello_w.c"につづいて、ソースコードのファイル名を指定すればいい
ヘッダファイルは記載しなくても良い(と思う)。

CMakeLists.txt
set(APP_NAME helloworld)  #最終的にできあがるファイル名を指定
set(SOURCE_FILES hello_w.c hoge1.c hoge2.c)  #ソースコードを指定。複数ある場合はスペースで区切って指定

cmake_minimum_required(VERSION 3.13)
(省略)

新しいプロジェクト(アプリ)を作りたい場合

  • プロジェクト用のディレクトリを作る
  • ソースコードを作る
  • CMakeLists.txtを作る
  • buildディレクトリを作る&移動する
  • cmakeした後makeする
  • ".uf2"ができている

以上

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