あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Folding@HomeがRaspberry Pi(ARM64マシン)に対応してたので試す

Raspberry Pi Advent Calendar 2020の23日目です。

adventar.org

さすがに12月も後半なので、最近は冷え込みがだいぶ厳しいですね。自宅ではもうだいぶ前からエアコンの暖房が稼働開始していますが、朝は起きる30分くらい前から動かしていてもここ数日は足元がひんやりしています。

そこでふと気づいて、しばらく動かしていなかったFolding@HomeでCPUやGPUをぶん回して足元の暖房代わりにしようと電源を入れてみました。まあ、そううまくいくわけもなく、寒かったです。買ったばかりのM75q-2はいい排熱をしていたので、こちらは排熱を足に吹きかけるように置けば可能性はありそうです。

Folding@Homeといえば以前ベータ版だったRaspberry Pi向けのやつはどうなったかなと思って調べたら、1ヶ月前くらいに正式リリースされていたようでした。

foldingathome.org

前回は9月くらいでした。

akkiesoft.hatenablog.jp

さて、前置きが長かったですがFolding@HomeRaspberry Piにインストールして動かしてみる話です。

インストール

さっそくインストール、の前にダウンロードページを見てほしいのですが、Raspberry Pi向けのパッケージと言いつつ、debパッケージは基本的にarm64向けにビルドされています。

foldingathome.org

よって、Raspberry Pi OS 32-bitでは動作させられず、/boot/config.txtでarm_64bit=1を書いてもダメでした。なので、まだベータ版扱いのRaspberry Pi OS 64-bitを使うことにしました。ここから最新版をダウンロードして、SDカードに書き込んで起動します。

www.raspberrypi.org

起動したら3つのパッケージをダウンロード・インストールします。

$ wget (各パッケージのURL)

(GUIアプリケーション付きで入れるなら関連パッケージのインストールと全部のFAHパッケージをインストール)
$ sudo apt update ; sudo apt install libgl1-mesa-glx libglu1-mesa freeglut3
$ sudo dpkg -i fahclient_7.6.21_arm64.deb fahcontrol_7.6.21-1_all.deb fahviewer_7.6.21_arm64.deb

(GUIアプリケーションなしでいいならclientのみでOK)
$ sudo dpkg -i fahclient_7.6.21_arm64.deb


fahclientのインストール途中では色々質問されるので適宜答えます。まずはユーザー周り。すでにアカウントがあるならその情報を入れます。

Folding@home User Name: (すでに参加している場合は自分のユーザー名を入力)
Folding@home Team Number: (所属しているチームがあればチームの番号を入力)
Folding@home Passkey: (パスキーがあるならパスキーを入力)

どのくらいの計算リソースを使うかの設定。

light      - Recommended for laptops.
medium     - Higher performance setting recommended for most desktops.
full       - Contribute as much as possible.

自動起動の確認。自動起動していいなら「はい」を選択します。

Should FAHClient be automatically started?

Web画面の設定

とくにGUIアプリ無しでインストールを勧めている場合は、WebUIが使えると便利です。設定ファイルに以下の通り追記しておくと、WebUIから状態の確認と操作・設定ができるようになります。192.168.29.0/24はうちのネットワークなので、適宜自分のネットワークアドレスに書き換えてください。

$ sudo vi /etc/fahclient/config.xml

<config>
(中略)
<allow v='127.0.0.1 192.168.29.0/24'/>
<web-allow v='127.0.0.1 192.168.29.0/24'/>
<command-allow-no-pass v='127.0.0.1 192.168.29.0/24'/>
</config>


$ sudo systemctl restart FAHClient

再起動直後は403エラーを返しますが、忘れた頃にページが開けるようになっているはずです。いいんだろうかそれで🤔

動いてるのを見る

GUIアプリケーションを入れると、スタートメニューからたどってビューアー、コントローラーをそれぞれ開けます。開いて思ったけどビューアーはいらんかったな。

f:id:Akkiesoft:20201221190234j:plain

WebUIの方はこんな感じです。Raspberry Piでブラウザを開いて https://client.foldingathome.org/ にアクセスしても同じ画面が見られます。ちなみにCOVID-19に切り替えるのが遅くてちがうプロジェクトのwork unitを拾った模様。

f:id:Akkiesoft:20201221193300j:plain

topコマンドで見た負荷状況。しっかり4コア分のCPUを使っていますね。なお、GPUは未対応なのか設定で無効化されていて使用されていませんでした。

