专栏首页三木的博客内核源码编译

内核源码编译

编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用make对其编译前,要做一件事——配置。kconfig和make就好比将军和士兵。kconfig是指导方向的,make是干活的。kconfig对内核进行配置,告诉make,哪些功能需要编译进内核,哪些功能要作为模块编译,make便根据配置文件来进行编译。

###编译步骤

  • 获取内核源码(这几天kernel.org被黑了,该步骤方法暂时用不了):

1、使用git工具:

ubuntu下安装git:

sudo apt-get install git

使用git检出Linus分支的版本:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.t.git

检出之后便可以通过下列命令进行升级:

git pull

使用上述两个命令便可以获得内核源码的最新版本。

2、直接从kernel.org上下载源码包:

源码包有两种格式:

linux-x.y.z.tar.bz2和linux-x.y.z.tar.gz

bz2结尾的压缩包使用的是bzip2压缩格式,而gz结尾的压缩包使用的是gzip压缩格式。你可以任选一种,只是解压所用的命令不同罢了。一般来说,使用的是bz2格式,因为它具有较好的压缩效率。解压命令对应如下:

bz2:

tar xjvf linux-x.y.z.tar.bz2

gz:

tar xzvf linux-x.y.z.tar.gz

  • 配置内核

配置内核的工具有下面几种:

  • make menuconfig : 终端图形界面,依赖于ncurses库
  • make config : 纯文本界面
  • make xconfig : X-window界面
  • make gconfig : 和xconfig类似,不过依赖于GTK库
  • make allyesconfig :编译内核尽可能多的功能
  • make allmodconfig :尽可能多地编译成内核模块配置的结果是产生.config文件
  • make oldconfig :如果你有.config文件,你就可以使用。和make config类似,但只询问新特性的配置
  • make defconfg :按照默认的配置文件arch/i386/defconfig进行配置。可再使用make menuconfig进行配置

我一般使用的是make menuconfig,因为它是比较折中的方案。使用make menuconfig前要安装ncurses库:

sudo apt-get install libncurses5-dev

安装完成后在源码目录下执行命令:

make menuconfig

根据需要,进行适当的配置后,便可进行编译操作了。

  • 编译

生成.config命令后在源码目录下执行:

make bzimage -j8

完成后会在arch/i386/boot/下生成bzimage压缩镜像。

  • 安装

make module_install:将编译生成的内核模块复制到/lib/modules/<kernel-version>目录中去。

make install:复制内核镜像到/boot目录中并重命名为vmlinuz-x.y.z;生成initrd-<kernel-version>.img;配置引导文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Make

    ###一、make的功能: make是一个用来维护程序模块关系和生产可执行文件的工具,他可以根据程序修改的情况重新编译链接生成的中间代码或最终的可执行文件。执行...

    用户1214695
  • 使用jQuery Validation插件来验证表单

    jQuery Validation是一个用于验证表单的jQuery插件,简单易用,已经包含了16种内置的验证规则.Github上也有更多的验证规则可以使用.这都...

    用户1214695
  • Kobject浅析

    面向对象的思想的确在应用软件的开发中颇具优势,它让一个个纯逻辑的函数和数据变成了一个个有生命的个体。鉴于性能的考虑,系统软件的实现(例如linux kernel...

    用户1214695
  • 源码安装

    JNingWei
  • ubuntu source 点命令的作用

    source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

    bear_fish
  • Redis安装问题解决方案

    分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。 而且libc 并不是默认的 分配器, 默认的是 je...

    彼岸舞
  • windows编译linux内核

    清华镜像:https://mirrors.tuna.tsinghua.edu.cn/

    sofu456
  • Make 快速入门

    make 是 linux 系统的实用程序。它用于管理对于大型程序的自动编译任务,自动决定程序某一部分需要重新编译,并发出编译指令。虽然,我们最常见于 C 语言程...

    我是一条小青蛇
  • 芯片设计中的Makefile简明教程

    Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。

    ExASIC
  • LoRaServer 笔记 1.3 源码编译

    另外整个编译过程绝对还是会出现包被墙的情况,9102年了,GO 1.11 有个 moudule 可以很方便的处理这些情况。大家可以处理下 go.mod 的文件,...

    twowinter

扫码关注云+社区

领取腾讯云代金券