数週間前、ALSAとUSBは私のラップトップで動作を停止しました。 YouTubeビデオのようなものはFirefoxでは音が出ません。 mpv
は[ao/alsa] Playback open error: No such file or directory. Could not open/initialize audio device -> no sound.
を出力します。 alsamixer
は、mixer
のようなファイルがないことを訴えます。フラッシュドライブは/dev
または/dev/disk
に表示されず、LEDは点灯しません。奇妙なことに、私はまだポートを使って電話を充電することができます…
udev
も機能しているようで、ブートを1分間停止し(それ自体で!)waiting for uevents to be processed ...
、シャットダウンを30分停止します(時間を計りました)stopping udev ...
。カーネルログにも文句を言います:
<28>[ 130.669180] udevd[1745]: worker [1763] /devices/pci0000:00/0000:00:14.0 is taking a long time
<28>[ 130.669196] udevd[1745]: worker [1762] /devices/pci0000:00/0000:00:1b.0 is taking a long time
そして、数分後:
[ 251.500125] udevd[1745]: worker [1763] /devices/pci0000:00/0000:00:14.0 timeout; kill it
[ 251.500156] udevd[1745]: seq 1333 '/devices/pci0000:00/0000:00:14.0' killed
[ 251.500166] udevd[1745]: worker [1762] /devices/pci0000:00/0000:00:1b.0 timeout; kill it
[ 251.500174] udevd[1745]: seq 1336 '/devices/pci0000:00/0000:00:1b.0' killed
[ 251.500535] udevd[1745]: worker [1763] terminated by signal 9 (Killed)
[ 251.500540] udevd[1745]: worker [1763] failed while handling '/devices/pci0000:00/0000:00:14.0'
これらのPCIアドレスは、それぞれUSBコントローラーとオーディオデバイス用であることが判明しました。また、lsmod
は異常なことを何も示していないようですが、/proc/modules
はxhci_pci
、snd_hda_intel
、およびsunrpc
を永遠にLoading
としてリストしていることに気付きました。これら3つ(およびそれらに依存する他の3つ)のmodprobe
はハングします(-v
は、それらをinsmod
しようとしているときにハングすることを示します)。
システムはLinux4.4.6でGentooを実行します。 udevはeudev3.1.5によって提供されます。ルートファイルシステムはLUKSコンテナ内にあります。 initrdを使用して起動します。
WebおよびStackExchangeの検索では、何も役に立ちませんでした。カーネル構成を wikiの抜粋 と照合し、eudev
を再マージしてみました(変更なし)。では、ここで何が起こっているのでしょうか。
完全な説明はありませんが、カーネル構成でTIMER_STATS
を無効にする(menuconfigを使用する場合はKernel hacking
➔Collect kernel timers statistics
)が修正されたようですこの。
何らかの理由で、モジュールの一部がTIMER_STATS
をオンにするとロードに失敗し、奇妙な方法でinsmod
がハングするのではないかと思います。カーネルログに記載されている2つのudev
ワーカーは、それらをロードしてハングさせ、その後強制終了しようとします。カーネルモジュールがなく、udev
が実行したであろうセットアップ、サウンドおよびUSB関連のこと…は機能しません。
更新:
多くのモジュールがロードされていることに気づきましたbefore/
がマウントされました。 very initrdを掘り下げて、いくつかのモジュール(/lib/modules
とsunrpc
を含む)のコピーを含むownxhci_pci
があることがわかるまで混乱していました。 )。再構築後にすべてのモジュールをルートファイルシステムにインストールするようにしましたが、initrdを再構築することはありませんでした。つまり、実行中のカーネルの構成が、ロードしようとしたモジュール(の一部)とは異なっていました。明らかに、これは奇妙なことをもたらしました。 insmod
がぶら下がっているように。
したがって、initrdを使用していて、カーネルモジュールのコピーがある場合は、カーネルを再構築するときに必ず再構築してください。