shasegawa
2015年6月2日 17時47分
長谷川です。お世話になっております。
Armadillo-IoT 上で udev を使ったプログラムを動かそうとしているのですが、udev_monitor_new_from_netlink() が "error getting socket: Invalid argument" でエラーになっています。socket() でエラーとなっているようです。
既知の不具合情報や回避策をご存知でしたらご教授頂けないでしょうか?
再現環境 (udev_test.tar.gz) を添付します。
# ./udev_test ../libudev/libudev.c (336) custom logging function 0x19008 registered ../libudev/libudev-monitor.c (188) error getting socket: Invalid argument udev_test.c(31) udev_monitor_new_from_netlink() ... failed
よろしくお願い致します。
ファイル | ファイルの説明 |
---|---|
udev_test.tar.gz | 再現環境 |
コメント
shasegawa
at_hanada
2015年6月2日 21時30分
花田です。
> Armadillo-IoT 上で udev を使ったプログラムを動かそうとしているのですが、udev_monitor_new_from_netlink() が "error getting socket: Invalid argument" でエラーになっています。socket() でエラーとなっているようです。
今のATDE5で添付のソースをビルドした場合、udev-175からビルドされたlibudevが使用されます。
しかし、このバージョンのlibudevは現在のArmadillo-IoTゲートウェイのカーネル2.6.26と互換性がない部分があり、そのためudev_monitor_new_from_netlinkがfailedするようです。
提供開発環境とシステム間の問題であり、ご迷惑おかけして申し訳ありません。
とりあえずの解決策となってしまうのですが、ATDE5内にインストールされているクロスライブラリをDebian/squeeze向けに提供されているudev-164にダウングレードするという方法があります。
こちらのバージョンではDebian独自のパッチが当たった状態で、カーネル2.6.26での動作が可能になっております。
( http://ftp.jp.debian.org/debian/pool/main/u/udev/ からダウンロードしたものを、dpkg-crossしてATDE5にインストール可能にしたdebファイルを添付します)
ATDE5にこの4つのクロスライブラリをdpkg -iでインストールした後、udev_testをビルド。
Armadilloのユーザーランドに
/lib/libudev.so.0.9.3
/lib/libudev.so.0 (libudev.so.0.9.3へのシンボリックリンク)
を配置した状態で、udev_testがエラーにならないことを確認しました。
目的に適合するようでしたら、お試しください。