top - 11:41:59 up 6 min,  2 users,  load average: 1.42, 0.69, 0.35
Tasks: 125 total,   2 running, 123 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.3 sy, 99.0 ni,  0.3 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu1  :  0.3 us,  0.0 sy, 99.3 ni,  0.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.7 us,  0.3 sy, 99.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy, 99.7 ni,  0.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3798.2 total,   3206.5 free,    118.1 used,    473.7 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.   3592.2 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                               
 1942 root      39  19  427592  57976  11096 R 396.4   1.5   1:17.64 FahCore_a8 

まとめ

以前はRosetta@homeやFold For Covidなど他のプロジェクトでしかRaspberry PiでCovid-19関連の計算には参加できませんでしたが、いよいよFolding@Homeでも参加できるようになりました。うちも久々にタワーを組んでガッツリぶん回してみようかしらん🤔?

興味がある方、私と同じく足元暖房に計算機を使いたいと企んでいる方はぜひ試してみてはいかがでしょうか?

240px四方の1.3インチLCDにコンソールとかデスクトップとかを映す!

Raspberry Pi Advent Calendar 2020の22日目です。19日目はまめもさんの自作ファンコントローラー、20日目はつぼさんのネットワーク遅延装置づくり、21日目はgyaboさんでPi 4のベアメタル環境で V3Dレジスタにアクセスするまでのお話でした。

adventar.org

今日からはまた私のターン!今日は18日に1.3インチLCDでfbtftができるできないを追記でごっちゃにしたので整理していきます。

できました

まず、18日目の記事ではfbtftがカーネル5.xに上がったと同時に動いてたものが動かなくなったりなんだりしていて情報が錯綜していると書きましたが、なんとか1.3インチLCD(ST7789v)でも動作させられるようになりました。表示させられるようになって満足した!

やりかた

基本的にはPimoroniのフォーラムで書かれている方の手順でOKです。

forums.pimoroni.com

以下から最新のdtsをダウンロードします(フォーラムでは直接Rawのリンクになってますが、元のページ見れたほうがいい場合もあるよね)。

device tree overlay to use pidi with fbtft driver for rpi 2 B · GitHub

$ wget https://gist.githubusercontent.com/hgroll/2731ae6d05350df663b123615f765bf5/raw/f8fe3829136296c20ba670dcd572e8a5c60da995/pidi-overlay.dts

dtsをダウンロードしたらエディターで開いて、regの行を0から1に書き換えます。regは何かというと、Chip Selectの値が当てはまるらしく、CE0(BCM8)なら0、CE1(BCM7)なら1となるようです。Pimoroniの1.3インチLCDは、Breakout Garden向けモジュールも、PirateAudioもCE1が使われていたため、regが0では動作しなかったというわけでした。

(参考) Raspberry Pi - SPI device tree changes - Stack Overflow

reg = <0>;
↓
reg = <1>;

また、バックライトの設定がなぜか反対?になっていて消灯してしまっていたので、1から0に書き換えてみたところ点灯しました。13の値はPirateAudioの場合のバックライトLED用ピン番号で、ブレイクアウトのときは19になります。もしかするとconfig.txtの方で上書きできるかもしれないですが、やり方は不明なので必要に応じてここを書き換えてしまうのも手です。

led-gpios = <&gpio 13 1>;
↓
led-gpios = <&gpio 13 0>;

書き換えたらdtcコマンドでdtsをコンパイルします。

$ sudo dtc -@ -I dts -O dtb -o /boot/overlays/pidi.dtbo pidi-overlay.dts

/boot/config.txtにpidiを読み込む設定を追記します。

dtoverlay=pidi

/boot/cmdline.txtにコンソール向け設定を追記します。rootwaitのあとにスペースを入れてから続けて追記します。

 fbcon=map:10 fbcon=font:VGA8x16

コンソールセットアップで、コンソールの文字サイズの設定を変更します。

$ sudo dpkg-reconfigure console-setup

以下の通り選択する
コンソールで使うエンコーディング: UTF-8
コンソールフォントとしてサポートすべき文字セット: 最適な文字セットを指定してください
コンソールのフォント: システムに適当なフォントを選ばせる
フォントのサイズ: 8x16

あとはSPIの有効化も忘れずにやります。

$ sudo raspi-config nonint do_spi 0

