本稿はLinuxセットアップ記事である。とても今更感があるため、開発向けの細かいところに着目して記事にした。
今回は、Raspberry Piのクロスコンパイル環境を構築する話です。
本筋がクロスコンパイルの話でサーバー関連の話はないです。
暇なら読んでみて下さい。
SSDを用意
まっさらなSSDにインストールをおすすめする。
120GBあれば十分そう。
参考までに一通りの開発環境を入れてこんなもん。
ファイルシス サイズ 使用 残り 使用% マウント位置
udev 3.8G 0 3.8G 0% /dev
tmpfs 782M 1.5M 781M 1% /run
/dev/sda2 109G 24G 80G 23% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 12K 5.0M 1% /run/lock
/dev/sda1 511M 5.9M 506M 2% /boot/efi
tmpfs 782M 2.5M 780M 1% /run/user/1000
Debian
Ubuntuでもいいが、あえて硬派なDebian。
Debianインストールメディア作成
Live版だと3GBもあるので、ネットインストール版を持ってくる。仕事だとオフラインインストールだが、家ならネットにつないで横着してもよかろう。
ネットインストール版だとCD-Rに焼ける650MBサイズ。
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.9.0-amd64-netinst.iso
これをCD-Rに焼いて、まずはインストール。
最初に日本語指定するのとネットワークつないでおくくらいであとは放置。
GUIはシンプルなXfceにした。
Tips:スクリーンショットのとり方
別アプリのメニューを開いてスクリーンショットしたいケースがあると思う。
xfceの場合、単純にPrtScで取るとメニューが隠れてしまう。
なので、タイマーを使う。若干めんどくさい。
- まず、何もせずPrtScを押す。
-
撮影するまでの遅延時間を5秒くらいにする。
-
OK押して別アプリのメニューを開く。5秒後にキャプチャされる。
suduerに追加
まず、ユーザーがsudoできるようにする。
usermod -aG sudo airnanasi
Tips:ログアウト時のビープ音消す
まず、いちばんうざいビープ音を消す。
ターミナルで下記を。※.bash_profileに追記されます。
echo "set bell-style none" >> ~/.bash_profile
Tips:指紋認証
ツールを入れる。
sudo apt update
sudo apt install fprintd libpam-fprintd
指紋登録する。
fprintd-enroll
指紋認証を有効化する。
メニュー操作が分かりづらい。
・Spaceキーで選択・選択解除
・TabキーでOKを選んでEnter
sudo pam-auth-update
ログアウト、ログインして指紋認証できればOK。
ターミナルからsudo -iでも試してみる。
VSCodeのインストール
sudo apt update
sudo apt install code
日本語化する。
拡張機能→Japaneseで検索→Ctrl+Shift+P→Language
で検索。メニュー名は「Configure Display Language」。
GIMPのインストール
カメラ画像閲覧、編集はこいつがないと。
sudo apt update
sudo apt install gimp
Tips:Pythonについて
Debianの公式パッケージは2025/2/14時点で「3.11.2」であった。
Debianの場合、入っているバージョンは動作確認してある安定版なので、うかつにバージョンは上げないほうが良いかもしれない。
Raspberry Pi2のクロスコンパイル環境を作る
ツールインストール
下記参考。
https://qiita.com/iwatake2222/items/5b20558f8ab3f27ca4a4
sudo apt-get update
sudo apt-get install build-essential libncurses-dev git git-core
mkdir ~/raspberry
cd ~/raspberry
git clone https://github.com/raspberrypi/tools
sshが通るか確認(piはラズパイのユーザー名、IPアドレスもラズパイの)
ssh pi@raspberrypi.local
または
ssh pi@192.168.xx.xx
注:
「raspberrypi.local」はRaspberry Pi のデフォルトのホスト名に付加される .local ドメイン名です。
この形式を使用することで、同一ネットワーク内の Raspberry Pi に対して、IP アドレスを直接指定せずに名前解決を行い、SSH 接続やウェブブラウザでのアクセスが可能になります。
サンプルコード
#include <stdio.h>
int main() {
printf("Hello, Raspberry Pi!\n");
return 0;
}
ビルド
クロスコンパイラを指定してビルド。
ARCH=arm ~/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ hello.c -o hello
成功してhelloファイルができればOK。
helloファイルをscpで転送します。
scp hello pi@raspberrypi.local:/home/pi/
ラズパイにsshログインして実行。
ssh pi@raspberrypi.local
./hello
$ Hello, Raspberry Pi!
実行権限はラズパイのルートなら問題ないはずだが、実行権限がなければchmod等でつける。
おすすめはVSCodeでターミナルを2つ開いておいて、片方をssh接続しっぱなしにしておく。
gdb debugは気が向いたらやろう。
構築方法をChatGPTに聞いたけどクロスコンパイル構築は全然だめだった。
Qiitaのほうが正確。この辺弱いなぁ。。。
Raspberry Pi Pico 2のバイナリをビルドしてみた
以前作った環境をクローンしてそのままDebian上のVSCodeでビルドしてみる。
WindowsでのビルドよりPCスペックは落ちるのに明らかにコンパイルが速い。(1/3くらいの時間で終わる感じ)
ChatGPTに聞いてみたところ、
・ext4ファイルシステムが断片ファイルに強い
・elfをネイティブに扱える
・gccをネイティブに扱える(MingWなど介さない)
・ninjaの最適化
などで速い可能性があるとのこと。
結構びっくりな速さで最初コンパイルしてんのかと思ったくらい。
-以上-