• 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

  • 相关阅读:
    搭建环境遇到的几个问题
    webservice
    Eclipse 反编译 阅读class 文件
    设置navigationBar上面的item
    自定义的UITabbar上面的按钮的x坐标的计算方法
    UIToolbar自定义背景及按钮设置
    UITabBar实现自定义背景及UITabBarItem自定义图片和字体
    IOS APP圆形图片的实现
    如果AlertView输入框为空,则禁止点击确定按钮
    两种局部刷新UITableView的方法的使用条件
  • 原文地址:https://www.cnblogs.com/sinferwu/p/12546753.html
Copyright © 2020-2023  润新知