Armadilloフォーラム

udev_monitor について

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 再現環境
コメント

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がエラーにならないことを確認しました。
目的に適合するようでしたら、お試しください。

ファイル ファイルの説明
libgudev-1.0-0-armel-cross_164-3_all.deb
libgudev-1.0-dev-armel-cross_164-3_all.deb
libudev0-armel-cross_164-3_all.deb
libudev-dev-armel-cross_164-3_all.deb

shasegawa

2015年6月3日 10時05分

長谷川です。

さっそくの対応、ありがとうございます。
これからこちらの環境でも試してみます。