一. 准备环境

编译内核之前有一些基本的条件:

  • 有一台可以联网的机器(或者虚拟机)
  • 安装有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内核编译体验篇(一)的更多相关文章

  1. Lab1:Linux内核编译及添加系统调用(详细版)

    实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...

  2. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  3. linux内核编译环境配置

    linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...

  4. Linux内核编译与安装

    2013-04-16    Linux内核介绍  Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...

  5. Linux内核编译、安装流程

    原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...

  6. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  7. Linux 内核 编译模块

    背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...

  8. Linux内核编译配置脚本

    环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...

  9. linux内核编译步骤

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  10. 最全最详细:ubuntu16.04下linux内核编译以及设备驱动程序的编写(针对新手而写)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

随机推荐

  1. OI 数论中的上界估计与时间复杂度证明

    预备 0.1 渐进符号 其实不少高等数学 / 数学分析教材在讲解无穷小的比较时已经相当严谨地介绍过大 O.小 O 记号,然而各种历史习惯记法的符号滥用(abuse of notation)[1] 直到 ...

  2. Typora用法:

    Typora用法: 一:标题 模板: #+空格+标题名+回车 一级标题 二级标题 三级标题 四级标题 五级标题 二:字体 加粗 斜体 斜体加粗 删除线(esc键下面的那个键) 上标:我是上标 下表:我 ...

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

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

  4. ClickHouse主键索引最佳实践

    在本文中,我们将深入研究ClickHouse索引.我们将对此进行详细说明和讨论: ClickHouse的索引与传统的关系数据库有何不同 ClickHouse是怎样构建和使用主键稀疏索引的 ClickH ...

  5. C# 反射 判断类型是否是列表

    1 /// <summary> 2 /// 判断类型是否为可操作的列表类型 3 /// </summary> 4 /// <param name="type&q ...

  6. 在C#中使用SQLite数据库

    轻量级桌面程序数据库不太适合用SQLServer.MySQL之类的重量级数据库,嵌入式数据库更好.在对比Access.SQLite.Firebird数据库后发现SQLite较另外两个有较多优点. 环境 ...

  7. MySQL(Zip版)安装配置

    MySQL官网下载地址:MySQL 将压缩包内文件夹解压至任意目录,以mysql-5.7.40版本为例 第一步 添加环境变量 将mysql-5.7.40-winx64文件夹内的bin文件夹添加到环境变 ...

  8. Oracle之table()函数的使用,提高查询效率

    目录 一.序言 二.table()函数使用步骤 三.table() 具体使用实例 3.1 table()结合数组 使用 3.2 table()结合PIPELINED函数(这次报表使用的方式) 3.3 ...

  9. 2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益就是累加和 = 3 + 1 + 4 +

    2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益就是累加和 = 3 + 1 + 4 + ...

  10. Apache Arrow DataFusion原理与架构

    本篇主要介绍了一种使用Rust语言编写的查询引擎--DataFusion,其使用了基于Arrow格式的内存模型,结合Rust语言本身的优势,达成了非常优秀的性能指标 DataFusion是一个查询引擎 ...