Bagaimana cara menonaktifkan USB autosuspend pada kernel 3.7.10 atau lebih tinggi?

38

Saya telah memperbarui HTPC saya dari kernel 3.7.10 ke 3.10.7 dan sepertinya CONFIG_USB_SUSPEND sekarang hilang dari opsi kernel dan termasuk dalam PM.

Masalah utama yang saya hadapi adalah bahwa saya memiliki HDD eksternal dan ketika menangguhkan dan membangunkan HTPC, itu tidak tersedia untuk sistem. HDD bangun (Anda dapat mendengarnya berputar lagi), tetapi ketika Anda mencoba mengakses titik pemasangan Anda mendapatkan kesalahan berikut:

ZOTAC ~ # ls /media
ls: reading directory /media: Input/output error

Dan di dmesg:

[  253.278260] EXT4-fs warning (device sdb1): __ext4_read_dirblock:908: error reading   directory block (ino 2, block 0)

Pada kernel sebelumnya, pengaturan CONFIG_USB_SUSPEND = N akan menyelesaikan masalah, karena HDD akan menangani hibernasinya sendiri dan titik mount selalu dapat diakses. Ketika HDD menyala dan HTPC membutuhkan sesuatu dari titik pemasangan HDD, HDD itu sendiri akan bangun dan beroperasi tanpa masalah.

Saat ini saya sudah mencoba yang berikut ini tanpa hasil:

  1. Ubah / sys / bus / usb / perangkat / usb * / power / control secara manual ke "on" alih-alih "auto" .
  2. Ubah / sys / bus / usb / perangkat / usb * / power / autosuspend secara manual menjadi "-1" alih-alih "0" .

Tetapi ketika bangun lagi HTPC, titik mount sekali lagi tidak dapat diakses. Sebagai workarround saya dapat melepas dan memasang kembali mount point dan berfungsi kembali tanpa masalah, tapi saya yakin harus ada cara untuk menghindari OS menangani usb autosuspend.

Tahu cara menonaktifkan usb autosuspend pada kernel 3.7.10 atau lebih tinggi?

Peter
sumber
Apakah ekor /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistmemberi Anda 1? Apakah grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)memberi Anda y? power-management.txt
Runium
1
power/persistmemberi 1dan saya tidak punya file konfigurasi di /boot. CONFIG_PM_RUNTIME=ydikonfigurasi dalam file kernel .config.
Peter

Jawaban:

33

Untuk Ubuntu dan Debian , usbcoredikompilasi dalam kernel, jadi buat entri pada TIDAK/etc/modprobe.d akan berfungsi: kita perlu mengubah parameter boot kernel.

Edit /etc/default/grubfile dan ubah GRUB_CMDLINE_LINUX_DEFAULTbaris untuk menambahkan usbcore.autosuspend=-1opsi:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

Perhatikan bahwa quit splashsudah ada opsi. Jadi simpan opsi lain yang Anda miliki juga.

Setelah menyimpan file, perbarui grub:

sudo update-grub

Dan reboot .

Sekarang periksa autosuspendnilai:

cat /sys/module/usbcore/parameters/autosuspend

Dan itu akan ditampilkan -1.

Dalam dokumentasi kernel disebutkan bahwa suatu hari nanti param ini akan berubah menjadi autosuspend_delay_ms(bukan autosuspend).

Rael Gugelmin Cunha
sumber
1
Ini sepertinya juga berlaku untuk Debian.
Benjamin Trent
2
Rael, terima kasih banyak untuk ini. Hal yang sama berlaku untuk versi terbaru Kali. Saya menambahkan di atas dan USB IRToy (v2) saya sekarang berfungsi dengan baik.
joat
1
Saya memiliki kartu USB di salah satu slot mPCIE dan tidak menginginkan kebenaran. Menjalankan Debian Jessie. Ini telah memecahkan masalah saya dengan memecahkan sakit kepala besar, TERIMA KASIH!
xebo
Saya mencoba ini di Ubuntu 15.10 tetapi nilainya tidak diterapkan (nilainya 2). Apakah ada hal lain yang bisa saya coba?
Jonas Adler
Saya masih di 14,04. Tetapi afaik, dalam versi kernel terbaru, param yang harus diubah adalah autosuspend_delay_ms.
Rael Gugelmin Cunha
20