ここまでできたら再起動して、1.3インチLCDにコンソールが出ることを確認します。

f:id:Akkiesoft:20201221174338j:plain

GUIも出したいときは

小さくてあまり使い物になりませんがfbcpを使えばGUIも出ます。

github.com

インストールは略しますが、手順通り設定すればデスクトップが映るようになります。ただ、解像度の設定次第では何がなんだかわからない感じになるので、VGAくらいに設定しておくと良いかもしれません。

f:id:Akkiesoft:20201221174328j:plain

また、Pimoroniのフォーラムやdtsファイルのコメントにも書かれているとおり、結構ちらつきが激しいです。dtsのinitパラメーターをいじっらた改善できるんかしら?

まとめ

Pimoroni製品についてる1.3インチ240x240LCDを最近(Linux Kernel 5.4くらい)のRaspberry Piでfbtftとして使う手順でした。

映るには映ったんですが、まあ文字が小さくて読み安くはないので、IPアドレスを読み取るとか、CM4でカーネルクラッシュしたときの表示を軽く拾う(拾えるのか?)とか、そんくらいの用途になりそうです。

2021/1/13追記

2021年初めから流行ってて私も入手していたマジョカアイリス方面から参照されていてチビッた。私も後でそちらを参考にさせてほしいですー(超絶他力本願寺)。あと、fbcpの代わりにX11に設定書いちゃうのもいけます。こっちのが多少は早いはず。

$ sudo vi /etc/X11/xorg.conf.d/99-fbdev.conf

Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb1"
EndSection

qiita.com

今日の検車区

駅前をPokemonGo散歩でもしようと外に出て、電車が見えたところで唐突に思い出し、検車区を見に行く用の休日回数券の残数を見たら残り3往復分で、機嫌が明日まででした。検車区散歩ですら使い切れないのか……🤔🤔🤔🤔🤔

f:id:Akkiesoft:20201219225952j:plain

というわけで1往復ぶんを使うことにして検車区を見てきました。最初と用事が変わっているので、検車区を見に来るにはもう出遅気味な時間です。

f:id:Akkiesoft:20201219230003j:plain

最近納入された2141Fが検車区にいました。投資計画の予定数を越してるやつだとかで、ハイペースというかオーバーペース?IR無線の撤去工事をやるから予備を作る、とかなんでしょうかね。しらんけど。写真は8630Fを重視気味に。

f:id:Akkiesoft:20201219230056j:plain

3000系の工事も淡々と進んでおり、3011Fも今週?戻ってきたようです。8628Fを重視気味に。

f:id:Akkiesoft:20201219230438j:plain

定番撮影スポット。2本しか8500系がいないところに若干の寂しさを感じるところ。今週は仕事などでわりとよく出かけてたんですけど、見かけはするけど乗れなくなりましたね。

f:id:Akkiesoft:20201219230644j:plain

2138Fがいる線が架線の電源を切ってなにかやってました。が何をしていたかはわからず。

f:id:Akkiesoft:20201219230545j:plain

ミク。

f:id:Akkiesoft:20201219230629j:plain

マジカルミライ2020 in TOKYOに行ってきた

金曜日にお休みをいただいて、幕張までマジカルミライ2020の企画展に行ってきました。土日もやってますけど、平日なら空いてて行きやすいかなと思った次第。実際まあまあ空いていたので良かったですね。

f:id:Akkiesoft:20201219224455j:plain

まず海浜幕張駅ニューデイズからミクグッズに釣られるオタク。ポカリスエット2本でマルチクリアケースがもらえます。マスクを入れるのにピッタリでした。

f:id:Akkiesoft:20201219224557j:plain

お出かけに連れ歩いてるいつものミクともうひとりふやしたミクで参戦。しかしガチ勢はデカいふわミクさんたちを抱いて会場を歩いていたりするので、マジミラはぬいを連れ歩いていても普通といったいわば楽園的な場所でした。

f:id:Akkiesoft:20201219224744j:plain

ミクマスク(自作)

f:id:Akkiesoft:20201219224952j:plain

今年の冬バージョンの等身大フィギュア。美しい…。

f:id:Akkiesoft:20201219225015j:plain

ピアプロのボードはホワイトボードペンを置かない代わりに、入場者の配布物がクレヨンになっていて、これで描けるようになってました。描いてきましたで。

f:id:Akkiesoft:20201219225040j:plain

