爲了方便修改驅動,使用原生安裝的內核跟自己編譯的驅動已經不匹配,所以需要重新下載內核源碼編譯安裝。
一、內核更新安裝
1、查看自身系統的內核版本
2、去內核官網下載內核源碼
3、配置內核
得到內核之後你肯定要對其進行配置,不然最後和你的電腦不適配,也是有問題的。我進行配置的辦法是將現有內核的配置選項複製到你要編譯的新內核上去。首先,我們要把原來內核的選項配置複製出來cp /boot/config- 4.2.0-23-generic ./.config 這句話的意思是將我現有的內核(4.15-23)版本的config配置信息複製到現在目錄下的 .config裏面,最後通過make menuconfig 對內核選
4、編譯內核
sudo make -j20
5、編譯模塊
sudo make moudles
6、 安裝模塊
sudo make modules_install
7、安裝內核
sudo make install
8、重啓查看內核版本
sudo reboot
uname -a
9、更改默認引導的內核
首先找到內核名稱。
grep menuentry /boot/grub/grub.cfg
要將默認內核更改爲啓動,可以執行以下操作:
-
打開文件/ etc / default / grub。
-
將GRUB_DEFAULT的值更改爲您希望選擇的菜單選項的索引值。
例如,在啓動過程中的GRUB菜單中有:
Ubuntu
Advanced options for Ubuntu
Windows 10 (loader) (on /dev/sda1)
system setup
我的 “Advananced options for Ubuntu” 子菜單如下所示:
Ubuntu, with Linux 4.13.0-26-generic
Ubuntu, with Linux 4.13.0-26-generic (upstart)
Ubuntu, with Linux 4.13.0-26-generic (recovery mode)
Ubuntu, with Linux 4.10.0-42-generic
Ubuntu, with Linux 4.10.0-42-generic (upstart)
Ubuntu, with Linux 4.10.0-42-generic (recovery mode)
現在,第一個選項是索引0,第二個是1,第三個是2,依此類推。(即GRUB菜單中的 Ubuntu爲0,Advanced options for Ubuntu爲1,…)
在我的情況下,我想選擇 “Advanced options for Ubuntu” 子菜單中的 “Ubuntu, with Linux 4.10.0-42-generic”
設置 # sudo /etc/default/grub
將GRUB_DEFAULT設爲:
GRUB_DEFAULT = “1> 3”
使用 ‘>’ 符號來指定有一個子菜單(注意符號 > 和數字 3 之間有空格,所以需要雙引號)。在這種情況下,我在主菜單中選擇第2個選項(索引1),在子菜單中選擇第四個選項(索引3)。
菜單選項來自文件/boot/grub/grub.cfg(不要編輯這個文件)。
- 一旦對/etc/default/grub進行了更改,請保存並運行以下命令來更新GRUB配置文件(必須,否則不生效):
sudo update-grub
- 重新啓動,現在應該默認啓動新的內核版本。
二、驅動編譯加載
在加載/lib/modules/4.4.209/kernel/drivers/net/usb/GobiNet.ko時遇到如下問題
insmod: ERROR: could not insert module GobiNet.ko: Unknown symbol in module
可能是幾種原因
1、gcc版本不同
新編譯的內核,不存在這種問題,排除
2、模塊依賴項是否加載
有可能是該模塊的相關依賴沒有加載
先執行命令:modinfo xxxx.ko
查看 depends:所依賴的模塊
先加載依賴模塊,然後加載xxxx.ko模塊
或者直接用modprobe xxx進行加載
3、內核模塊原本有問題