Linux五步构建内核树

目录
  • 0. 系统自带的内核树
  • 1. 环境配置
    • 第一步
    • 第二步
  • 2. 下载源码
  • 3. 构建准备
  • 4. 构建内核
  • 5. 安装模块
  • 总结

0. 系统自带的内核树

有时,安装的系统已经自带了Linux内核树,足够用来编译驱动程序了。

自带的内核树通常位于

/lib/modules/<系统内核版本>/build

其中,系统内核版本可以用uname -r来查看

$ uname -r
5.11.0-41-generic

不过自带的内核树似乎不完整,所以建议按照下面的方法编译一个完整的内核树。

1. 环境配置

第一步

初次配置内核树要先安装一些必要的环境

sudo apt-get build-dep linux linux-image-$(uname -r)

(如果报错Error :: You must put some ‘source‘ URIs in your sources.list,请参照这里)

第二步

除了上面的环境之外,还要安装这些

sudo apt-get install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf dwarves

2. 下载源码

sudo apt-get source linux-image-unsigned-$(uname -r)

这一步结束之后,会多出三个文件,

linux-hwe-5.11_5.11.0-41.45~20.04.1.diff.gz
linux-hwe-5.11_5.11.0-41.45~20.04.1.dsc
linux-hwe-5.11_5.11.0.orig.tar.gz

以及一个内核源码所在的文件夹

linux-hwe-5.11-5.11.0

(注:文件名称根据不同的系统版本会有所不同)

3. 构建准备

(注:任何时候,运行命令时遇见了permission denied,只需要在命令开头加上sudo后重新运行即可)

进入linux-hwe-5.11-5.11.0文件夹,输入

make menuconfig

稍微加载后,会进入这个页面

这里什么都不用修改,直接关闭界面即可(方向键选择Exit然后回车,或者连续按两下Esc就能退出),原因见本章节末。

然后,会显示这个对话框

蓝色框选中Yes后,按下回车键退出即可。

这样会在当前目录下生成一个.config文件(输入ls -a就能找到这个文件),保证稍后的make能够顺利执行。

4. 构建内核

输入下面的命令开始构建(如遇见permission denied,在命令开头加上sudo后重新运行即可)

make

这里要狠狠地等一会儿,一般要一到数个小时。可以通过-j <最大并发任务数>命令,使用并发来提速。最大并发任务数一般可以是CPU数量的两倍。

(注:通过使用make help进行查阅可以发现,在输入make时,会自动执行 1)make vmlinux(构建原始内核) 2)make bzImage(构建压缩的内核)和 3) make modules(单独构建模块化的驱动)这三个动作)

5. 安装模块

最后,把模块安装到/lib/modules/$(uname -r)目录

sudo make modules_install

总结

