Làm cách nào để tắt USB autosuspend trên kernel 3.7.10 trở lên?


37

Tôi đã cập nhật HTPC của mình từ kernel 3.7.10 đến 3.10.7 và có vẻ như CONFIG_USB_SUSPEND hiện đã bị xóa khỏi các tùy chọn kernel và được bao gồm trong PM.

Vấn đề chính tôi gặp phải là tôi có ổ cứng gắn ngoài và khi treo và đánh thức HTPC, nó không khả dụng với hệ thống. Ổ cứng thức dậy (bạn có thể nghe thấy nó quay lại), nhưng khi bạn cố gắng truy cập điểm gắn kết, bạn sẽ gặp lỗi sau:

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

Và trên dmesg:

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

Trong các hạt nhân trước, việc đặt CONFIG_USB_SUSPEND = N sẽ giải quyết vấn đề, vì ổ cứng sẽ tự xử lý chế độ ngủ đông và điểm gắn kết luôn luôn có thể truy cập được. Khi ổ cứng đang ngủ và HTPC cần thứ gì đó từ điểm gắn của ổ cứng, ổ cứng sẽ tự thức dậy và hoạt động mà không gặp vấn đề gì.

Ngay bây giờ tôi đã thử những cách sau mà không thành công:

  1. Thay đổi thủ công / sys / bus / usb / thiết bị / usb * / power / control thành "bật" thay vì "tự động" .
  2. Thay đổi thủ công / sys / bus / usb / thiết bị / usb * / power / autosuspend thành "-1" thay vì "0" .

Nhưng khi đánh thức lại HTPC, điểm gắn kết lại không thể truy cập được. Như một cách giải quyết, tôi có thể ngắt kết nối và kết nối lại điểm gắn kết và nó hoạt động trở lại mà không gặp vấn đề gì, nhưng tôi chắc chắn nên có một cách để tránh việc HĐH xử lý USB autosuspend.

Bất kỳ ý tưởng làm thế nào để vô hiệu hóa usb autosuspend trên kernel 3.7.10 trở lên?


Đuôi có /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistcho bạn 1không? Có grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)cho bạn ykhông? power-
Management.txt

1
power/persistcho 1và tôi không có bất kỳ tập tin cấu hình trong /boot. CONFIG_PM_RUNTIME=yđược cấu hình trong .configtập tin kernel .
Peter

Câu trả lời:


32

Đối với UbuntuDebian , usbcoređược biên dịch trong kernel, vì vậy, tạo các mục trên /etc/modprobe.dsẽ KHÔNG hoạt động: chúng ta cần thay đổi các tham số khởi động kernel.

Chỉnh sửa /etc/default/grubtệp và thay đổi GRUB_CMDLINE_LINUX_DEFAULTdòng để thêm usbcore.autosuspend=-1tùy chọn:

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

Lưu ý rằng quit splashđã có tùy chọn hiện tại. Vì vậy, giữ các tùy chọn khác bạn có quá.

Sau khi lưu tệp, cập nhật grub:

sudo update-grub

khởi động lại .

Bây giờ kiểm tra autosuspendgiá trị:

cat /sys/module/usbcore/parameters/autosuspend

Và nó sẽ hiển thị -1.

Trong tài liệu kernel được tuyên bố rằng một ngày nào đó trong tương lai, thông số này sẽ thay đổi thành autosuspend_delay_ms(thay vì autosuspend).


1
Điều này dường như cũng đúng với Debian.
Benjamin Trent

2
Rael, cảm ơn rất nhiều vì điều này. Điều tương tự cũng đúng với phiên bản gần đây nhất của Kali. Tôi đã thêm ở trên và USB IRToy (v2) của tôi hiện đang hoạt động bình thường.
tham gia

1
Tôi có thẻ USB ở một trong các khe mPCIE và chỉ không muốn sự thật. Chạy Debian Jessie. Điều này đã giải quyết vấn đề của tôi giải quyết một vấn đề đau đầu rất lớn, CẢM ƠN BẠN!
xebo

