• Linux重新编译内核


    1.  下载内核文件。

    内核可以直接从www.kernel.org网站下载,但是网速一般都不理想。建议从国内的开源镜像站下载。比如:清华大学开源镜像站(mirrors.tuna.tsinghua.edu.cn)。

    直接下载linux-linux-5.10.2内核:

    https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.10.2.tar.xz

    2.  安装开发工具。

    archlinux安装base-devel工具包即可。(其实可以省略)

    pacman -S base-devel

    3.  解压内核。

    tar xvf linux-5.10.2.tar.xz

    4.  自定义内核。

    可以在解压文件根目录下创建.config文件,添加linux需要开启的功能。

    Make nconfig(基于curses)是.config的图形管理界面。使用起来非常方便。还有

    make config:纯命令行方式。

    make gconfig:基于GTK(GNOME)环境窗口界面。

    make xconfig:基于Qt(KDE)环境窗口界面。

    make defconfig:根据当前运行内核进行配置。

    make allyesconfig:默认添加所有配置。

    make allnoconfig:默认不添加所有配置。

    根据自己的需求定制内核源码。

    y,表示自动启动,menu config界面显示为*。n表示禁用,menu config界面显示为空格。m表示手动启动,menu config界面显示为m。

    archlinux可以使用 zcat命令获取当前运行内核的config文件。其它发行版的config文件可能直接放在/boot目录中。

    $ zcat /proc/config.gz > .config  或者touch .config

    5.  编译内核。

    在源码文件根目录下运行:

    make -j 8 #12代表使用的线程数。根据开发平台自己决定。

    make [-j #]:全编译。

    make dir/:只编译 dir目录中的代码。

    make dir/file.ko:只编译dir目录中特定模块。

    ※交叉编译内核:编译的目标平台与当前平台不相同。

    make ARCH=arch_name

    ※获取编译目标平台的使用帮助。

    make ARCH=arch_name help

    比如:make ARCH=arm help

    6.  编译安装模块。

    实际上就是复制模块包到目录中。运行下面命令,自动将生成的ko文件放到当前运行平台的/lib/modules目录中。(※此处需要用root权限,否则会失败)。

    # make modules_install

    7.  安装内核

    # make install:安装内核到/boot目录,并且它会修改grub.cfg文件。

    archlinux可以手动安装:

    cp -v arch/x86/boot/bzImage /boot/

    8.  清理文件。

    安装完成后清理一下编译生成的用不到到文件,节省硬盘空间。

    ※如果这个内核源码已经编译过(不是刚从官方网站下载的),最好事先清理一下编译生成的文件。

    make clean:清理生成的多数文件,但会保留config文件,并且备份config文件。

    make mrproper:清理所有生成的文件,包含config文件。

    make distclean: mrproper、patches等补丁文件以及编辑器备份,都会被清理掉。

    9.  卸载内核。

    boot中用不到的内核。

    修改grub.cfg。

    lib/modules中用不到的模块。

    /usr/src/linux/目录下不需要的内核源码。

  • 相关阅读:
    接口方法上的注解无法被@Aspect声明的切面拦截的原因分析
    SpringBoot整合Netty
    简单的RPC框架
    基于redis的分布式锁的分析与实践
    8种方案解决重复提交问题
    领券中心项目,如何用 Redis 做实时订阅推送的?
    IM(即时通讯)服务端(二)
    IM(即时通讯)服务端(一)
    0xC00000FD: Stack overflow (parameters: 0x00000000, 0x003E2000).错误
    int (*a)[10]和int *a[10]的区别
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14187373.html
Copyright © 2020-2023  润新知