ฉันจะโหลดโมดูลเคอร์เนลอย่างถาวรได้อย่างไร


13

ฉันมี Compaq Presario CQ-61 320SQ ฉันใช้ Ubuntu 10.04 เพราะหลังจากอัปเดตเป็น 10.10 เมาส์และทัชแพดของฉันไม่ทำงานเครือข่ายจะไม่ทำงานเสียงไม่ทำงาน ... (ฉันจัดการเพื่อแก้ไขส่วนใหญ่ พวกเขาหลังจากผ่าน Google มาเกือบเดือน แต่ไม่ใช่ทั้งหมดเดสก์ท็อป 2 เครื่องของฉันไม่มีปัญหากับ 10.10) ดังนั้นฉันจึงตัดสินใจเปลี่ยนกลับไปเป็น 10.04 ซึ่งฉันมีปัญหา:

ความเร็วบรอดแบนด์ของฉันต่ำมากเพราะโมดูลเคอร์เนลr8169ฉันดาวน์โหลดโมดูลที่ดีr8101และทุกครั้งที่บูทคอมพิวเตอร์มีrc.localรายการแก้ไข

คำถาม:
ฉันสามารถโหลดโมดูลได้อย่างถาวรจากสถานที่ที่เฉพาะเจาะจง ฉันได้ยินเกี่ยวกับ/etc/modulesแต่มีฉันต้องการชื่อโมดูล แต่ฉันต้องโหลดจากเส้นทางเฉพาะ (ที่เป็นเส้นทางเริ่มต้นสำหรับที่)

ขอขอบคุณ.

ดังนั้นฉันจึงศึกษาสคริปต์:

มันสร้างไฟล์r8101.koขึ้นมา/lib/modules/`uname -r`/kernel/drivers/netดังนั้นฉันคิดว่าตราบใดที่ไม่มีใครจะลบไฟล์นั้นและฉันไม่อัปเดตเคอร์เนลอาจเพิ่มr8108การ/etc/modulesทำงานและเพิ่มr8169ในบัญชีดำ ... ฉันจะลองดู

EDIT2:
ดังนั้นผมจึงเพิ่มr8101การ/etc/modulesและการblacklist r8169 /etc/modprobe.d/blacklist.confมันยังคงใช้โมดูลเก่า:

radu@adu:~$ lsmod | grep r8
r8101                  67626  0 
r8169                  34108  0 
mii                     4381  1 r8169

แก้ไข: โมดูลจะโหลดโดยใช้สคริปต์นี้ที่มาพร้อมกับมัน:

#!/bin/sh

# invoke insmod with all arguments we got
# and use a pathname, as insmod doesn't look in . by default

TARGET_PATH=/lib/modules/`uname -r`/kernel/drivers/net
echo
echo "Check old driver and unload it." 
check=`lsmod | grep r8169`
if [ "$check" != "" ]; then
        echo "rmmod r8169"
        /sbin/rmmod r8169
fi

check=`lsmod | grep r8101`
if [ "$check" != "" ]; then
        echo "rmmod r8101"
        /sbin/rmmod r8101
fi

echo "Build the module and install"
echo "-------------------------------" >> log.txt
date 1>>log.txt
make all 1>>log.txt || exit 1
module=`ls src/*.ko`
module=${module#src/}
module=${module%.ko}

if [ "$module" == "" ]; then
    echo "No driver exists!!!"
    exit 1
elif [ "$module" != "r8169" ]; then
    if test -e $TARGET_PATH/r8169.ko ; then
        echo "Backup r8169.ko"
        if test -e $TARGET_PATH/r8169.bak ; then
            i=0
            while test -e $TARGET_PATH/r8169.bak$i
            do
                i=$(($i+1))
            done
            echo "rename r8169.ko to r8169.bak$i"
            mv $TARGET_PATH/r8169.ko $TARGET_PATH/r8169.bak$i
        else
            echo "rename r8169.ko to r8169.bak"
            mv $TARGET_PATH/r8169.ko $TARGET_PATH/r8169.bak
        fi
    fi
fi

echo "Depending module. Please wait."
depmod -a
echo "load module $module"
modprobe $module

echo "Completed."
exit 0

หากการเพิ่มไปยัง / etc / modules ทำงานได้คุณควรตอบคำถามของคุณเอง
Javier Rivera

ไม่ทำงานอย่างที่คาดไว้อัปเดตคำถาม
Radu Maris

7
หากคุณแก้ไข / etc / modules คุณต้องเรียกใช้ (as sudo) update-initramfs -u แล้วเริ่มต้นใหม่
papukaija

1
@papukaija: มนุษย์คุณเป็นอัจฉริยะ tks :)
Radu Maris

คำตอบ:


12

ดังนั้นในการรวบรวมข้อมูลทั้งหมดเพื่อคำตอบนี่คือ:

  1. หลังจากที่รวบรวมแรกของโมดูลใหม่ผมมีไฟล์โมดูลในr8101.ko/lib/modules/$(uname -r)/kernel/drivers/net

  2. ฉันเพิ่มr8101ไปยัง/etc/modulesและblacklist r8169ไปยัง/etc/modprobe.d/blacklist.confแต่ฉันยังคงบูตกับโมดูลเก่า

  3. จากนั้นฉันเรียกใช้sudo update-initramfs -uแล้วหลังจากรีสตาร์ทโมดูลใหม่ก็โหลดตามที่คาดไว้ (ขอบคุณ @papukaija ความคิดเห็น)

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