一. 准备环境

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

  • 有一台可以联网的机器(或者虚拟机)
  • 安装有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. Fatal error: Uncaught SoapFault exception:解决办法

    SOAP-ERROR: Parsing WSDL: failed to load external entity Fatal error: Uncaught SoapFault exception: ...

  2. CSS页面布局方式

    css页面布局方式 1.标准流 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  3. Java 的 SPI 机制

    什么是SPI机制? SPI机制( Service Provider Interface)是Java的一种服务发现机制,为了方便应用扩展.那什么是服务发现机制?简单来说,就是你定义了一个接口,但是不提供 ...

  4. Android刷机日记

    0x01 工具准备(镜像之类的注意下载的版本要与手机一致) 1)SDK工具 https://developer.android.com/studio/releases/platform-tools?h ...

  5. springCloud Alibaba服务的注册与发现之eureka搭建

    1.创建eureka微服务模块.导入maven依赖. <dependency> <groupId>org.springframework.cloud</groupId&g ...

  6. [人脸活体检测] 论文:Face De-Spoofing: Anti-Spoofing via Noise Modeling

    Face De-Spoofing: Anti-Spoofing via Noise Modeling 论文简介 将非活体人脸图看成是加了噪声后失真的x,用残差的思路检测该噪声从而完成分类. 文章引用量 ...

  7. ArcGIS Desktop发布地形高程服务(DEM/DSM)

    在做ArcGIS三维时,地形服务的发布与普通地图服务的发布不一样,需要发布成ImageServer,切片格式选择LERC. 本文示例使用软件: ArcGIS Desktop10.3.1 注:ArcGI ...

  8. Python-解三元一次方程

    需要解的方程组为: x + y + z = 26 x - y = 1 2x - y + z = 18 下面进入代码实现: 1.导入数学计算库 numpy import numpy as np 2.生成 ...

  9. 我的web系统设计规范

    以下是我自己在工作中总结的,仅供参考. ·应对所有用户输入进行trim()去除两头空格,若是需要空格的应用 转义代替,不应在js里trim(),而应该在数据库端或后端控制,且只在一处拦截控制,更改策略 ...

  10. pandas 常用操作记录

    apply函数 一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作. 函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数. 作用: 用 ...