linux内核编译体验篇(一)
文章目录
一. 准备环境
编译内核之前有一些基本的条件:
- 有一台可以联网的机器(或者虚拟机)
- 安装有linux系统(作者安装的查看linux内核版本号如下)

- 学习一些基本的命令操作
除此之外对linux系统还要求一些软件包的安装(可能不全,在编译过程中遇到提示可以度娘或者使用google搜索是缺了哪个包,基本上你能遇到的坑前面的人都有踩过)。
二. 获取内核源码
官网链接:https://www.kernel.org/
Linux2.6所有内核下载地址:Linux2.6所有内核下载地址
Git下载安装及设置详细教程链接:Git下载安装及设置详细教程
| 下载方式 | 链接地址 |
|---|---|
| HTTP | https://www.kernel.org/pub/ |
| GIT | https://git.kernel.org/ |
三. 交叉编译工具链的配置
1. 博友们常用安装方法链接
Ubuntu 16.04[64bit]嵌入式交叉编译环境arm-linux-gcc搭建过程图解
Ubuntu 18.04安装arm-linux-gcc交叉编译器(超简单,附安装包下载地址)
2. 公司常用的交叉工具链使用方法
一般在公司工作,一个团队都是共用一个服务器,如果每个人为了配置自己的工具链都去更改服务器的配置和系统环境变量。无疑将会影响别人的使用。一个典型的例子就是现在很多内核都是使用64位的交叉编译工具链,而用户态是使用32位的交叉编译工具链。这时开发人员通常采用的方法是 大家都把工具链放在服务器的一个指定目录下(如新建一个目录tools_chain),在顶层Makefile或者调用顶层Makefile的脚本中传入 CROSS_COMPILE 的全路径。这样也不会因为要使用不同工具链都要重新安装一遍。我的虚拟机工具链配置如下:
CROSS_COMPILE = /home/hh/tools_chain/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-
四. 内核解压以及如何打补丁
可以参考以下网址或者百度,我在这里就不再赘述(作者使用的是较老的内核2.6.38无补丁,目前官网提供有比较新的内核,都有对应的补丁)
内核源码解压.打补丁以及配置.编译方法
五. 内核基本配置
和大部分开源软件类似,linux kernel也是要配置之后才能够编译的。主要提到常用的两种配置方法,如下:
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
目的都是生成一个.config文件,推荐使用make menuconfig方式,毕竟是界面交互比文字交互好用很多。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
1. 编译前的配置
编译之前,在linux-2.6.38\arch\arm\configs目录下找到对应开发板的(或者与之相似的配置文件,或者厂商提供好的配置文件)。作者使用的是tiny-mini6410,因此找最相似的s3c6400_defconfig或者厂商提供的config_linux_mini6410文件,放到linux-2.6.38源码最外层目录,并更名为.config
cd linux-2.6.38
make menuconfig
执行完,你可以看到如下的配置界面。

知道我喜欢用这个了的原因了吧,因为好用啊。
温馨提示:
在执行make menuconfig的时候,可能会遇到一些提示说某些包没有安装导致执行失败。大家不要慌,究其原因是因为配置的过程实际上是内核先编译了一个用户态的配置工具,这个过程就需要依赖的软件包有: make, gcc, ld 和图形库libncurse-dev。不用紧张,按照提示或者自习度娘,缺什么软件就安装什么软件就好了。
比如:作者在编译这个内核的时候出现了如下编译错误:

度娘得到的解决方式:
sudo apt-get install ncurses-dev

再次执行make menuconfig命令,执行完,你可以看到上述的配置界面。
2. uImage的编译命令
编译命令如下:
hh@ubuntu:~/linux-2.6.38$ sudo make uImage
附注:
基于ARMV8架构的cortex-A53开发板在选型中,等到手后,会继续更新 较新版本内核的编译方式。
linux内核编译体验篇(一)的更多相关文章
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- Linux内核编译、安装流程
原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...
- Linux内核编译完整过程
Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...
- Linux 内核 编译模块
背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...
- Linux内核编译配置脚本
环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...
- linux内核编译步骤
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 最全最详细:ubuntu16.04下linux内核编译以及设备驱动程序的编写(针对新手而写)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
随机推荐
- 10分钟极速入门dash应用开发
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,几天前我发布了由我开源维护的dash通用网页组件库fac的0 ...
- 关于 OAuth 你又了解哪些?
作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者. OAuth 的背景 OAuth,O 是 Open,Au ...
- 如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
方法一.通过电脑连接苹果手机后查询 1.在电脑上下载并安装爱思助手,安装完成后将电脑和苹果手机使用苹果数据线连接起来: 编辑切换为居中 添加图片注释,不超过 140 字(可选) 然后启动爱思助 ...
- A-O-P 一篇概览
一.什么是AOP? AOP 即 Aspect-oriented Programming,Aspect 切面,什么是切面,就是一条大路上的收费站,检查站,首先它是一个统一的功能单元,或是收费.或是检查, ...
- .NET周报 【5月第1期 2023-05-06】
国内文章 聊一聊 Valgrind 监视非托管内存泄露和崩溃 https://www.cnblogs.com/huangxincheng/p/17374315.html. 只要是程序总会出现各种莫名其 ...
- Windows的Mysql5.7社区版的安装详细操作,从无到有,安装配置一条龙服务。(压缩包自行安装,非installer安装)
换了一个电脑,所有软件.环境都得重新来安装一次,安装到Mysql的时候,发现网上有两种安装方式,一种是Mysql的压缩包安装方式,这种方式直接到官网下载Mysql的压缩包,解压之后做些配置就可以了,另 ...
- 2020-08-19:TCP是通过什么机制保障可靠性的?
福哥答案2020-08-19: 福哥口诀法:校(jiao)序确重拥流连(tcp可靠性保障机制:校验.序号.确认.重传.拥塞.流量.连接)校验:数据是否正确.序号:对数据编号seq.确认:ACK.重传: ...
- 2022-05-30:给定一个n*2的二维数组,表示有n个任务。 一个信息是任务能够开始做的时间,另一个信息是任务的结束期限,后者一定大于前者,且数值上都是正数, 你作为单线程的人,不能并行处理任务,
2022-05-30:给定一个n*2的二维数组,表示有n个任务. 一个信息是任务能够开始做的时间,另一个信息是任务的结束期限,后者一定大于前者,且数值上都是正数, 你作为单线程的人,不能并行处理任务, ...
- Structured Streaming 的异常处理 【Concurrent update to the log. Multiple streaming jobs detected】
目录 异常信息 一.异常表象原因 1.异常源码: 2.打个断点 二.解决方案 1.可以通过代码指定各分区的开始offset 2.不删除而是更改checkpoint offset下的批次文件 三.异常背 ...
- kafka生产者你不得不知的那些事儿
前言 kafka生产者作为消息发送中很重要的一环,这里面可是大有文章,你知道生产者消息发送的流程吗?知道消息是如何发往哪个分区的吗?如何保证生产者消息的可靠性吗?如何保证消息发送的顺序吗?如果对于这些 ...