Menurut dokumentasi tree kernel , waktu tunda idle otomatis dikendalikan oleh autosuspendparameter modul di usbcore. Mengatur penundaan idle default awal ke -1 akan mencegah pengeluaran otomatis perangkat USB apa pun. Anda harus tetap dapat mengaktifkan belanja otomatis untuk perangkat yang dipilih.

The usbcore.autosuspendparameter kernel dapat diatur ketika modul tersebut dimuat secara manual:

$ modprobe usbcore autosuspend=-1

atau dengan menambahkan baris berikut ke file konfigurasi di /etc/modprobe.d:

options usbcore autosuspend=-1

Jika usbcoredikompilasi ke dalam kernel, parameter dapat disesuaikan dengan menambahkan berikut ini ke baris perintah kernel:

usbcore.autosuspend=-1

Terakhir, opsi dapat disesuaikan saat runtime dengan melakukan:

echo -1 >/sys/module/usbcore/parameters/autosuspend

Perubahan akan memengaruhi semua perangkat USB baru. Perangkat yang sudah ada tidak akan terpengaruh.

Thomas Nyman
sumber
2
Saya telah usbcoredikompilasi ke dalam kernel, tetapi menggunakan modprobe.dopsi sepertinya tidak berfungsi. Meskipun modprobe -c usbcore | grep autosuspendmenampilkannya sebagai -1, melakukan cat /sys/module/usbcore/parameters/autosuspendsaya dapatkan2
Peter
1
@ Peter: autosuspendsudah usang. File baru autosuspend_delay_msyang mengambil ms bukan detik. ref . Tetapi power/controldiatur untuk onharus memiliki efek yang sama.
Runium
@Sukminder, apa yang harus saya konfigurasikan agar autosuspend dinonaktifkan selamanya? Saya sudah mencoba menggunakan autosuspend=-1keduanya modprobe.ddan kernelparameter, tetapi HDD masih tertunda dan tidak bangun dengan baik.
Peter
1
@ Peter: Jika aku tahu aku akan memberitahumu :). Saya hanya mengutip apa dok. kata. Pt kamu 1 di posting Anda seharusnya melakukannya sejauh yang saya tahu, saya tidak tahu mengapa tidak. Apakah Anda mencoba untuk set autosuspend_delay_mske -1? (Masuk /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium
1
Saya menggunakan kernel 4.4 dan autosuspend_delay_mstidak ada di sana. Tapi autosuspendIS.
Mariano Dupont
3

Saya memiliki masalah serupa dengan USB Optical Mouse Roda Microsoft dan Kompatibel PS / 2 sejak memutakhirkan sistem Linux Mint Debian Edition ke kernel 3.10-2-amd64. Dicurigai ada penyalahgunaan otomatis oleh manajemen daya USB kernel . Di Debian, ini dikompilasi sebagai usbcoremodul ke dalam kernel.

Anda dapat mengubah ini secara permanen dengan mengeluarkan di baris perintah:

sudo echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf > /dev/null

Namun, beberapa kernel mungkin membutuhkan autosuspend=0.

Jika sistem Anda menggunakan initrd(kemungkinan besar tidak), kemudian membangun kembali initrduntuk kernel Anda.

Sebagai contoh:

uname -r
sudo dpkg-reconfigure linux-image-3.10-2-amd64

Mulai ulang dan periksa dengan:

cat /sys/module/usbcore/parameters/autosuspend

yang seharusnya menghasilkan -1sekarang.

Serge Stroobandt
sumber
Saya tidak menggunakan initrddan tindakan yang dijelaskan di sini tidak bekerja dalam kasus ini, karena mereka dijawab sebelumnya.
Peter