zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    sql2slack alash3al 开源的又个轻量级工具
    pgspider fetchq 扩展docker镜像
    godns 集成coredns 的demo
    godns 简单dnsmasq 的dns 替换方案
    aviary.sh 一个基于bash的分布式配置管理工具
    使用coredns 的template plugin实现一个xip 服务
    nginx 代理 coredns dns 服务
    基于nginx proxy dns server
    几个不错的geodns server
    spring boot rest api 最好添加servlet.context-path
  • 原文地址:https://www.cnblogs.com/sinferwu/p/12546753.html
Copyright © 2011-2022 走看看