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

Linux内核4.19.1编译的更多相关文章

  1. Linux 内核源码外编译 linux模块--编译驱动模块的基本方法

    1.先编写一个简单的hello模块,hello.c 源码如下: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # defin ...

  2. 《linux 内核全然剖析》编译linux 0.12 内核 Ubuntu 64bits 环境

    我×.. . 最终好了,大概3 4个小时吧...各种毛刺问题.终究还是闯过来了.. .. ubuntu2@ubuntu:~/Downloads/linux-0.00-050613/linux-0.00 ...

  3. 如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录

    最近帮一位上海的朋友搞一块小板,在ubuntu15.04 vivid上已经加载了对应了.ko驱动包 但关键是系统根本就枚举不到该声卡ALC5640,试了OpenSUSE也是一样的结果,看来是内核漏加载 ...

  4. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核

    HACK #2 如何编译Linux内核 本节介绍编译Linux内核的方法.当发现bug而修改源代码或者添加新功能时,就需要对内核进行重新编译,生成二进制映像文件.另外,如果想要使用发布版内核中无效的功 ...

  5. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  6. 【转】6.4.6 将驱动编译进Linux内核进行测试

    原文网址:http://www.apkbus.com/android-98520-1-1.html 前面几节都是将Linux驱动编译成模块,然后动态装载进行测试.动态装载驱动模块不会随着Android ...

  7. Linux内核的编译安装

    前言 Linux内核是Linux操作2347系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性.内核主要功能包括进程管理.内存管理.文件管理.设备管理.网络管理等.Linux内 ...

  8. Linux 内核 编译模块

    背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...

  9. 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?

    作者:larmbr宇链接:https://www.zhihu.com/question/35484429/answer/62964898来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

随机推荐

  1. 关于BAPI_GOODSMVT_CREATE中货物移动相关事务代码说明

    BAPI_GOODSMVT_CREATE参数 goodsmvt_code中的GM_CODE是为 BAPI 货物移动分配事务代码 其取值为下面对应的事务代码: 01 MB0102 MB3103 MB1A ...

  2. sap的内核升级,修补了源代码保护的方式

    众所周知,在SAP的内核位701或者之前的版本中,我们可以通过向源代码的中加入"*@#@@[SAP]"这样的代码,来实现对源代码的保护.但是在内核升级到721和以后的版本中,你会发 ...

  3. 零基础怎么学Python编程,新手常犯哪些错误?

    Python是人工智能时代最佳的编程语言,入门简单.功能强大,深获初学者的喜爱. 很多零基础学习Python开发的人都会忽视一些小细节,进而导致整个程序出现错误.下面就给大家介绍一下Python开发者 ...

  4. .net code+vue 文件上传

    后端技术 .net code 官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnet ...

  5. Maven 依赖机制

    概述 在 Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级.让我们看一个案例研究,以了解它是如何工作的.假设你想使用 Log4j 作为项目的日志.这里你要做什么? 传统方式 访问 ...

  6. (013)每日SQL学习:日期的各种计算

    1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from du ...

  7. Java NIO ———— Buffer 缓冲区详解 入门

    引言缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存入 ...

  8. C# 8.0 可空(Nullable)给ASP.NET Core带来的坑

    Nullable reference types(可为空引用类型) 可为空引用类型不讲武德 C#8.0 引入了"可为空引用类型"和"不可为空引用类型",使我们能 ...

  9. libuv事件循环中的三种句柄

    1.说明 本文会简单介绍 libuv 的事件循环,旨在入门级别的使用,而不做深入探究,简单来说就是,会大概用就行,先用熟练了,再去探究原理和源码 下图为官网的 libuv 的不同部分及其涉及的子系统的 ...

  10. TRUNK与VTP

    TRUNK协议: 交换机之间VLAN通信: 同一个VLAN可以跨越多个交换机 主干功能支持多个VLAN的数据 Trunk(主干) VLAN 中交换机之间的链路:用来承载多个VLAN的数据流. Trun ...