日報 2024.12.14

最終更新日

Comments: 2

先日組んだ兄貴のJONSBO N2マシン、Windows起動後に”回復”要求が出るようになってしまったのでPC持ってきてもらって調査開始。

その前に小6のガキも連れて来たようなので自宅VR DDRプレイさせる。思ったよりスジが良くておかしいなと思ったら「ビートバトル」なるスマホゲーやってたっぽい。なんやねんそれ。

絶対アカンやつやろシリーズ。

ちょっとサーベイするとビートバトルは正確にはダンレボのパクりゲーではなく”Friday Night Funkin'”というゲームのパクりゲーっぽい。

いやコレもどうやねん?って思ったけど座ってるねーちゃんがデフォルメエッチやから許したわ。

JONSBO N2マシン修理開始。原因はよくわからんのでてっとり早く買っといたキオクシアの新品SSDに交換、も、なぜかUEFIで20MBしか認識せず”PS3111″と表示される。

全くわからんのでサーベイしたらどうもチップセットの型番が表示されてて、つまり故障らしい。新品やぞ。

諦めて返品しようと思って最後にダメ元でCMOSクリアして再チャンレジしたら普通に認識した。完全に不明。ちょっと怖いけど交換して返品受付期間の間動作チェックして経過観察。

今のWindowsはオフラインだとインストール続行すら出来ない鬼畜仕様なのでコマンドプロンプト出して裏コマンドを入れないとダメ。バカたれが。Shift+F10でコマンドプロンプトが出るので oobe\BypassNRO.cmdというコマンドを入れて再起動するとオフラインで続行みたいなボタンが出る。アホか。

エリート飯。

電光表札ソフトウェア続き。

ラズパイZeroのC/C++開発環境の用意。あらすじ、リモートWin側でクロスコンパイルしたい。

Rasberrypi/toolsにクロスコンパイラがあるっぽいけど古くて非推奨です、例えばaptから取ってねと書いてる。

These toolchains are deprecated. They are outdated and easily available from other sources (e.g. direct from Ubuntu apt). e.g.

sudo apt-get install gcc-arm-linux-gnueabihf

There is also an aarch64 version:

sudo apt-get install gcc-aarch64-linux-gnu

Note: if building for Pi0/1 using --with-arch=armv6 --with-float=hard --with-fpu=vfp is recommended (and matches the default flags of the toolchains included here).

今回はWindowホストでやるのでWindows用にビルドされたコンパイラ無いか調べる。
WSL使ってもいいけどシンプルにやってみる。

Arm公式にありそう。

Pi Zeroは32bit CPUなので AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf) 、
arm-gnu-toolchain-14.2.rel1-mingw-w64-x86_64-arm-none-linux-gnueabihf.exe をインストール。

PATH環境変数に追加しておく。

適当に以下コマンドでコンパイルして出た “a.out” をラズパイに送って実行。

arm-none-linux-gnueabihf-g++ main.cpp

実行

