コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2024年6月24日 >>> 2024年6月11日
link もっと後

2024年6月24日

何もない組み込み環境でDOOMを動かす - その1 - 準備編

目次: RISC-V

みなさまはDOOMをご存じでしょうか?特に海外で超有名なFPS(First Person Shooter、一人称視点のシューティングゲーム)の草分け的な存在です。1993年にid Softwareが開発したロングセラーシリーズです。オリジナルのid Softwareによる実装も2012年にオープンソースになりました(リポジトリへのリンク)。

日本ではそれほどでもない気がしますが、海外ではDOOMの人気は絶大で海外エンジニアの間ではゲーム機ではない電子機器(プリンタ、カメラ、ATMまで)でDOOMを動作させる改造が非常に人気のようです。

DOOM移植の良いところとしては、3D描画のゲームなので画面が派手で目を引きます。それでいて昔のゲームなので、しょぼいスペックの機器でもそこそこ動きます。操作せずに放っておいてもデモが実行される点も素晴らしいです。

今回はオリジナルのDOOMではなくて、クローン実装のprboom2(リポジトリへのリンク)を使います。prboom2はLinuxで簡単に動作確認できて楽です。いいですね。

IWADファイル

DOOMはゲームエンジンなので実行時にはゲームデータを指定しなければなりません。ゲームデータは*.WADファイル(Where's All Dataの略らしい)に格納されていて、オリジナルDOOMのWADファイルのことをIWAD(Internal WAD)と呼ぶようです。IWADはDOOMの製品版に付属しているはずです、見たことがないから知らないですけど。本来はオリジナルDOOMを購入しDOOM.WADを持ってくるべきですが、手に入れる手段がなさそうです……。

ネット検索するとIWADを公開しているサイトがあるのでどうにかして手に入れてください。Doom Wiki(リンク)にDOOM.WADのMD5 hashが掲載されているので、入手したIWADファイルがどのバージョンか(あるいは壊れていないか)確認しましょう。

今回はIWADファイルはDOOM.WAD、バージョン1.8のもので試します。

Linuxで動作確認

まずは普通に動かしてみます。ビルドは簡単でbootstrapとconfigureを実行してmakeするだけです。SDLがインストールされていない環境の場合はlibsdl2-devのインストールが必要かもしれません。

prboom2のビルドと動作確認
$ cd prboom2
$ ./bootstrap
$ ./configure
$ make

$ ./src/prboom -iwad DOOM.WAD

DOOM同様prboom2もゲームエンジンなので実行時にはゲームデータを指定しなければなりません。ビルド時に勝手に生成されるprboom.wadファイルと、ゲームデータが入ったIWADファイル(オリジナルのDOOM、freedoomなど)の2つが必要です。prboom.wadはカレントディレクトリに置けば勝手に見つけます。IWADファイルはオプション-iwadで指定しましょう。


prboom2起動画面(IWAD: DOOM 1.8)

音声なしで起動したければ-nosound、フルスクリーンではなくウインドウモードが良ければ-nofullscreenオプションが使えます。フルスクリーンとウインドウモードの切り替えはゲーム内のオプションから設定することもできます。

確認だけで終わってしまいました。次回から組み込み環境への移植を始めたいと思います。

編集者:すずき(2024/10/25 02:06)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年6月21日

GitHubの2FA手法としてSMSが非推奨となった

タイトルのとおりなのですがGitHubアカウントの2FA(二要素認証、2 Factor Authentication)で使える手法として、SMSが非推奨になりました。最近、GitHubではこんな警告が出ます。


GitHubの2FA手法に関する警告

検索用に文字起こししておくと、

GitHubの2FA手法に関する警告、文字起こし
Please configure another 2FA method to reduce your risk of permanent account lockout.
We strongly recommend against SMS as it is prone to fraud and delivery may be unreliable
depending on your region.

(適当訳)
アカウントが永久にロックアウトされる危険性を減らすため、他の2FA手法を設定してください。
SMSは詐欺にあいやすく地域によっては配送が信用できない場合があるので、SMSはお勧めしません。
(strongly recommend against itなので「利用を避けることを推奨する」くらい強い意味かも?)

SMSが非推奨になった理由は詳しく書かれていませんが、携帯電話番号乗っ取り被害(スマホの電話番号を乗っ取られる「SIMスワップ」被害が増加 求められる対策とは? - ITmedia NEWS)を受けてのものでしょう。

SMS以外の2FA手法は下記のものがあります。


GitHubで使用可能な2FA手法の一覧

Authenticator appが最もお手軽でしょう。スマホに過剰に依存するのはあまり好きじゃないですけど。Authenticator appはスマホの紛失や破損で設定が消し飛ぶと2FAできなくなる弱点がありますから、設定のバックアップが取れるアプリを選択すると良いと思います。

例えばGoogle Authenticatorなら[アカウントを移行] - [アカウントのエクスポート]とするとQRコードが表示され、別のスマホに設定を丸ごと移行可能です。アカウントエクスポート用のQRコードがバックアップデータ代わりになりそうですが、時間制限とかあるんですかね??

Security keysはどうかと調べてみると、1つ1万円〜2万円(YubiKey 5 NFC, YubiKey 5 bio)となかなかのお値段でした。これも紛失や破損に備えるなら2つ購入した方が良いでしょうから、GitHubの2FAのために2万円〜4万円払えるか?というとうーん、嫌ですね……。

しばらくはAuthenticator appで運用したいと思います。

編集者:すずき(2024/06/29 13:46)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年6月17日

GPSDに外部から接続する方法

目次: 自宅サーバー

昔買って放置していた秋月のGPS受信機キット(太陽誘電のGYSFDMAXBを使用しているそうな)を組み立てて、サーバーPCに接続しました。GPSが送ってくるNMEAメッセージはgpsdが一旦受け取りますが、このメッセージをローカルマシン以外から見る方法が地味にわからなかったのでメモしておきます。環境はDebian Bookwarmです。

どうやらgpsdは直接ソケットをlistenしているわけではなく、gpsd -> systemd -> 外部という形になっているようです。まずsystemdの設定を変更します。

systemdのソケット設定変更
# /etc/systemd/system/sockets.target.wants/gpsd.socket

[Socket]
ListenStream=/run/gpsd.sock
#ListenStream=[::1]:2947
#ListenStream=127.0.0.1:2947
# To allow gpsd remote access, start gpsd with the -G option and
# uncomment the next two lines:
ListenStream=[::]:2947
ListenStream=0.0.0.0:2947
SocketMode=0600
BindIPv6Only=no

次にgpsdの設定を変更します。オプションに-G(外部からの接続を受け付けるためのオプション)を追加します。

gpsdの設定変更
# /etc/default/gpsd

# Other options you want to pass to gpsd
GPSD_OPTIONS="-G"

設定を反映します。

設定の反映とソケット設定の確認
# systemctl daemon-reload
# systemctl restart gpsd.socket
# systemctl restart gpsd.service

# netstat -tlp | grep gpsd
tcp        0      0 0.0.0.0:gpsd            0.0.0.0:*               LISTEN      1/init

設定を反映するとsystemd(pid=1, initプロセス)がポートgpsd(= 2947)をlistenしていること、listenアドレスがlocalhostではなく0.0.0.0つまりinaddr_anyになっていることが確認できます。

あとは外部のマシンからxgps (gpsdが動いているマシンのIP):2947などとすれば、gpsdに接続してNMEAメッセージが届いていることを確認できるはずです。

悲しいオチ

NMEAメッセージは送ってきてくれますが、窓際に設置して1時間位放置してもまったくGPS衛星を捕捉しません。壊れてしまったのだろうか……。

編集者:すずき(2024/06/22 16:26)

コメント一覧

  • hdkさん(2024/06/22 22:08)
    GPSの最初の同期を取る時は見晴らしのいい屋外に持ち出してやったほうがいいと思います。以前買ったGPS内蔵のノートパソコンでも、最初だけは外付けアンテナをつないで屋外でやっとという感じでした。スマートフォンは携帯電話の電波や無線LANの情報を元に高速同期するのであれに慣れてしまうと簡単に掴めそうに思ってしまいますが、そういうのがないGPSは窓際なんかでは厳しそうです。
  • すずきさん(2024/06/23 00:12)
    ありがとうございます。バルコニーではない出窓(天井など邪魔なものがなく、空が全面に見える)、ギリギリまで持ってきたらやっと同期が取れました。
    でも電池入れてないので、電源を切ったら同期情報が消えてしまうんですよね。もう出窓の側から動かせないぞ……これ……。
open/close この記事にコメントする



2024年6月11日

ROCK 3Cの描画速度改善

目次: Arduino

エアガン的当てゲームを作り始めたとき(1月くらいかな?)から気になっていたのですが、ROCK 3C上でJavaを使って画面を描画すると妙に描画速度が遅いです。もうひとつ不思議なことに、マウスカーソルをぐりぐり動かすと描画が止まります。なんで?

最初はJava側の問題か?と思ったものの、秋葉原のTARGET-1に置いている機体はJava側のプログラムは全く同じなのに、描画速度がメチャ速いです(マウスカーソルを動かしても画面描画が止まらない)。ROCK 3C側(というかメインSoCであるRockchip RK3566)のグラフィック関連がどこかおかしいんでしょう。たぶん。

描画が遅い機体と速い機体で大きな違いがあるとするとaptでアップデートしたくらいです。描画速度が遅い機体を持ち帰ってきてアップデートしました。結果だけ先に言ってしまうと、描画速度はやや改善したものの全く同じにはなりませんでした。何が違うんだろう?

カーネルとlibmaliのアップデート

描画速度に効いていると思われるのは下記の2つです。

  • カーネルバージョン: 5.10.160-33-rk356x -> 5.10.160-34-rk356x
  • libmali: libmali-bifrost-g31-g2p0-x11-gbm -> libmali-bifrost-g52-g2p0-x11-gbm

アップデート方法はapt-get updateとapt-get upgradeですが、下記のようにchanged its 'Origin' value from 'AAAA' to 'BBBB'エラーが出る場合があります。

apt-get updateのエラー
Reading package lists... Done
E: Repository 'https://radxa-repo.github.io/bullseye rockchip-bullseye InRelease' changed its 'Origin' value from 'rsdk-local rockchip-bullseye' to 'Radxa'
E: Repository 'https://radxa-repo.github.io/bullseye rockchip-bullseye InRelease' changed its 'Label' value from 'rsdk-local rockchip-bullseye' to 'Freight'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
E: Repository 'https://radxa-repo.github.io/bullseye bullseye InRelease' changed its 'Origin' value from 'rsdk-local bullseye' to 'Radxa'
E: Repository 'https://radxa-repo.github.io/bullseye bullseye InRelease' changed its 'Label' value from 'rsdk-local bullseye' to 'Freight'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done

これはリポジトリのReleaseファイルが変わっているが良いのか?と確認してくれているためで、今回は無視して良いので--allow-releaseinfo-changeを付けてapt-get updateすれば先に進みます。

最新のRockchip用カーネルに更新
# apt-get update --allow-releaseinfo-change

(...略...)

# apt-get dist-upgrade

Hit:1 https://download.vscodium.com/debs vscodium InRelease
Hit:2 https://deb.debian.org/debian bullseye InRelease
Hit:3 https://deb.debian.org/debian bullseye-backports InRelease
Hit:4 https://deb.debian.org/debian-security bullseye-security InRelease
Hit:5 https://deb.debian.org/debian bullseye-updates InRelease
Hit:6 https://radxa-repo.github.io/bullseye rockchip-bullseye InRelease
Hit:7 https://radxa-repo.github.io/bullseye bullseye InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  librtui linux-headers-5.10.160-34-rk356x linux-image-5.10.160-34-rk356x
  r8125-dkms radxa-system-config-r8125-dkms
The following packages will be upgraded:
  aic8800-firmware aic8800-sdio-dkms aicrf-test linux-headers-rock-3c
  linux-image-rock-3c radxa-firmware radxa-overlays-dkms
  radxa-system-config-aic8800-sdio-dkms radxa-system-config-bullseye
  radxa-system-config-common radxa-system-config-kernel-cmdline-ttyfiq0
  radxa-system-config-rockchip radxa-udev rsetup rsetup-config-aic8800-ttys1
  task-rock-3c

描画速度はやや改善したものの全く同じにはなりません。描画速度が速い機種と改善後の機種を比べると、

描画が速い機種描画が遅い機種(改善後)
マウスカーソルちらつくちらつかない
マウスカーソルを動かし続ける描画が止まらない描画が止まる
描画速度16ms〜32ms(たまに1フレームスキップ)たまに16ms、ほぼ32ms〜64ms(ほぼ1フレームスキップ)

うーん?何が違うんだろう?

編集者:すずき(2024/07/05 10:32)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2024年6月24日 >>> 2024年6月11日
link もっと後

管理用メニュー

link 記事を新規作成

<2024>
<<<06>>>
------1
2345678
9101112131415
16171819202122
23242526272829
30------

最近のコメント5件

  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」
  • link 24年10月1日
    hdkさん (10/03 08:30)
    「おー、面白いですね。xrdpはすでに立ち...」
  • link 14年6月13日
    2048player...さん (09/26 01:04)
    「最後に、この式を出すのに紙4枚(A4)も...」

最近の記事3件

  • link 24年10月24日
    すずき (10/25 02:35)
    「[ONKYOからM-AUDIOのUSB DACへ] 目次: PCかれこれ10年以上(2013年3月16日の日記参照)活躍してく...」
  • link 24年7月25日
    すずき (10/25 02:24)
    「[OpenSBIを調べる - デバイスツリーの扱い(別方法)] 目次: LinuxOpenSBIのブート部分を調べます。Ope...」
  • link 24年8月7日
    すずき (10/25 02:23)
    「[Debian独自の挙動をするQEMUとbinfmt_misc] 目次: Linux前回はbinfmt_miscの使い方や動作...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 10/25 02:35