久しぶりに自作ARMエミュレータememuを(ソースコードはこちら)動かそうと思い、Linux 4.4のlatestである、Linux 4.4.146をダウンロードしました。
このememuではARM Versatile PB/APボードの一部デバイスと、CPU ARM926EJ-Sの一部、アーキテクチャで言えばARMv5T相当をエミュレーションしています。
巷で手に入るコンパイラはARMv5Tより新しい命令を出力してしまい、エミュレータで実行できませんので、最初にcrosstool-ngで、ARMv5T向けのgcc 8.1.0を作成しました。
いざLinux 4.4.146をクロスビルドしましたが、エラーになり、コンパイルできませんでした。
エラーの意味が良く分からなかったので、さっくり諦めましてcrostool-ngでgcc 7.3を作成しなおし、ビルドをやり直したところ、無事コンパイルが通りました。
Linux 4.4.146は起動しませんでした。偶然持っていた少し古いバージョン(Linux 4.4.77)に戻したりもしましたが、結果は同じで全く起動しません。
デバッグすると、ドライバの作りが変わったのかAACIとMMCIというハードウェアに対して、今まで叩いていなかったはずのレジスタをガンガン叩いていました。ememuは存在しないI/Oレジスタを叩くと、エミュレータが例外で落ちてしまい、動かなくなるんです…。
とりあえずレジスタ定義だけ適当に追加したところ、エラーが出まくりますが、起動はしました。適当でも動いてくれるLinuxは強い子です。
しかし今度はbuildrootで作成したbusyboxと愉快な仲間たちが起動しません。/dev/nullが無いよ?と永遠にエラーが出続けます。
調べてみるとLinux 4.4.146のdefconfigだとCONFIG_DEVTMPFSがnつまり無効なんですね。最近の感覚でdevtmpfsはあって当然くらいに思っていたので、盲点でした。コンフィグでdevtmpfsを有効にしてカーネル再ビルドしたところ、やっとbuildrootが動きました。
対応していない制御文字を送ってきているらしく、ememuの端末(独自実装です)の色がおかしくなります。
これはすぐ直せそうになかったので、しばらくは変な表示と付き合うことになりそうです。
< | 2018 | > | ||||
<< | < | 08 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | 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 | 31 | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.7.
using GD 2.3.3(png support.)