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. [usaco2008 Oct]Pasture Walking 牧场旅行

    题目描述 n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草.更加自然而方便的是,第i个奶牛就在第i个牧场中吃草. 其中的一些对牧场被总共 ...

  2. IP2723T中文规格书PDF

    IP2723T 是一款集成多种协议.用于 USB 输出端口的快充协议 IC.支持多种快充协议,包括 USBTypeC DFP,PD2.0/PD3.0/PPS,HVDCPQC4/QC4+/QC3.0/Q ...

  3. 基于scrapy框架的分布式爬虫

    分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...

  4. uni-app开发经验分享二十: 微信小程序 授权登录 获取详细信息 获取手机号

    授权页面 因为微信小程序提供的 权限弹窗 只能通用户确认授权 所以可以 写一个授权页面,让用户点击 来获取用户相关信息 然后再配合后台就可以完成登录 <button class="bt ...

  5. windows中使用django时报错:A server error occurred. Please contact the administrator.

    这是因为在视图函数中使用了get函数,获取了不存在的数据例如:数据库中不存在一条name为hello1的数据,使用如下语句访问message = Message.objects.get(name='h ...

  6. Redis 实战 —— 07. 复制、处理故障、事务及性能优化

    复制简介 P61 关系型数据库通常会使用一个主服务器 (master) 向多个从服务器 (slave) 发送更新,并使用从服务器来处理所有读请求. Redis 也采用了同样的方法实现自己的复制特性,并 ...

  7. MySQL设计之Schema与数据类型优化

    一.数据类型优化 1.更小通常更好 应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要 ...

  8. 一个关于时区的bug

    起因: 在 Apollo 中配置了某活动的开始时间是 2020-05-15, 代码中的逻辑判断如下: const nowTime = new Date().getTime(); const start ...

  9. go mod 以及vscode解决被墙的插件问题

    https://blog.csdn.net/weixin_39003229/article/details/97638573?utm_medium=distribute.pc_relevant.non ...

  10. Redis集群数据没法拆分时的搭建策略

    在上一篇文章中,针对服务器单点.单例.单机存在的问题: 单点故障 容量有限 可支持的连接有限(性能不足) 提出了解决的办法:根据AKF原则搭建集群,大意是先X轴拆分,创建单机的镜像,组成主主.主备.主 ...