`$ ./a.out

Segmentation fault

なるへそ、パイゼロはARMv6だからコンパイルオプション変えろ書いてたな。

arm-none-linux-gnueabihf-g++ main.cpp --with-arch=armv6 --with-float=hard --with-fpu=vfp  

arm-none-linux-gnueabihf-g++: error: unrecognized command-line option '--with-arch=armv6'
arm-none-linux-gnueabihf-g++: error: unrecognized command-line option '--with-float=hard'
arm-none-linux-gnueabihf-g++: error: unrecognized command-line option '--with-fpu=vfp'

? GCC経験が年齢に伴っていないのでサーベイ。

なるへそ、–with オプションはデフォルト設定のためのconfigureオプション。コンパイル時に設定を変える場合は -m オプション。

ちなみにコンパイラのデフォルトオプションは-vオプションで確認できる。
--with-arch=armv7-a で、ARMv7向けにコンパイルされる事が分かる。

arm-none-linux-gnueabihf-g++ -v      
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabihf-g++
COLLECT_LTO_WRAPPER=C:/Program\ Files\ (x86)/Arm\ GNU\ Toolchain\ arm-none-linux-gnueabihf/14.2\ rel1/bin/../libexec/gcc/arm-none-linux-gnueabihf/14.2.1/lto-wrapper.exe
Target: arm-none-linux-gnueabihf
Configured with: /data/jenkins/workspace/GNU-toolchain/arm-14-8/src/gcc/configure --target=arm-none-linux-gnueabihf --prefix= --with-sysroot=/arm-none-linux-gnueabihf/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-14-8/build-mingw-arm-none-linux-gnueabihf/install//arm-none-linux-gnueabihf/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-14-8/build-mingw-arm-none-linux-gnueabihf/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-14-8/build-mingw-arm-none-linux-gnueabihf/host-tools --with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-14-8/build-mingw-arm-none-linux-gnueabihf/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-14-8/build-mingw-arm-none-linux-gnueabihf/host-tools --host=x86_64-w64-mingw32 --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-mode=thumb --with-arch=armv7-a --with-libiconv-prefix=/data/jenkins/workspace/GNU-toolchain/arm-14-8/build-mingw-arm-none-linux-gnueabihf/host-tools --enable-mingw-wildcard --with-pkgversion='Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52)'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 14.2.1 20241119 (Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52)) 

実行。

arm-none-linux-gnueabihf-g++ main.cpp -march=armv6 -mfloat=hard -mfpu=vfp  
arm-none-linux-gnueabihf-g++: error: unrecognized command-line option '-mfloat=hard'; did you mean '-mfloat-abi=hard'?

よくわからんけど言われるがまま修正

arm-none-linux-gnueabihf-g++ main.cpp -march=armv6 -mfloat-abi=hard -mfpu=vfp
main.cpp: In function 'int test()':
main.cpp:3:10: sorry, unimplemented: Thumb-1 'hard-float' VFP ABI
    3 | int test()
      |          ^

コンパイルできない。

さっきのPi Zero向けのクロスコンパイル設定を真似して-march=armv6 だけにしてみる。

arm-none-linux-gnueabihf-g++ main.cpp -march=armv6                           
main.cpp: In function 'int test()':
main.cpp:3:10: sorry, unimplemented: Thumb-1 'hard-float' VFP ABI
    3 | int test()
      |          

変わらず。

記事の方はよくみたら hard float版じゃないコンパイラ使ってる。

sudo apt install g++-arm-linux-gnueabi

gnueabi、Windows用にビルドされたやつがなさそうなので観念してWSLでインストールしてコンパイルしてみる。

GOマンボ。

$ arm-linux-gnueabi-gcc main.cpp -march=armv6

いけた。a.outをラズパイで実行してみる。

-bash: ./a.out: cannot execute: required file not found

あかん。実行ファイルチェック。


$ file ./a.out
./a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, BuildID[sha1]=99cdaf310a9b06432656311caf0a89d01c694823, for GNU/Linux 3.2.0, not stripped

最初にgnueabihfでコンパイルしたほうも調べてみる。

./a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, with debug_info, not stripped

/lib/ld-linux-armhf.so.3 じゃないとダメっぽい。

こういう情報があったのでFPU確認してみる。

Featuresにvfpって入ってる。

cat /proc/cpuinfo
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2835
Revision        : 9000c1
Serial          : 00000000a0d5d212
Model           : Raspberry Pi Zero W Rev 1.1

Raspberry Pi Zero Wの古いリビジョンだったらFPU(VFP)が入ってないやつがあって、それだとarm-linux-gnueabi-gccでコンパイルするやつで動かせるって事…?

もしかしたらコンパイラを自分でビルドする必要があるのかも。
その前に古くて非推奨って書いてたラズパイ公式のtoolsで試してみるか。

ひとまずエリート飯。

AbemaTVで適当に流してた異世界チャンネルで「ソードアートオンライン アリシゼーション」を途中から、”キリトかなーやっぱ”しか知らない知識で結局最後まで観てしまった。

ツンデレアリスが途中で豚まん2個喰おうとしたところがピーク。キリトが勇次郎からアリスを寝取って終わりて事でOKでしょうか。勇次郎可愛そうすぎる。最初から観てへんからアレやけどキリトって嫁はんおらんかったか?2クール目があるらしくよくわからんとこで終わった。

おわい

ド

シェアする