メッセの外でミク。あたらしい子はメルカリでポチポチしてお迎えしたんですけど、足とかグネってたりしていてアレなんですが、これはこれで個性……なんかな?かわいいね。

f:id:Akkiesoft:20201219225150j:plain

1時間半かけて行って、1時間ちょっと見て、また1時間半かけて帰るという、移動のほうが多いお出かけでしたが、久々に電車もガッツリ乗れてよかったですね。帰りは鷺沼で急行に乗り換えたら2139Fが来たので、ミクと撮影しました。

f:id:Akkiesoft:20201219225358j:plain

240px四方の1.3インチLCDで遊ぼうとしたら闇を見た(追記で動いた!)

Raspberry Pi Advent Calendar 2020の18日目です。

adventar.org

今日はいよいよCM4から脱して、こないだ買った240px四方の1.3インチLCDで遊ぼうと思います。

(追記)追記を繰り返したのでTwitterのような動くまでの過程をお楽しみいただける長編になっていますがご容赦ください。

こないだの

12日目に書いた記事でちらっと書いてたやつです。

akkiesoft.hatenablog.jp

Breakout Gardenに差し込める240px四方の1.3インチIPS LCDモジュールです。

1.3" SPI Colour LCD (240x240) Breakout – Pimoroni

写真の右側がモジュールです。なお、このディスプレイはPirate Audioシリーズでも使われています。

f:id:Akkiesoft:20201217223615j:plain

Pythonで使う

これは非常にかんたんで、ここにPimoroniのPythonライブラリが存在するので、適当にインストールしてサンプルを動かすと動きます。

github.com

これは画像を動かすサンプルで、サンプル画像を表示したなんのひねりもない写真です。

f:id:Akkiesoft:20201217223904j:plain

コンソール画面とかでたら便利じゃね、と思って調べたら闇を見た

そう思って調べ始めたら、fbtftとかなんとかが色々でてきて、そういえば昔PiTFTあたりでやってたかな?こう言うの、というところまでは思い出したのですが、どうも今年の途中でLinuxカーネルが5.4に切り替わったあたりでfbtft周りがまともに動かなくなる事象が起きているようです。ディスプレイ系モジュールを販売しているところが順次対応を進めているっぽいですが、わりと最近でも動く動かないをギャーギャーやっているっぽく、これは難易度が高そうです。

いくつか調べると、DeviceTreeをいい感じに差し替えると動いたという話を数件見かけましたが、どちらを試しても私の環境では動かず、みんなどうやって動かしてるんでしょ?状態です。DeviceTreeはなんもわからぬ……。

PirateAudioのディスプレイ部分でやろうとしている人の書き込みは、4.9系で動かせとのこと。いやさすがになあ。うかつにapt upgradeしたらしんじゃうし。

forums.pimoroni.com

Raspberry Piのフォーラムでは2件ほどヒットしたもののこれでも動かず。DRAgon715205という人がここ数日チャレンジしているっぽいのですが、めちゃくちゃマルチポストしていて中の人にたしなめられています……。fbtftのIssueにもいました。気持ちはわかる。

replacement for fbtft "init=" section in 5.4+? - Raspberry Pi Forums

1.54LCD ST7789v fbtft display at kernel 5.4 - Raspberry Pi Forums

Raspberry Piのフォーラムの方はピンアサインがPiTFT向けになっているので、適宜差し替えはしてみましたが、dmesgで見るとなんか初期化に失敗しているのでダメそうでした。Pimoroni方はfb0として見えて入るようですが、画面にはなにもでず。

[    5.507913] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[    5.511267] fb_st7789v: module is from the staging directory, the quality is unknown, you have been warned.
[    5.512061] fbtft_of_value: height = 240
[    5.512079] fbtft_of_value: regwidth = 8
[    5.512096] fbtft_of_value: buswidth = 8
[    5.512118] fbtft_of_value: debug = 0
[    5.512134] fbtft_of_value: rotate = 0
[    5.512153] fbtft_of_value: fps = 25
[    5.512169] fbtft_of_value: txbuflen = 32768
[    5.868243] Console: switching to colour frame buffer device 30x30
[    5.868931] graphics fb0: fb_st7789v frame buffer, 240x240, 112 KiB video memory, 32 KiB buffer memory, fps=25, spi0.0 at 40 MHz

fbiコマンドと言うので画像を直接表示するという方法があったので、試してみましたが特にでず。

07. ラズパイでフレームバッファ #1 :: bitset