到此这篇关于Linux五步构建内核树的文章就介绍到这了,更多相关Linux内核树内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Linux 系统优化的一些建议(内核优化)

    关闭swap 如果服务器上有运行数据库服务或消息中间件服务,请关闭交换分区 echo "vm.swappiness = 0" >> /etc/sysctl.conf sysctl -p OOM Killer 一般我们的linux服务都是混部服务的,每个程序申请的物理内存都是共享的:例如物理内存只有1g,启动2个程序各申请1g是可以的,linux通过这种过度分配的方式来达到内存的充分利用,当程序实际使用内存超出物理内存时,会被系统按照优先级,杀掉一部分程序以确保其它程序的正常

  • linux编译内核的方法

    1.下载需要的内核版本 2.上传到操作系统 3.解压到/usr/src目录下 比如:3.19内核 tar -xvf linux-3.19.tar.xz -C /usr/src 4.创建连接 cd /usr/src ln -sv /usr/src/linux-3.19 Linux 5.进行内核设置 cd /usr/src/linux make menuconfig 这步,最好是拷贝一个前面运行的.config文件,在这个文件上进行修改,否则,可能重启起不来. 比如下面这样: cp /boot/co

  • 分析Linux内核调度器源码之初始化

    一.导语 调度器(Scheduler)子系统是内核的核心子系统之一,负责系统内 CPU 资源的合理分配,需要能处理纷繁复杂的不同类型任务的调度需求,还需要能处理各种复杂的并发竞争环境,同时还需要兼顾整体吞吐性能和实时性要求(本身是一对矛盾体),其设计与实现都极具挑战. 为了能够理解 Linux 调度器的设计与实现,我们将以 Linux kernel 5.4 版本(TencentOS Server3 默认内核版本)为对象,从调度器子系统的初始化代码开始,分析 Linux 内核调度器的设计与实现.

  • Linux五步构建内核树

    目录 0. 系统自带的内核树 1. 环境配置 第一步 第二步 2. 下载源码 3. 构建准备 4. 构建内核 5. 安装模块 总结 0. 系统自带的内核树 有时,安装的系统已经自带了Linux内核树,足够用来编译驱动程序了. 自带的内核树通常位于 /lib/modules/<系统内核版本>/build 其中,系统内核版本可以用uname -r来查看 $ uname -r 5.11.0-41-generic 不过自带的内核树似乎不完整,所以建议按照下面的方法编译一个完整的内核树. 1. 环境配置

  • RedHat linux 8.0下内核编译步骤和说明

    ************************************************************************以下步骤有很多都是很初级的命令或解释,因为偶是linux新手,*在编译过程中走了很多弯路,花了大量时间找各种解决办法,所以*把相应的命令都写了出来,希望对跟偶一样的才入门不久而又想*编译内核的新手有所帮助!** kilvon 05-Mar-2003******************************************************

  • ASP.NET五步打包下载Zip文件实例

    首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会,继续对Linux示好.换了CEO就是不一样 3.微软发布VS For Mac! 第一步   下载dll 在Nuget里安装下面这个dll 第二步   下载方法 项目结构 在我们的一般处理程序中加入如下方法 ///<summary> /// 批量打包下载 Author:吴双 /// </summary> /// <param name="fileName">

  • 详解Linux用户态与内核态通信的几种方式

    Linux 用户态和内核态由于 CPU 权限的限制,通信并不像想象中的使用进程间通信方式那么简单,今天这篇文章就来看看 Linux 用户态和内核态究竟有哪些通信方式. 我们平常在写代码时,一般是在用户空间,通过系统调用函数来访问内核空间,这是最常用的一种用户态和内核态通信的方式.(关于 Linux 用户态和内核态可以参考 xx) 除此之外,还有以下四种方式: procfs(/proc) sysctl(/proc/sys) sysfs(/sys) netlink 套接口 procfs(/proc)

  • 使用JS动态构建目录树

    在使用frameset布局的时候,经常会用到目录树,我们可以把一棵树写死,但是更多的情况是,这棵树需要随时被改动,所以我们期望的是他能够被动态的构建. MVC,算是了解一点,那本文就把这棵树根据M-V-C给拆开分解吧. 下面就来看看这棵树是怎么构建的. Module [数据层] var tree = { "id": 0, "a1": { "id": 1, "name": "a1", "childr

  • 五步教你用Nginx部署Vue项目及解决动态路由刷新404问题

    目录 步骤一:改端口 步骤二: 打包 步骤三:将dist文件夹上传到服务器上 步骤四:修改nginx.conf(重中之重) 步骤五:重启nginx 总结 期末月前本来部署过一次,昨天部署的时候发现又给忘了,而且出了很多问题,在这统一汇总一下. 步骤一:改端口 在vue.config.js下的devServer把host改成服务器的地址 步骤二: 打包 用npm run build打包,最后是这样的,并且目录下多了个dist文件夹 步骤三:将dist文件夹上传到服务器上 我用的xshell,没办法

  • vue基于Element构建自定义树的示例代码

    说明 做项目的时候要使用到一个自定义的树形控件来构建表格树,在github上搜了一下没有搜索到合适的(好看的)可以直接用的,查看Element的组件说明时发现它的Tree控件可以使用render来自定义节点样式,于是基于它封装了一个可以增.删.改的树形组件,现在分享一下它的使用与实现. 控件演示 github上挂的gif可能会比较卡,有没有大佬知道还有哪里可以挂静态资源的,谢谢..! 控件使用 概要 基于element-ui树形控件的二次封装 提供编辑.删除节点的接口 提供一个next钩子,在业

  • 五步把DVD转成RMVB压缩影片

    第一步,用smartripper将DVD的vob文件拷贝到硬盘上 1,将DVD光碟放入光驱,然后启动smartripper,软件会自动分析ifo文件产生vob文件的参数.如正片有几个章节等 2,设置ripper参数. 1)首先设置输出位置,用默认的名字就可以.如此可以弹出start按钮. 设置图片sr0 2)在stream processing 栏内选上"Ennable Stream Processing"开始选择声道和字慕,声道选择如普通话声道,如果是多声道的(如含有5ch或者2ch

  • linux下用户程序同内核通信详解(netlink机制)

    简介 linux下用户程序同内核通信的方式一般有ioctl, proc文件系统,剩下一个就是Netlink套接字了. 这里先介绍下netlink. Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 netlink. Netlink 相对于系统调用,ioctl 以及 /proc 文件系统而言具有以下优点: 1,为了使用 netlink,用户仅需要在

  • Docker如何多步构建生成dubbo-admin镜像详解

    前言 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.关于注册中心.协议支持.服务监控等内容. Docker是支持多步构建的,对于需要编译源代码的那种构建,多步构建一方面可以获得更小的镜像,另外一方面也不

随机推荐