目次: Linux
GDBは便利ですが、少し使わないでいるとあっという間にコマンドを忘れます。便利&使うコマンドをメモしておきます。
GDBはデバッグ中のプログラムがシグナルを受け取ると実行停止してどうするか聞いてきます。この機能は便利ですが、シグナルをプロセス間で送りあって動くようなプログラムだと頻繁に停止して鬱陶しいです。
(gdb) handle SIGUSR1 nostop noprint Signal Stop Print Pass to program Description SIGUSR1 No No Yes User defined signal 1
こんなときはhandleコマンドで無視したり非表示にできます。私はあまり使ったことがないのですが、nopassにするとシグナルをデバッグ対象に渡さないようにできるようです。
指定したメモリの内容をファイルにコピーします。個人的には間違えやすいコマンドで、3番目の引数のmemoryをいつも打ち忘れます。
(gdb) dump binary memory foo.bin 0x80000000 0x80001000
意外と長くなります。
指定したファイルの内容をメモリにコピーします。個人的には名前間違え率No.1なコマンドで、loadコマンドと間違えます。
(gdb) restore foo.bin binary 0x80000000
なんでloadじゃないんだよ?と思いますが、loadは別の意味のコマンド(デバッグ対象プログラムをメモリにロードする、ただコピーするだけではなくプログラムヘッダを考慮する)に使われているためです。
実行可能ファイルからデバッグシンボルを読み出すコマンドです。-oオプションにより、シンボルのアドレスにオフセットを加えることもできます。
(gdb) symbol-file foo.elf -o 0x80000000
通常のデバッグではGDBが実行ファイルをロードするのであまりお世話になりませんが、組み込み開発では割とお世話になるコマンドです。ROM上に既にロード済みのバイナリのデバッグシンボルを後から読みたいとき、PIEのプログラム(アドレスが0スタートになっている)をデバッグするときに便利です。
目次: 射的
ガスガンのベレッタ92(正確な商品名は東京マルイ U.S. M9ピストル)が壊れました。デコッキングすると100%暴発します。怖い故障モードですね……。それはさておいて週1回の使用とはいえ、2年半も使えたのは割と良い方なんですかね?
初めはスライド側セーフティー周りの故障かと思いましが、どうやらフレーム側のデコッキング機構がダメになったようです。ほぼ新品のM9A1(※)のスライドと載せ替えても暴発しています。これはもうダメそうだなー……。
修理も考えましたがやめました。私は特に改造せずほぼノーマルのまま使っているので、新しい銃に入れ替えても特に問題ないのです。てな訳で、新しくもう1丁購入しました。
(※)東京マルイ M9A1のこと(M9A1の製品リンク)です。M9A1もベレッタ92ベースの銃で、スライドはU.S. M9ピストルと機構的に互換性があります。スライドを入れ替えても正常に動作します。
3年前くらいに購入した(2021年3月6日の日記参照)Microsoft Basic Optical Mouseが壊れました。今までのマウスは左ボタンが壊れて勝手にダブルクリック病になっていましたが、今回はセンターホイールが壊れて下に回しているのに上にスクロールされたり、上に回しているのに下にスクロールされたりする症状が出ています。初めて出会う症状ですが、ダブルクリック病と同じくらいイライラします。
Microsoft Basic Optical Mouse分解
3年使ったものなので内部は埃だらけで若干お見苦しいですが、捨てる前に分解して内部の写真を撮りました。ボタンと逆側にあるねじ1本で留まっているだけで、分解はとても簡単です。内部の基板は極めてシンプルです。片面が茶色(レジストなし)、逆側が緑色(レジストあり)のちょっと変わった基板でした。両面レジストが普通だと思っていましたが、コストカットのためですかね?
さて次のマウスは何にしようかな〜と言いたいところですが、実は同じマウスがもう1つあるので引き続き2個目のMicrosoft Basic Optical Mouseを使います。
間違って2個買ったのではなく、あまりに安かったのですぐ壊れるかと思い2個買いました。でも蓋を開けてみれば3年も使えたし杞憂でしたね。1年あたりにすれば300円くらいで驚異のコストパフォーマンス、素晴らしい製品だと思います。Microsoftはこの価格で儲かっているのでしょうか……?
目次: RISC-V
Milk-V Jupiterが届きました。お値段が非常に安かったのもあってM1/K1両方購入しました。注文したのは2か月くらい前で、何も音沙汰がなかったので忘れかけていましたが無事に届いて良かったです。
Jupiterの見た目はPCのMini-ITX規格マザーボードとほぼ一緒です。動かすためにはATX電源が必要なので別途用意してください。SoCはSpacemiT Key Stone M1/K1で、CPUは独自コアのX60を8コア搭載、RVA22のほかRVV 1.0にも対応しています。いいですね〜。
Key Stone M1とKey Stone K1の違いがよくわかりませんが、とりあえずM1はCPU 1.8GHz駆動でK1は CPU 1.6GHz駆動の違いがあるらしいです(Jupiter - Milk-V)。わかりやすい違いは見た目ですね。M1はヒートスプレッダが付いていて銀色のパッケージ、K1は樹脂のみで黒色のパッケージです。
SpacemiTのドキュメントは一応ある(Documentation - SpacemiT)のですが、ダウンロードできない形式になっていて不親切ですね……。イケてない。
起動方法はSDカード、SSD、eMMCと複数ありますが簡単な方法はSDカードからの起動です。Milk-Vの公式サイトにある通りにインストールすれば良いです(Milk-V Jupiter Install OS Image - Milk-V)。OSイメージはUbuntuとFedoraとSpecemiT独自(?)のBianbu OSが用意されていますので、お好みで使うと良いと思います。私は使い慣れているUbuntuにしました。
SDカードに書き込むツールもRaspberry Piのときにお世話になったBalena Etcherを使います。なぜかUbuntuのバージョンは23.10(Mantic Minotaur)です。LTSではないUbuntuはサポート期限が短い(24.04リリースまでの9か月程度)ので、長期間の運用には向いていません。普通の人はしないと思いますけども。
新しいボード購入時の恒例、CoreMarkを実行します。まずはCPUの動作周波数を確認します。
katsuhiro@milkv-jupiter:~$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 1800000 katsuhiro@milkv-jupiter:~$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 614400 katsuhiro@milkv-jupiter:~$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 1800000
CPUの動作周波数は0.614GHz〜1.8GHzのようですが、curは1.8GHz固定で変動している様子はありません。バグってる?固定?まあいいや、とりあえずこの値を信じましょう。
最初はシンプルにオプションOfastを試します。
2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 17322 Total time (secs): 17.322000 Iterations/Sec : 6350.305969 Iterations : 110000 Compiler version : GCC13.2.0 Compiler flags : -Ofast -g Memory location : Please put data memory location here (e.g. code in flash, data on heap etc) seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x33ff Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 6350.305969 / GCC13.2.0 -Ofast -g / Heap
6350.305969 / 1800 = 3.52CM/MHzですね、正直言ってあまり速くないです。Cortex-A53より上、Cortex-A55より下といったところです。
RISC-Vは標準的な命令以外にも拡張命令が多数定義されています。なかでもbit manipulation命令はこの手のベンチマークには結構効き目がありますので、有効にして測ってみます。Zbc拡張は有効にしたら逆に遅くなったので外しています。
2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 16201 Total time (secs): 16.201000 Iterations/Sec : 6789.704339 Iterations : 110000 Compiler version : GCC13.2.0 Compiler flags : -Ofast -g -march=rv64gc_zicsr_zifencei_zmmul_zba_zbb_zbs Memory location : Please put data memory location here (e.g. code in flash, data on heap etc) seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x33ff Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 6789.704339 / GCC13.2.0 -Ofast -g -march=rv64gc_zicsr_zifencei_zmmul_zba_zbb_zbs / Heap
6789.704339 / 1800 = 3.77CM/MHzです、だいぶ改善されてCortex-A55と同程度になりました。それでも速いとは言い難いですけど……。X60コア用にコンパイルするときはbit manipulation系の拡張命令は必須ですね。
< | 2024 | > | ||||
<< | < | 09 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | - | - | - | - | - |
合計:
本日: