【Linux内核】内核源码编译
Linux内核源码编译过程
总体流程:
- 下载Linux内核源码文件
- 安装所需工具
- 解压源码文件并配置
- make编译源码
- 下载busybox
- 配置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内核】内核源码编译的更多相关文章
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- Linux环境PostgreSQL源码编译安装
Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...
- Linux学习日记——源码编译Apache
[本文为笔者在学习Linux 下的软件安装时,尝试使用源码安装Apache 的过程,事后进行一个小小的总结,发现错误望指正.] 一.典型的源码编译安装软件的过程包括以下3步: 1) 运行 config ...
- linux http服务源码编译安装详解
相信大家大多都听过linux 的编译安装,但它到底是怎么把源代码变为自己电脑里可以应用的软件哪?今天,小编就以httpd 为例详细讲解一下. 什么是编译安装——编译:将源代码变为机器可执行的代码文件. ...
- 在Linux下用源码编译安装apache2
Linux下安装一个软件,最好去看下它的官方guide,apache2.4的安装安装guide 0. installation guide http://httpd.apache.org/docs/2 ...
- linux下JUCE源码编译依赖库
JUCE 源码https://github.com/julianstorer/JUCE 想在ubuntu下编译需要提前安装以下依赖库 sudo apt-get install mesa-common- ...
- linux下如何源码编译安装vim
1. 获取源码 git clone https://github.com/vim/vim.git ~/vim cd ~/vim 2. 配置 ./configure --prefix=/home/jel ...
- Linux 安装node.js ---- 源码编译的方式
一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...
- Linux下源码编译安装rpy2
R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...
- 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 ...
随机推荐
- API获取商品评论?
前言 小伙伴们好,前两天因为个人原因耽误了内容的更新,在这里和所有的小伙伴道个歉,今天CC和大家唠唠商品评论的这个话题,大家在网上购物的决策会因为<商品评论的好坏>吗,相信绝大的一部分的小 ...
- SpringBoot线程池和Java线程池的实现原理
使用默认的线程池 方式一:通过@Async注解调用 public class AsyncTest { @Async public void async(String name) throws Inte ...
- pandas小技巧
1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...
- LINUX 下LAMP之yum方法部署环境
一. 系统组成 系统由前台网站和后台保种服务两部分组成,其中后台保种可以扩展成多台设备,提高保种的资源量以及性能.下面安装以houtaiip代表后台保重服务器ip地址,qiantaiip代表前台网站i ...
- RDIF.vNext全新低代码快速开发框架平台发布
1.平台介绍 RDIF.vNext,全新低代码快速开发集成框架平台,给用户和开发者最佳的.Net框架平台方案,为企业快速构建跨平台.企业级的应用提供强大支持. RDIF.vNext的前身是RDIFra ...
- Sql批量替换字段字符,Sql批量替换多字段字符,Sql替换字符
update phome_ecms_news_check set filename= replace(filename,'Under4-',''); update phome_ecms_news_ch ...
- DyLoRA:使用动态无搜索低秩适应的预训练模型的参数有效微调
又一个针对LoRA的改进方法: DyLoRA: Parameter-Efficient Tuning of Pretrained Models using Dynamic Search-Free Lo ...
- LeetCode 周赛 342(2023/04/23)容斥原理、计数排序、滑动窗口、子数组 GCB
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 前天刚举办 2023 年力扣杯个人 SOLO 赛,昨天周赛就出了一场 Easy - Ea ...
- 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
/** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...
- .Net8的快速JIT,分层编译,R2R的设置
前言 本篇通过一些简单的JIT设置,比如快速JIT,适用于循环的快速 JIT,分层编译,R2R等核心内容设置,快速进入.Net8核心区域. 概括 1.快速JIT 什么是快速JIT,顾名思义,被Rosy ...