Tôi đã thử điều này trong Ubuntu 15.10 nhưng giá trị không được áp dụng (giá trị là 2). Có bất cứ điều gì khác tôi có thể thử?
Jonas Adler

Tôi vẫn còn vào ngày 14.04. Nhưng afaik, trong các phiên bản kernel mới nhất, thông số cần thay đổi là autosuspend_delay_ms.
Rael Gugelmin Cunha

19

Theo tài liệu về cây nhân , thời gian trễ tự động của autosuspend được điều khiển bởi autosuspendtham số mô-đun trong usbcore. Đặt độ trễ nhàn rỗi mặc định ban đầu thành -1 sẽ ngăn việc tự động gửi của bất kỳ thiết bị USB nào. Bạn vẫn có thể bật tính năng tự động gửi cho các thiết bị đã chọn.

Các usbcore.autosuspendtham số hạt nhân có thể được thiết lập khi các mô-đun được nạp bằng tay:

$ modprobe usbcore autosuspend=-1

hoặc bằng cách thêm dòng sau vào tệp cấu hình trong /etc/modprobe.d:

options usbcore autosuspend=-1

Nếu usbcoređược biên dịch vào kernel, tham số có thể được điều chỉnh bằng cách thêm dòng sau vào dòng lệnh kernel:

usbcore.autosuspend=-1

Cuối cùng, tùy chọn có thể được điều chỉnh trong thời gian chạy bằng cách thực hiện:

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

Thay đổi sẽ ảnh hưởng đến tất cả các thiết bị USB mới. Các thiết bị đã tồn tại sẽ không bị ảnh hưởng.


2
Tôi đã usbcorebiên dịch vào kernel, nhưng sử dụng modprobe.dtùy chọn này dường như không hoạt động. Mặc dù modprobe -c usbcore | grep autosuspendhiển thị nó như là -1, cat /sys/module/usbcore/parameters/autosuspendtôi nhận được2
Peter

1
@Peter: autosuspendkhông dùng nữa. Các tập tin mới autosuspend_delay_msmất ms thay vì giây. ref . Nhưng power/controlthiết lập onnên có tác dụng tương tự.
Runium

@Sukminder, tôi nên cấu hình cái gì sau đó để tự động tắt vĩnh viễn? Tôi đã thử sử dụng autosuspend=-1cả hai modprobe.dkerneltham số, nhưng ổ cứng vẫn bị treo và không thức dậy tốt.
Peter

1
@Peter: Nếu tôi biết tôi sẽ nói với bạn :). Tôi chỉ trích dẫn những gì doc. nói. Pt của bạn . 1 trong bài viết của bạn nên đã làm nó như tôi có thể nói, tôi không biết tại sao nó không. Bạn đã cố gắng thiết lập autosuspend_delay_msđể -1? (Trong /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium

1
Tôi đang ở kernel 4.4 và autosuspend_delay_mskhông có ở đó. Nhưng autosuspendlà IS.
Mariano Dupont

2

Tôi gặp vấn đề tương tự với Microsoft Wheel Mouse Optical USB và PS / 2 Tương thích kể từ khi nâng cấp hệ thống Linux Mint Debian Edition thành kernel 3.10-2-amd64. Một nghi ngờ tự động không phù hợp bởi quản lý năng lượng USB của hạt nhân đã bị nghi ngờ. Trong Debian, điều này được biên dịch thành usbcoremô-đun vào kernel.

Bạn có thể thay đổi điều này vĩnh viễn bằng cách phát hành tại dòng lệnh:

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

Một số hạt nhân có thể yêu cầu autosuspend=0, mặc dù.

Nếu hệ thống của bạn sử dụng initrd(rất có thể là như vậy), thì hãy xây dựng lại initrdkernel của bạn.

Ví dụ:

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

Khởi động lại và kiểm tra với:

cat /sys/module/usbcore/parameters/autosuspend

mà nên mang lại -1bây giờ.


Tôi không sử dụng initrdvà các hành động được mô tả ở đây không hoạt động trong trường hợp này, vì chúng đã được trả lời trước đó.
Peter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.