カテゴリ:ソフト開発日誌
scankeylx を Raspberry Pi 3 (ARMv7) アーキテクチャ上でコンパイルして動かしてみることにした。/dev/sda や /dev/sdb を開こうとして "Not a directory" (ENOTDIR) エラーになった。
うん、確かに /dev/sda は directory ではない。何で分ったようなエラーになるんだ?他のツール dd だって open 出来ているし。暫く悩んでいた。また変なメモリ破壊とか... 色々と悩んで、strace で様子を見ることにした。open() system call のトレースに O_DIRECTORY が付いていた。え?ソース書き間違えた?ソースは O_DIRECT と書かれている。何かが違う。Free Pascal の RTL (RunTime Library) ソースコードを見ても、変な再定義は無し。 x86 上の fcntl.h, ARM 上の fchtl.h, ARM64 上の fcntl.h を見比べてみる。O_DIRECT と O_DIRECTORY の値が違っている。x86 上の O_DIRECT の値 040000 を使うと ARM 上では O_DIRECTROY になる。 最も良い解決は Free Pascal の RTL source を修正することなんだよな、きっと... O_DIRECT を再定義する定数を用意して、解決するか試してみる。あー、PowerPC とか SPARC も違いがあるのか。対応するコードは書いてみたけれど、試すことができない。ARM 上の動作は意図したとおりになった。 アーキテクチャ毎に Linux kernel system call の定数が変るなんて有るんだ。 うぅ、まだ動かないねぇ。 お気に入りの記事を「いいね!」で応援しよう
最終更新日
2016.12.01 20:17:40
コメント(0) | コメントを書く
[ソフト開発日誌] カテゴリの最新記事
|
|