Ubuntu編譯內核


Ubuntu 18.04.4 

1、查看內核版本
uname -a


2、下載內核源碼
       可以輸入”sudo apt-get install linux-source“后按Tab鍵看能安裝哪些內核,這里下載上一步查看到內核版本。

sudo apt-get install linux-source-5.3.0


3、解壓內核源碼
    一般下載的內核源碼在/usr/src/linux-source-5.3.0/文件夾下。解壓位置可以自行指定,解壓和編譯需要足夠的空間。

sudo tar xvjf /usr/src/linux-source-5.3.0/linux-source-5.3.0.tar.bz  

也可以去 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ 下載對應的源碼


4、編譯配置

    進入解壓文件,在配置之前執行安裝操作,如果仍然有錯,安裝 錯誤提示的包 即可。

sudo apt-get install -y libncurses5-dev flex bison libssl-dev

sudo make menuconfig

 

5、編譯配置

將當前內核配置文件cp到內核源碼目錄下:

sudo cp /boot/config-5.3.0-28-generic  /usr/src/linux-source-5.3.0/linux-source-5.3.0/.config

←和→選擇“Load”, 選擇剛剛復制的.config文件

↑和↓選擇”Device Drivers" ,然后按Enter。

↑和↓選擇”Network device support" ,然后按Enter。

↑和↓選擇”Universal TUN/TAP driver support" ,然后按M鍵,使得選項前變成<M>。然后按←或→選擇save, 保存為.config  最后Exit。

 

6、編譯模塊

sudo make -j 8  modules

 

7、復制tun模塊

sudo cp ./drivers/net/tun.ko  /lib/modules/5.3.0-28-generic/kernel/drivers/net/

 

8、使能tun模塊

sudo depmod -a

sudo modprobe tun

如果順利執行“modinfo tun”命令將看到tun模塊的信息, 

 

如果仍然沒有tun模塊信息,采取手動安裝tun.ko

sudo insmod drivers/net/tun.ko

 你可能看到 could not insert module tun.ko: Invalid module format 信息,這是因為當前的內核和tun模塊的編譯的內核不同導致

使用dmesg | tail 查詢日志

version magic '5.0.0 SMP mod_unload ' should be '5.0.0-32-generic SMP mod_unload '

 

修改源代碼根目錄下的Makefile文件
VERSION = 5
PATCHLEVEL = 0
SUBLEVEL = 0
EXTRAVERSION = -32-generic

原理請搜索 內核可裝載模塊的版本檢查機制

然后重新編譯

make distclean

然后重復上述步驟

 

 

**************************************************************************************

如果上面都不能解決,需要安裝新內核和模塊

進入編譯目錄,依次執行如下命令

  1. sudo make -j 8
  2. sudo make modules_install
  3. sudo make install

執行完成后 查看啟動配置文件,會看到有新內核的標識

cat /boot/grub/grub.cfg

 

最后“reboot”命令重啟系統就可以看到tun模塊的信息

 

 

如果重啟后 出現以下錯誤 或者 不能啟動系統

[end Kernel panic - not syncing: System is deadlocked on memory]

將虛擬機的內存 增大 (2048 M →  4096M)

 

參考:

https://www.jianshu.com/p/b1d315ea002e

https://blog.csdn.net/qq_34160841/article/details/104901266

 

 

重點:

 

https://www.jianshu.com/p/660e69326e65

在 linux 2.4 及之后的內核版本中,tun/tap 驅動是默認編譯進內核中的。 (tun編譯到內核中, tap作為內核模塊編譯)

 

查看TUN是否安裝

是否有/dev/net/tun文件

file tun
tun: character special (10/200)        #10和200分別是主設備號和次設備號

 

 
        

 

linux 查看內核編譯進的驅動(不是模塊)

cat /lib/modules/$(uname -r)/modules.builtin

 

上述中insmod出現 Invalid module format 問題,可以使用下面命令,查看錯誤日志

dmesg | tail

 

可以找到以下日志

exports duplicate symbol tun_is_xdp_frame (owned by kernel)

表示 tun已經編譯進內核,所以無需將tun編譯成.ko模塊進行安裝

 命令查詢

cat /lib/modules/$(uname -r)/modules.builtin

 

cat /lib/modules/$(uname -r)/modules.builtin | more

grep "=y" /boot/config-$(uname -r) | more

 

 

/boot/config-5.3.0-28-generic 此文件中可以查看      /boot/config-$(uname -r) 

在menuconfig中選擇m和 *的區別:
*: 模塊驅動編譯到內核中,啟動時自動加載
M:標識作為內核模塊編譯
空格:表示該功能不編譯到內核中,即新的內核將不支持該功能。

 

https://www.jb51.net/LINUXjishu/406899.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM