Linux内核编译

操作系统作业中的一小步

Posted by Jackson on February 25, 2020

linux内核编译

1.1 大致步骤

  • 下载linux内核4.19.1

    官网链接:

    https://www.kernel.org/

    官网下载经常速度太慢,无法下载,提供另一个链接:

    http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

  • 将linux压缩包放在/usr/src/目录下

  • 解压缩并链接

    xz -cd linux-4.19.1.tar.xz| tar xvf -
    

    解压缩后出现linux-4.19.1目录,此时我们创建一个名为linux的目录,将linux软连接到linux-4.19.1,命令如下

    ln -s linux-4.19.1 linux
    
  • 更新相关依赖软件

    sudo apt-get install libncurses5-dev libssl-dev -y
      
    sudo apt-get install build-essential openssl -y
      
    sudo apt-get install zlibc minizip -y
      
    sudo apt-get install libidn11-dev libidn11 -y
      
    sudo apt-get install bison -y
      
    sudo apt-get install flex -y
      
    sudo apt-get install libelf-dev -y
      
    
  • 进入/usr/src/linux目录下,输入以下命令

    make mrproper   清空一些配置信息检查源码是否完整
      
    make clean       清空一些编译信息
      
    make menuconfig
      
    ulimit -s 1048576	给栈分配1G的空间,看情况,可分可不分
    

    make menuconfig之后出现一个图形化界面,直接选择exit->yes,表示我们使用默认配置

  • 开始编译和安装

    make -j4 命令即可开始编译。(-j4意思是并发执行,可以提高速度,一般情况 下不要多于CPU核数。这个命令的执行会耗费很很很很很长时间。)
      
    make modules_install   编译完成之后首先安装模块
      
    其次安装内核,命令为:make install
    
  • 启用内核作为引导

    输入下列命令将内核作为引导,将数字更改为你自己编译的版本号:
      
    sudo update-initramfs -c -k 4.19.1
      
    更新一下grub:
      
    sudo update-grub
    
  • 重启计算机,查看是否成功

    重启计算机: shutdown -r now
    重启后输入: uname -r
    

1.2遇见问题

  • recipe for target ‘xxx’ failed make: *** [xxx] Error 1

    或者You are building kernel with non-retpoline compiler, please update your compiler

    报告这种错误一般是依赖的软件版本低或者没有安装,需要进行安装,推荐直接尝试

    apt-get update
    apt-get upgrade
    

    将已有软件全部更新一遍。

  • ld: final link failed: Memory exhausted make: *** [vmlinux.o]

    内存耗尽,推荐给栈空间设置更多内存

    ulimit -r			查看内存设置
    ulimit -s 1048576	 设置栈空间为1GB
    ulimit -r			再次查看是否设置成功
    

1.3参考博客

如何编译安装Linux内核:https://baijiahao.baidu.com/s?id=1650254449725547697&wfr=spider&for=pc

非常好的Linux编译内核详解:https://blog.csdn.net/zhenguo26/article/details/79641322

编译Linux内核源码,安装、删除内核:https://blog.csdn.net/qq_28437139/article/details/83692907