linux内核下载地址:https://www.kernel.org/

ubuntu下载内核对应源码:

sudo apt-get source linux-$(uname -r)    #此命令下载的源码存放在/usr/src/文件夹中

配置:

  内核编译时会根据内核目录下的.config文件进行编译,而进行内核配置时实际上就是修改.config文件.一般常见的硬件平台在内核目录arch/<平台>/configs/文件夹下会包含有默认的配置文件,可以使用cp命令将其覆盖内核根目录下的.config文件.

  在编译前都必须使用配置命令在内核根目录下进行一次配置(即使是使用默认的配置文件也必须这样做).而配置命令有以下几种:

# make ARCH=<平台> config           #比较繁琐,不推荐
# make ARCH=<平台> oldconfig #常用于内核升级,提示新内核特性
# make ARCH=<平台> menuconfig #常用
# make ARCH=<平台> xconfig #X界面的配置方式
# make ARCH=<平台> gconfig #GTK界面的配置方式
# make ARCH=<平台> defconfig #使用默认的配置
# make ARCH=<平台> allyesconfig #所有配置选项设置为yes
# make ARCH=<平台> allmodconfig #所有选项配置为module

  在配置时,每一项都有几种选项,分别为Y,N,M.

*    Y : 代表将此项编译入内核中
* N : 代表不将此项编译
* M : 代表将此项编译为模块,在需要使用到的时候再加载入内核

  也可以通过直接修改内核源代码目录中的.config进行配置,不过此种方法有点麻烦,之后再说.

小提示:为了防止内核编译之后配置文件丢失的情况,可以在内核配置时选择:

General setup  --->

     <*> Kernel .config support                                     

     [*]   Enable access to .config through /proc/config.gz    #将内核配置文件保存于文件系统的/proc/config.gz

当内核运行时则可以将/proc/config.gz文件复制出来,并且解压得到此内核的.config配置文件

zcat /proc/config.gz > .config      #解压命令

编译:

  首先,内核镜像分为很多种

vmlinux             编译后形成镜像文件
zImage(vmlinuz) 在vmlinux的基础上使用gzip进行压缩所形成的小内核(不超过512KB)
bzImage(vmlinuz) 全称为bigzImage,同zImage一样原理,只是比zImage镜像大
uImage(vmlinuz) 为uBoot专用镜像,在zImage基础上再加上一个头形成uImage

  以arm为目标板进行交叉编译内核常用的编译命令为:

# make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules   
//-j4 使用4个线程编译 ARCH=arm 目标为arm体系结构 CROSS_COMPILE 交叉编译器(我的为arm-linux-gnueabihf-) uImage 编译为uImage镜像 modules 同时也将配置中的模块进行编译

在编译过程中有时候会遇到一些错误,而这些错误只能够具体问题具体分析了。

  编译完成后将所有编译的modules和firmware放入指定文件夹中:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=XXX    
#此命令结束后会生成两个文件夹,fireware和modules,这两个文件夹之后应该放在lib目录下进行使用。

小提示:有些硬件不仅需要驱动,还需要所对应的firmware,而firmware是体系无关的文件(X86的也可以复制到arm下使用),需要下载其所对应的firmware放入到lib/firmware文件夹中。

  到此配置和编译算是完成了,只需把编译好的镜像文件及模块放对位置就行了。

其他内容

  vmlinux,vmlinuz(zImage,bzImage,uImage)关系

  vmlinuz是对vmlinux进行了相应压缩的内核镜像,而zImage,bzImage和uImage统称为vmlinuz。

  zImage实际上就是将vmlinux使用gzip进行压缩,并在压缩之后的镜像前加个头,头里包括一段gzip解压缩代码,用于启动时自解压。

  bzImage和zImage相同,不同的就是zImage会将内核解压到一个低端地址(内存中第一个640KB),而bzImage将内核解压到一个高端地址(大于1M)。

  而uImage是uBoot专用的镜像文件,它是在zImage的基础上使用mkimage工具生成,其结果是在zImage上加个0x40 bytes的头,其包括:内核版本,创建时间,类型等

      #uImage添加的头
Image Name: Linux 2.4.
Created: Mon Jun ::
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: Bytes = kB = MB
Load Address: 0xc0008000
Entry Point: 0xc0008000

linux笔记 - 配置与编译的更多相关文章

  1. Linux 内核配置和编译

    Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互 ...

  2. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  3. [国嵌攻略][099][Linux内核配置与编译]

    为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...

  4. linux内核配置与编译

    配置内核:配置硬件和软件需的部分. make config:基于文本模式的交互式配置.(一问一答) make menuconfig:基于文本模式菜单性配置.(直观简单高效) <*>会产生b ...

  5. ORB-SLAM2(1) Linux下配置和编译

    ORB-SLAM2 官网:https://github.com/raulmur/ORB_SLAM2 配置教程:http://blog.csdn.net/zzlyw/article/details/54 ...

  6. Linux下配置Objective-C编译环境

    Ubuntu环境下Objective-C编译环境配置参考这里. CentOS环境下Objective-C编译环境配置参考这里. 还在继续探索中.

  7. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  8. linux内核源代码、配置与编译

    内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...

  9. 【转载】Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置

    [转载]Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置 1. 系统与软件版本 1.1 系统版本 rhel6.4(Red Hat Enterprise Linux Server r ...

随机推荐

  1. python之操作系统介绍,进程的创建

    操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控 ...

  2. 安卓开发_浅谈ListView(自定义适配器)

    ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...

  3. weblogic系列漏洞整理 -- 1. weblogic安装

    目录 0. 概述 1. 下载安装Java环境 2. 下载安装weblogic 安装 部署domain域 进入weblogic 3. 排错 如果出现如下错误 0. 概述 WebLogic是美国Oracl ...

  4. 关于elk中filebeat定义好日志输出,但是redis里面却没有输出内容的问题

    这两天在搞elk的时候,filebeat中指定输出日志至Broker(此处Broker采用redis作为缓存),但是redis中却没有内容,所以就开始排查来 filebeat采用RPM安装的方式来的. ...

  5. 5.3Python函数(三)

    目录 目录 前言 (一)装饰器 ==1.简单的装饰器== ==2.修饰带参数函数的装饰器== ==3.修饰带返回值函数的装饰器== ==4.自身带参数的装饰器== (二)迭代器 (三)生成器 ==1. ...

  6. Spring boot + mybatis + orcale

    接着上次的实现, 添加 mybatis 查询 orcale 数据库 第一步: 新建几个必须的包, 结果如下 第二步: 在service包下新建personService.java 根据名字查perso ...

  7. asp.net core中使用HttpClient实现Post和Get的同步异步方法

     准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本  目录 1.HttpGet方法 2.HttpPost方法 3.使用示例 4. ...

  8. Treiber Stack介绍

    简介 Treiber Stack在 R. Kent Treiber在1986年的论文Systems Programming: Coping with Parallelism中首次出现.它是一种无锁并发 ...

  9. 装饰器 以及 django 中的应用

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权 ...

  10. python五十八课——正则表达式(切割)

    切割:split(regex,string):返回一个列表对象 import re str1='i love shenzhen so much' regex=r' +?' lt=re.split(re ...