at_ito
2015年1月4日 12時38分
DebianパッケージをAtmark Distで作ったユーザーランドに追加する際に、バイナリを実行しても必要なファイルが見つからずに正常に起動しないことがあるかと思います。その際に、何が必要なファイルかを調べる方法を紹介します。
バイナリ実行時に必要なファイルは、open()システムコールで開かれます。そのため、バイナリ実行時にどのシステムコールが使用されたかを調べるstraceを使うことで、どのファイルをopen()しようとしたかを調べることができます。このstraceはLinuxのデバッグユーティリティであり、引数に渡されたバイナリが使用するシステムコールを見ることができます。
Atmark Distのコンフィギュレーションで選択できるstraceでは、ビルド時にエラーが発生するため、Debian Packagesからstraceのバイナリを持ってくる必要があります。
以下のページを参考に、straceをユーザーランドに追加してください。
- Howto : Debianのパッケージに含まれるコンパイル済みのバイナリをArmadilloで動作させる方法
- 開発者ブログ: Atmark Distで作ったユーザーランドにファイルを追加する方法
- Debian Packages
- Debian Packages(古いバージョン用)
例として、「i2cdetect -l」コマンドを実行した際の結果を以下に抜粋します。
[armadillo ~]# strace i2cdetect -l 2>&1 | grep ^open (省略) open("/proc/bus/i2c", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/mounts", O_RDONLY) = 3 open("/sys/class/i2c-dev", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 open("/sys/class/i2c-dev/i2c-0/name", O_RDONLY) = 4 open("/dev/i2c/0", O_RDWR) = -1 ENOENT (No such file or directory) open("/dev/i2c-0", O_RDWR) = 4 open("/sys/class/i2c-dev/i2c-1/name", O_RDONLY) = 4 open("/dev/i2c/1", O_RDWR) = -1 ENOENT (No such file or directory) open("/dev/i2c-1", O_RDWR) = 4 open("/sys/class/i2c-dev/i2c-2/name", O_RDONLY) = 4 open("/dev/i2c/2", O_RDWR) = -1 ENOENT (No such file or directory) open("/dev/i2c-2", O_RDWR) = 4