วิธีปิดการใช้งาน USB autosuspend บนเคอร์เนล 3.7.10 ขึ้นไป?


37

ผมได้ปรับปรุง HTPC ของฉันจากเคอร์เนล3.7.10เพื่อ3.10.7และดูเหมือนว่าCONFIG_USB_SUSPENDตอนนี้หายไปจากตัวเลือกเคอร์เนลและรวมอยู่ใน PM

ปัญหาหลักที่ฉันพบคือฉันมี HDD ภายนอกและเมื่อหยุดชั่วคราวและตื่นขึ้นมา HTPC ระบบจะไม่พร้อมใช้งาน HDD ตื่นขึ้นมา (คุณสามารถได้ยินเสียงหมุนอีกครั้ง) แต่เมื่อคุณพยายามเข้าถึงจุดเชื่อมต่อคุณจะได้รับข้อผิดพลาดดังต่อไปนี้:

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

และใน dmesg:

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

ในเมล็ดก่อนหน้าการตั้งค่า CONFIG_USB_SUSPEND = N จะแก้ปัญหาได้เนื่องจาก HDD จะจัดการการจำศีลด้วยตัวเองและจุดเชื่อมต่อจะสามารถเข้าถึงได้เสมอ เมื่อ HDD อยู่ในโหมดสลีปและ HTPC ต้องการบางอย่างจากจุดเมานท์ของ HDD ตัว HDD เองก็จะตื่นขึ้นมาและทำงานได้โดยไม่มีปัญหา

ตอนนี้ฉันได้ลองทำสิ่งต่อไปนี้โดยไม่ประสบความสำเร็จ:

  1. ด้วยตนเองการเปลี่ยนแปลงsys / / รถบัส / USB / อุปกรณ์ / USB * / พลังงาน / การควบคุมการ"กับ"แทน"อัตโนมัติ"
  2. ด้วยตนเองการเปลี่ยนแปลงsys / / รถบัส / USB / อุปกรณ์ / USB * / พลังงาน / autosuspendไป"-1"แทนที่จะเป็น"0"

แต่เมื่อตื่นขึ้นมาอีกครั้ง HTPC จุดเมานท์ก็ไม่สามารถจะเข้าใจได้อีก ในฐานะที่เป็นวิธีการแก้ปัญหาฉันสามารถยกเลิกการต่อเชื่อมและติดตั้งจุดเชื่อมต่ออีกครั้งและทำงานได้อีกครั้งโดยไม่มีปัญหา

มีความคิดวิธีการปิดใช้งาน usb autosuspend บนเคอร์เนล 3.7.10 ขึ้นไปหรือไม่?


หาง/sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistให้คุณ1ไหม ไม่grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)ทำให้คุณy? power-management.txt
Runium

1
power/persistให้1และผมไม่ได้มีไฟล์ config ใด ๆ /bootใน CONFIG_PM_RUNTIME=yมีการกำหนดค่าใน.configไฟล์ของเคอร์เนล
ปีเตอร์

คำตอบ:


32

สำหรับUbuntuและDebianนั้นusbcoreจะถูกรวบรวมในเคอร์เนลดังนั้นการสร้างรายการบน/etc/modprobe.dจะไม่ทำงาน: เราต้องเปลี่ยนพารามิเตอร์การบูตเคอร์เนล

แก้ไข/etc/default/grubไฟล์และเปลี่ยนGRUB_CMDLINE_LINUX_DEFAULTบรรทัดเพื่อเพิ่มusbcore.autosuspend=-1ตัวเลือก:

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

โปรดทราบว่าquit splashมีตัวเลือกอยู่แล้ว ดังนั้นให้ตัวเลือกอื่น ๆ ที่คุณมีเช่นกัน

หลังจากบันทึกไฟล์แล้วให้อัพเดตด้วง:

sudo update-grub

และรีบูต

ตอนนี้ตรวจสอบautosuspendค่า:

cat /sys/module/usbcore/parameters/autosuspend

-1และมันควรจะแสดง

ในเอกสารเกี่ยวกับเคอร์เนลระบุว่าสักวันหนึ่งในอนาคตพารามิเตอร์นี้จะเปลี่ยนเป็นautosuspend_delay_ms(แทนautosuspend)


1
นี่ดูเหมือนจะเป็นจริงสำหรับ Debian เช่นกัน
Benjamin Trent

2
Rael ขอบคุณมากสำหรับสิ่งนี้ เช่นเดียวกับเวอร์ชั่นล่าสุดของกาลี ฉันได้เพิ่มข้างต้นและ USB IRToy (v2) ของฉันทำงานได้อย่างถูกต้อง
joat

1
ฉันมีการ์ด USB ในช่องเสียบ mPCIE และไม่ต้องการความจริง วิ่ง Debian Jessie นี่ช่วยแก้ไขปัญหาของฉันในการแก้ปวดหัวอย่างมากขอบคุณ!
xebo