pi@usbpi:~ $ sudo LANG=C fbi -d /dev/fb0 -T 1 -a --noverbose --noedit st7789-python/examples/cat.jpg 

ソースコードになにか問題がある可能性はあるのかも?

Adafruitのドライバーに頼ってみる

Adafruitが同じディスプレイモジュールを使ったアイテムを売っており、どうもこちらは対応が進んでいるようなので、この辺のコードをベースに移植するのが近そうです。

www.adafruit.com

www.adafruit.com

リポジトリはこの辺に。

github.com

AfafruitはDC=25,LED=26で、PimoroniはDC=9,LED=13らしいので、DeviceTreeのdtsを書き換えてコンパイルして挑戦。しかし、なんかGPIO9がもう使われているどうとかで怒られる始末。

$dmesg|less

[    5.426689] fb_st7789v: loading out-of-tree module taints kernel.
[    5.427474] pinctrl-bcm2835 fe200000.gpio: pin gpio9 already requested by fe204000.spi; cannot claim for spi0.0
[    5.427493] pinctrl-bcm2835 fe200000.gpio: pin-9 (spi0.0) status -22
[    5.427512] pinctrl-bcm2835 fe200000.gpio: could not request pin 9 (gpio9) from group gpio9  on device pinctrl-bcm2835
[    5.427529] fb_st7789v spi0.0: Error applying setting, reverse things back
[    5.427573] fb_st7789v: probe of spi0.0 failed with error -22

Pimoroniのdtsを眺めていて気づきました。もしかしてfragment@3のこれがpin gpio9 already requestedを回避するやつかな?

	fragment@3 {
		target = <&spi0_pins>;
		__overlay__ {
			brcm,pins = <10 11>; /* exclude BCM 9 from SPI to use it as DC in fbtft driver */
			brcm,function = <4>; /* alt 0 */
		};
	};

あたりでした。

[    5.489767] fb_st7789v: loading out-of-tree module taints kernel.
[    5.490621] fbtft_of_value: width = 240
[    5.490639] fbtft_of_value: height = 240
[    5.490659] fbtft_of_value: buswidth = 8
[    5.490681] fbtft_of_value: debug = 0
[    5.490697] fbtft_of_value: rotate = 0
[    5.492732] ST7789 adafruit fbtft driver
[    5.492747] Size: (240, 240)
[    5.664195] Rotation 0 offsets 0 0
[    5.742520] Console: switching to colour frame buffer device 30x30
[    5.743203] graphics fb0: fb_st7789v frame buffer, 240x240, 112 KiB video memory, 4 KiB buffer memory, fps=20, spi0.0 at 32 MHz

しかしコンソールは表示されず。うーむ!

まとまらない

アレな時期にちっさいディスプレイでコンソールをやりたいと思ってしまったようで、大敗北しました。もしこれやったらうまくいくで、という情報があったらぜひお願いしたいです。ツイッターエゴサはしています。

たまには動かない記事でも……いっか!(適当)

(追記1)バックライトはピンアサインが違う

これはメモですが、バックライトのGPIOピンアサインは、BreakoutGardenとPirateAudioで違いました。BreakoutGardenは場所によってBCM18かBCM19、PirateAudioは上にあるとおりBCM13です。多分ここができてもコンソールがでないところは変わらないですが……。

Breakout Garden for Raspberry Pi (I2C + SPI) – Pimoroni

小さい方はBCM19。

https://shop.pimoroni.com/products/breakout-garden-mini-i2c-spi

なんか他のピンアサインもちょっと違ったりしていないか気になってきたのでもっとコードを読まないとダメそうです。

(追記2)動いた!!

他のピンアサインもちょっと違ったりして

特にCSがPimoroniではCE1(BCM7)を使っているのが気になっていて、パラメータを探っていたのですが、StackOverflowにヒント発見。

Raspberry Pi - SPI device tree changes - Stack Overflow

regがCS(CE)の値だったのかよ!

reg = <0>;  /* CE0 */
(略)
reg = <1>;  /* CE1 */

というわけでregの値を1にした結果、動いた!!

f:id:Akkiesoft:20201218005406j:plain

そうすると、おそらく冒頭のPimoroniのフォーラムにあったDeviceTreeのソースも、regを書き換えたら動きそうな気配です。そのあたりの検証とか、状況を整理して、22日あたりのAdvent Calendarでまとめていきましょう。