web-dev-qa-db-ja.com

sysfsから読み取るとEINVALが返されます

box101:~ # cat /sys/class/net/eno1/carrier
cat: /sys/class/net/eno1/carrier: Invalid argument

なに…?では、straceは何と言っていますか?

...
open("/sys/class/net/eno1/carrier", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, 0x19c8000, 65536) = -1 EINVAL (Invalid argument)
...

だから私はこれをまっすぐにしましょう...ファイルは完全に開きますが、それからの読み取りはどういうわけかエラーですか?

さらに厄介なのは、box103で、まったく同じコマンド完全に機能する! box101では、そのディレクトリ内のすべてのファイルを読み取ることができます除くcarrier

hellがここで何が起こっているのか誰かが説明できますか?

2

このLKML スレッドで説明されているように、ハードウェア/ドライバーにいくつかの問題があります。返信メールのほんの一部を引用します。

その理由は、ほとんどのドライバーは、デバイスが起動するまで、リンクをプローブしたり、リンク速度とフロー制御をネゴシエートしたりしないためです。多くの場合、電力を節約するために、デバイスがダウンしているときにPHYの電源を入れません。

したがって、観察する動作は完全に予想されます。

リンク(ケーブル接続)がある場合でも、-EINVALエラー。電源管理構成では、すでに接続されているインターフェイスでもこのエラーが発生する場合があります。

mii-toolethtoolは、イーサネットインターフェイスのリンク状態に関する情報を提供する上でより信頼できるはずです(多分ip l l)。

3
user34720