ฉันลองสิ่งนี้ใน Ubuntu 15.10 แต่ไม่ได้ใช้ค่า (ค่าคือ 2) มีอะไรอีกบ้างที่ฉันลองได้บ้าง
Jonas Adler

ฉันยังอยู่ที่ 14.04 แต่ AFAIK autosuspend_delay_msในรุ่นเคอร์เนลล่าสุดพระรามมีการเปลี่ยนแปลงคือ
Rael Gugelmin Cunha

19

อ้างอิงถึงเอกสารต้นไม้เคอร์เนลที่ autosuspend เวลาว่างล่าช้าจะถูกควบคุมโดยพารามิเตอร์ในโมดูลautosuspend usbcoreการตั้งค่าเริ่มต้นการหน่วงเวลาเริ่มต้นเป็น -1 จะป้องกันการหยุดชั่วคราวของอุปกรณ์ USB ใด ๆ คุณควรจะสามารถเปิดใช้งานการระงับอัตโนมัติสำหรับอุปกรณ์ที่เลือกได้

usbcore.autosuspendพารามิเตอร์เคอร์เนลสามารถตั้งค่าเมื่อโมดูลจะเต็มไปด้วยตนเอง:

$ modprobe usbcore autosuspend=-1

หรือโดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์กำหนดค่าใน/etc/modprobe.d:

options usbcore autosuspend=-1

หากusbcoreคอมไพล์ลงในเคอร์เนลพารามิเตอร์สามารถปรับได้โดยการเพิ่มต่อไปนี้ลงในบรรทัดคำสั่งเคอร์เนล:

usbcore.autosuspend=-1

ในที่สุดตัวเลือกอาจปรับเปลี่ยนได้ที่ runtime โดยทำ:

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

การเปลี่ยนแปลงจะมีผลกับอุปกรณ์ USB ใหม่ทั้งหมด อุปกรณ์ที่มีอยู่แล้วจะไม่ได้รับผลกระทบ


2
ฉันusbcoreรวบรวมในเคอร์เนล แต่modprobe.dดูเหมือนว่าการใช้ตัวเลือกไม่ทำงาน แม้จะmodprobe -c usbcore | grep autosuspendแสดงเป็น-1ทำcat /sys/module/usbcore/parameters/autosuspendฉันได้รับ2
Peter

1
@Peter: autosuspendเลิกใช้แล้ว ไฟล์ใหม่จะautosuspend_delay_msใช้เวลา ms แทนวินาที อ้าง แต่power/controlกำหนดให้onควรมีผลเช่นเดียวกัน
Runium

@Sukminder ฉันควรกำหนดค่าอะไรให้ปิดการใช้งานการระงับอัตโนมัติตลอดไป ฉันได้ลองใช้autosuspend=-1ทั้งในmodprobe.dและkernelพารามิเตอร์ แต่ HDD ยังคงระงับและไม่ตื่นขึ้นมาอย่างสวยงาม
ปีเตอร์

1
@Peter: ถ้าฉันรู้ว่าฉันจะบอกคุณ :) ฉันแค่อ้างว่าเอกสารอะไร กล่าวว่า คุณพอยต์ 1ในการโพสต์ของคุณควรทำเท่าที่ฉันบอกฉันไม่รู้ว่าทำไมมันถึงไม่ คุณได้ลองชุดautosuspend_delay_msไป-1? (ใน/sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium

1
ฉันใช้เคอร์เนล 4.4 และautosuspend_delay_msไม่ได้อยู่ที่นั่น แต่autosuspendเป็น
Mariano Dupont

2

ผมมีปัญหาที่คล้ายกันกับไมโครซอฟท์ล้อเมาส์ออฟติคัล USB และ PS / 2 เข้ากันได้ตั้งแต่อัพเกรดลินุกซ์มิ้นท์เดฉบับ3.10-2-amd64ระบบเคอร์เนล สงสัยโดยอัตโนมัติว่าการจัดการพลังงาน USBของเคอร์เนลไม่น่าสงสัย ใน Debian นี่จะถูกคอมไพล์เป็นusbcoreโมดูลในเคอร์เนล

คุณสามารถเปลี่ยนแปลงสิ่งนี้ได้อย่างถาวรโดยออกที่บรรทัดคำสั่ง:

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

เมล็ดบางคนอาจจำเป็นต้องมีautosuspend=0แต่

หากระบบของคุณใช้initrd(อาจเป็นไปได้) ให้สร้างใหม่initrdสำหรับเคอร์เนลของคุณ

ตัวอย่างเช่น:

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

รีบูตและตรวจสอบด้วย:

cat /sys/module/usbcore/parameters/autosuspend

ซึ่งควรให้ผลใน-1ขณะนี้


ฉันไม่ได้ใช้initrdและการกระทำที่อธิบายไว้ที่นี่จะไม่ทำงานในกรณีนี้เนื่องจากเราได้รับคำตอบก่อนหน้านี้
ปีเตอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.