systemd: ทำให้คำสั่ง modprobe เป็นอัตโนมัติในเวลาบูต


20

การแจกจ่ายของฉันคือ Fedora 17 Gnome ทุกครั้งที่ฉันรีบูต / รีสตาร์ทคอมพิวเตอร์ฉันต้องเรียกใช้คำสั่งนี้ในฐานะรูท:

modprobe rt2800usb

ฉันจะทำให้มันถาวรได้อย่างไร


1
สวัสดีขอบคุณสำหรับคำถามแรกของคุณ มันจะดีหากคุณสามารถพูดถึงการกระจายลินุกซ์ที่คุณกำลังหมายถึง :)
Bonsi สกอตต์

1
@BonsiScott การกระจายควรจะเพิ่มไปยังข้อความคำถามเช่นกัน แต่แท็กพูดว่า Fedora
depquid

(ลบคำตอบของฉันเองออกเพราะไม่ใช่ตัวเลือกที่เฉพาะเจาะจง)
Bonsi Scott

@BonsiScott คำตอบของคุณได้ดีอาจจะมีประโยชน์สำหรับคนอื่น ๆ ...
vonbrand

คำตอบ:


34

บน distro ใด ๆ ที่ใช้systemdคุณจะสามารถโหลดโมดูลผ่านmodules-load.d:

  • สร้างไฟล์ปรับแต่ง:

    /etc/modules-load.d/rt2800usb.conf

  • เปิดและแก้ไขเช่นนี้ (เพิ่มชื่อโมดูล):

    rt2800usb

  • ครั้งต่อไปที่คุณรีบูตโมดูลควรโหลดโดยอัตโนมัติ


การแก้ไขปัญหา:

ตรวจสอบว่าsystemdบริการโหลดโมดูล:

systemctl status systemd-modules-load.service

ผลลัพธ์ควรมีลักษณะดังนี้:

systemd-modules-load.service - Load Kernel Modules
  Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
  Active: active (exited) since Wed, 03 Apr 2013 22:50:57 +0000; 46s ago
        Docs: man:systemd-modules-load.service(8)
              man:modules-load.d(5)
 Process: 260 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/SUCCESS)

บรรทัดสุดท้ายมีPID(ID กระบวนการ) และรหัสออก status=0/SUCCESSหมายถึงโมดูลถูกแทรกสำเร็จยืนยันโดย:

journalctl -b _PID=260

การส่งออกเป็น:

Apr 03 22:50:57 mxhst systemd-modules-load[260]: Inserted module 'rt2800usb'

ในกรณีที่ล้มเหลวsystemctlเอาต์พุตจะเป็นดังนี้:

systemd-modules-load.service - Load Kernel Modules
  Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
  Active: failed (Result: exit-code) since Wed, 03 Apr 2013 22:50:59 +0000; 43s ago
        Docs: man:systemd-modules-load.service(8)
              man:modules-load.d(5)
 Process: 260 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)

ด้วยjournalctl -bการรายงาน:

Apr 03 22:50:59 mxhst systemd-modules-load[260]: Failed to find module 'fakert2800usb'

เมื่อรหัสทางออก0/SUCCESSหมายความว่าโมดูลของคุณได้รับการใส่สำเร็จแล้ว วิ่ง

lsmod | grep rt2800

ควรยืนยันว่า:

rt2800usb              26854  0 
rt2x00usb              19757  1 rt2800usb
rt2800lib              64762  1 rt2800usb
rt2x00lib              66520  3 rt2x00usb,rt2800lib,rt2800usb
mac80211              578735  3 rt2x00lib,rt2x00usb,rt2800lib

หากlsmodส่งออกไม่ได้ยืนยัน (แม้จะมีบริการรหัสทางออกเป็นอยู่0/SUCCESS) modules-load.serviceมันหมายถึงสิ่งที่ลบออกโมดูลหลังจากที่ถูกโหลดโดย สาเหตุหนึ่งที่เป็นไปได้คือ*.confไฟล์อื่นที่ขึ้นบัญชีดำของโมดูล ค้นหาบรรทัดที่ชอบ:

blacklist rt2800usb

ใน/etc/modprobe.d/*.conf, /usr/lib/modprobe.d/*.confหรือ/run/modprobe.d/*.confและแสดงความคิดเห็นออก / ลบ


ฉันทำสิ่งนี้แล้ว แต่โมดูลไม่โหลดเมื่อรีบูต
somethingSomething

เป็นเพราะรูทเป็นเจ้าของไฟล์หรือไม่
somethingSomething

เมื่อฉันรีบูตฉันยังต้องทำคำสั่ง modprbe ไม่อยู่ในรายการเนื่องจากรายชื่ออยู่หลังจากฉันรันคำสั่ง modprobe หรือไม่
somethingSomething

5

ในการโหลดโมดูลเมื่อบู๊ตเครื่องคุณสร้างไฟล์/etc/modules-load.d/ขึ้นมา ไฟล์นี้สามารถมีชื่อใด ๆ แต่ต้องลงท้าย.confด้วย ในกรณีของไดรเวอร์ wifi คุณสามารถสร้างไฟล์/etc/modules-load.d/rt2800.confได้

ในไฟล์เพิ่มบรรทัดเดียวด้วยชื่อของโมดูลที่คุณต้องการโหลดดังนี้:

rt2800usb

หน้า Arch Wiki บนเคอร์เนลโมดูลมีข้อมูลเพิ่มเติม

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