Linux内核源码编译过程

总体流程:

  1. 下载Linux内核源码文件
  2. 安装所需工具
  3. 解压源码文件并配置
  4. make编译源码
  5. 下载busybox
  6. 配置busybox并编译

1. Linux源码编译

https://mirrors.edge.kernel.org/pub/linux/kernel/

作者选择的版本是:4.9.229

https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.229.tar.xz

下载到本地,解压,然后进入linux-4.9.229目录:

tar -zxvf linux-4.9.229.tar.gz
cd linux-4.9.229

1.指定硬件体系架构。

为了减少安装编译器的过程,我在本例中使用的是x86,因为我的开发环境就是x86。如果你要编译arm的内核,则指定ARCH=arm且需要安装交叉编译器。

export ARCH=x86

2.配置board config,此处配置为 x86_64_defconfig。

这一步相当于为内核配置一个菜单,告知内核我们需要点什么菜,需要的功能是什么。

下一步编译系统根据这个菜单来为我们编译内核。

make  x86_64_defconfig

3.安装工具

作者的开发环境是CentOS7,未安装工具时,直接执行

make menuconfig

命令会报错

因此需要安装以下工具:

yum install ncurses ncurses-devel
yum install openssl-devel
yum install elfutils-libelf-devel
yum install flex
yum install bison

3.配置内核

linux-4.9.229目录下,输入

make menuconfig

进入如下界面:

如果启动报错,尝试将页面最大化,并将终端这个窗口拉得尽量大

这一步其实是对第2步的菜单进行微调,我们需要内核支持ramdisk驱动,所以需要选中如下配置:

General setup  --->
----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support Device Drivers ---> [*] Block devices ---> <*> RAM block device support (65536) Default RAM disk size (kbytes)

按方向键选择选项,空格键选中或取消选项

4.编译内核

这一步可能需要较长时间

make

编译成功后的内核位于:arch/x86_64/boot/bzImage

2. BusyBox源码编译

下载busybox源码

下载地址:https://busybox.net/downloads/

此处使用的版本为busybox-1.30.0

下载后解压busybox源码

tar xvf busybox-1.30.0.tar.bz2

1.配置buysbox源码

此处将busybox配置为静态编译,这样busybox运行时无需额外的动态链接库。

make menuconfig
Busybox Settings  --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)

2.安装c语言静态库

未安装c语言静态库时,编译报错如下,安装c语言静态库后编译成功:

/usr/bin/ld: cannot find -lcrypt
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lresolv
collect2: error: ld returned 1 exit status

安装静态库:

yum install glibc-static

3.编译并安装

make && make install

到此Linux内核源码编译完成

【Linux内核】内核源码编译的更多相关文章

  1. Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令

    Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...

  2. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...

  3. Linux学习日记——源码编译Apache

    [本文为笔者在学习Linux 下的软件安装时,尝试使用源码安装Apache 的过程,事后进行一个小小的总结,发现错误望指正.] 一.典型的源码编译安装软件的过程包括以下3步: 1) 运行 config ...

  4. linux http服务源码编译安装详解

    相信大家大多都听过linux 的编译安装,但它到底是怎么把源代码变为自己电脑里可以应用的软件哪?今天,小编就以httpd 为例详细讲解一下. 什么是编译安装——编译:将源代码变为机器可执行的代码文件. ...

  5. 在Linux下用源码编译安装apache2

    Linux下安装一个软件,最好去看下它的官方guide,apache2.4的安装安装guide 0. installation guide http://httpd.apache.org/docs/2 ...

  6. linux下JUCE源码编译依赖库

    JUCE 源码https://github.com/julianstorer/JUCE 想在ubuntu下编译需要提前安装以下依赖库 sudo apt-get install mesa-common- ...

  7. linux下如何源码编译安装vim

    1. 获取源码 git clone https://github.com/vim/vim.git ~/vim cd ~/vim 2. 配置 ./configure --prefix=/home/jel ...

  8. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

  9. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

  10. Linux 源码编译Python 3.6

    Linux 源码编译Python 3.6 1.操作系统以及版本显示 # uname -sr Linux 3.10.0-514.el7.x86_64 # uname -sr Linux 3.10.0-5 ...

随机推荐

  1. 地图:leaflet基本使用

    leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档:https://leafletjs.cn/reference.html 官网(英文):https://icli ...

  2. oracle问题ORA-00600[729][space leak]

    故障现象 ORA-00600: 内部错误代码, 参数: [729], [33600], [space leak], [], [], [], [], [], [], [], [], [] 故障分析 根据 ...

  3. [Web Server]Tomcat调优之工作原理、线程池/连接池

    1 Tomcat 概述 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛. 1.0 Tomcat 容器与原理 1.0.1 Tomcat组件构成 注意,如图所示,阴影部 ...

  4. [Linux]常用命令之【which/whereis/whatis】

    1 which shows the full path of (shell) commands. 显示(系统)命令所在目录 [root@test ~]# which ls alias ls='ls - ...

  5. 【Diary】CSP-S2 2021 游记 & NOIP 备赛发疯日记

    Day 0 两个极端的回跳. .....不行啊. 我快输不起了........... ------------------------------- 早上被生物钟强行唤醒,逼自己懒床到6:40. 弹琴 ...

  6. xtrabackup8.0.27备份失败

    问题描述:mysql8.0.27备份出现中断,重新备份发现xtrabackup备份失败,xtrabackup与mysql版本不匹配,后来想起来时mysql进行了升级,8.0.27->8.0.29 ...

  7. 【python爬虫】爬取美女图片

    一,导入包文件 os:用于文件操作.这里是为了创建保存图片的目录 re:正则表达式模块.代码中包含了数据处理,因此需要导入该模块 request:请求模块.通过该模块向对方服务器发送请求获取数据包 l ...

  8. 解决CKEditor中img标签自动添加style样式的问题-禁止自动设置width和height 帝国cms编辑器图片自动加宽高

    在使用CKEditor的过程中发现,每次上传或添加图片的时候,总会自动给img标签添加width和height的style内联样式.由于网站本身对图片有进行自适应处理(添加了自适应的CSS),所以im ...

  9. vue项目PC端如何适配不同分辨率屏幕

    配置前言 项目构建:基于vue-cli3构建,使用postcss-px2rem px2rem-loader插件进行rem适配实现原理:每次打包,webpack通过使用插件postcss-px2rem, ...

  10. Django笔记三十四之分页操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十四之分页操作 这一篇笔记介绍一下如何在 Django 使用分页. Django 自带一个分页的模块: from django.core ...