前面说到要做linux底层开发或者编写Linux的驱动,必须建立内核源码树,之前我们提到过在本机上构建源码树—-Linux内核剖析(三),其建立的源码树是针对i686平台的,但是我么嵌入式系统用的是arm平台,这就需要我们为arm板交叉构建一份板子可用的内核源码树。

首先下载与你嵌入式系统平台版本号一致的linux内核,我的版本为2.6.35,当然如果你使用的是之前做好的板子,那么内核源码可能已经有了
我们解压缩我们的内核源码,并进入到内核源码的根目录

tar -jxvf linux-2.6.35.tar.bz2
cd linux-2.6.35

然后执行make mrproper 命令,该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。

因为我是为arm平台编译内核,需要用到交叉编译工具(可从ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain站点下载)。

清理垃圾文件(非必须)


Linux下面去编译项目之前,一般常会用make mrproper去先删除之前编译所生成的文件和配置文件,备份文件等,其中,mrproper和distclean,clean之间的区别,Linux内核源码根目录下面的makefile中,有很清晰的解释:

help:
@echo 'Cleaning targets:'
@echo ' clean - Remove most generated files but keep the config and'
@echo ' enough build support to build external modules'
@echo ' mrproper - Remove all generated files + config + various backup files' @echo ' distclean - mrproper + remove editor backup and patch files'

mrproper到底是什么意思呢?为什么起了个这么个看起来如此诡异的名字。

在英文wiki对Mr. Clean的解释提到了此点;

http://en.wikipedia.org/wiki/Mr._Clean

  "make mrproper" is a command in the Linux kernel build system, used to "clean up" all files from past builds and restore the build directory to its original clean state. The reason "make mrproper" is used instead of "make mrclean" is because Linus Torvalds, the father of Linux, was familiar with the name "Mr. Proper" as this is the brand widely known in Europe."

总的来说,就是:首先,我们要知道的是make mrproper想要做的事情是,清理旧的编译生成的文件及其他配置等文件,所以,相当于Clean,即我们在现实世界中用清洁剂去清洁卫生,清理旧的,不再需要的,脏东西。而现实世界中,保洁(P&G)公司的,有一个清洁产品方面的品牌,在美国叫做Mr.Clean,在欧洲叫做Mr.Proper,所以编译之前的清理旧东西的命令,原先是用的make mrclean,即make Mr.Clean。只是后来被Linux之父Linus Torvalds改成了make mrproper,即make Mr.Proper。所以,现在就变成了用make mrproper来清理之前的东西了。

看帮助可以发现删除的文件范围从小到大依次为:

make clean < make mrproper < make distclean

查看源码目录树的顶层目录下的Makefile求证, 可以发现, 执行make mrproper, 会先执行make clean, 执行make distclean之前, 会先执行make mrproper。

再回到make help的结果:

make clean      删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令
make distclean mrproper删除的文件, 加上编辑备份文件和一些补丁文件。

修改makefile


配置内核之前还要修改内核最上层目录下的Makefile(linux-2.6.35/Makefile)
把文件中的ARCH ?= $(SUBARCH) 改为 ARCH =arm
CROSS_COMPILE ?= 改为CROSS_COMPILE =arm-linux-

配置内核config


接着就是配置内核,可以使用下面命令中的一个:

make config(基于文本的最为传统的配置界面,不推荐使用)
make menuconfig(基于文本菜单的配置界面, 字符终端下推荐使用)
make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用,要求QT被安装)
make gconfig(要求GTK+被安装)
make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
make defconfig (使用源码中默认的config配置)

目的都是生成一个.config文件,

注意:使用make menuconfig 需要安装ncurses( sudo apt-get install ncurses-dev)

注意:如果要用make xconfig,则要先安装libqt3-compat-headers( sudo apt-get install libqt3-compat-headers)

其中,make xconfig的界面最为友好,如果你可以使用Xwindow,你就用这个好了,这个比较方便,也好设置。如果你不能使用Xwindow,那么就使用make

menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了。 选择相应的配置时,有三种选择,它们分别代表的含义如下:

一直以为make oldconfig的作用是将利用当前的.config覆盖defconfig,从而使下次运行make config/menuconfig时的缺省设置成为当前.config的设置,今天发现是个错误,需要澄清:

  1. 如果.config不存在,运行make config/menuconfig时的缺省设置由固化在各个Kconfig文件中各项目的缺省值决定。

  2. 如果.config存在,运行make config/menuconfig时的缺省设置即是当前.config的设置,若对设置进行了修改,.config将被更新。

  3. arch/arm/defconfig是一个缺省的配置文件,make defconfig时会根据这个文件生成当前的.config。

  4. arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。

  5. make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config。

配置内容可参考相关文献。

编译内核镜像


第三步:配置过内核之后,就可以进行编译了。执行以下命令中的一种:

make (生成一个压缩的内核影像)
make bzImage(生成一个使用gzip压缩的内核)

安装内核模块


执行make modules(编译在内核配置时选中的模块)在此过程中可能会遇到某些模块不能编译通过,把相应模块去除再执行make modules_install 安装内核

安装的内核在/lib/modules/2.6.35里。

至此,针对arm平台的内核树安装完成。

内核最上层的makefile在内核编译过程中起了决定性的作用,在编译过程中遇到的许多问题都可以在里面得到解决的思路,希望大家多看看。

Linux内核剖析(四)为arm内核构建源码树的更多相关文章

  1. Linux内核剖析(三)构建源码树

    linux源码树结构 参考 http://www.360doc.com/content/13/0410/17/7044580_277403053.shtml 目录 描述 arch 目录包括了所有和体系 ...

  2. Linux内核剖析(五)Linux内核的构建过程

    参考 一次实验引发的故事 – kernel build system探索—vmlinux是如何炼成的– kernel makefile 深度探索Linux操作系统:系统构建和原理解析.pdf 问题 在 ...

  3. linux内核剖析(零)linux系统启动过程详解-开机加电后发生了什么

    本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初 ...

  4. Linux 同步方法剖析--内核原子,自旋锁和相互排斥锁

    在学习 Linux® 的过程中,您或许接触过并发(concurrency).临界段(critical section)和锁定,可是怎样在内核中使用这些概念呢?本文讨论了 2.6 版内核中可用的锁定机制 ...

  5. linux系统启动过程具体解释-开机加电后发生了什么 --linux内核剖析(零)

    本文參考了例如以下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详细解释linux系统的启动过程 ...

  6. 【转帖】Linux的历史----Linux内核剖析(一)

    Linux的历史----Linux内核剖析(一) 2015年04月09日 10:51:09 JeanCheng 阅读数:11351更多 所属专栏: Linux内核剖析    版权声明:本文为博主原创文 ...

  7. Linux内核剖析 之 进程简单介绍

    1.概念 1.1  什么是进程?     进程是程序运行的一个实例.能够看作充分描写叙述程序已经运行到何种程度的数据结构的汇集.     从内核观点看.进程的目的就是担当分配系统资源(CPU时间,内存 ...

  8. [转帖]Linux内核剖析(一)Linux的历史

    Linux内核剖析(一)Linux的历史 https://www.cnblogs.com/alantu2018/p/8991158.html Unix操作系统 Unix的由来 汤普逊和里奇最早是在贝尔 ...

  9. (笔记)Linux内核学习(四)之系统调用

    一 用户空间和内核空间 Linux内核将这4G字节虚拟地址空间的空间分为两部分: l  将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”. l  ...

随机推荐

  1. 001.Kubernetes简介

    一 Kubernetes概述 Kubernetes是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker ...

  2. eclipse配置tomcat,让java web项目运行起来!

    做项目,搞开发.开发环境配置时第一步.只有环境搭好了,以后的事情才能顺利进行! 这不需求来了,负一屏项目有新功能需要添加,临时接手,要进行服务器前端开发.这个项目是以前后台java人员进行开发的.都是 ...

  3. Ubuntu12.04系统复制速度奇慢的原因猜想

    一开始到实验室,开始使用这些机器时候就是安装好的win+Ubuntu 12.04双系统,开始因为就自己用,而且文件传输并不是很多,复制的问题并没有凸显出来, 去年下半年开始,往服务器上传或下载大批量文 ...

  4. 治愈 JavaScript 疲态的学习计划【转载】

    来源:伯乐在线 - Rose Wang 像其他人一样,最近我读了 Jose Aguinaga 的文章 <How it feels to learn JavaScript in 2016>. ...

  5. BZOJ.3551.[ONTAK2010]Peaks加强版(Kruskal重构树 主席树)

    题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. 强制在线. \ ...

  6. CentOs中玩docker

    1.启动: systemctl start docker.service 2.停止: systemctl stop docker 3.从usts上拉取仓库 编辑文件 vi /etc/docker/da ...

  7. 读《31天学会CRM项目开发》记录2 - 企业信息管理系统

    在信息技术的快速推动下,企业如果依然利用传统的管理方式,以人为主,那效率便会大打折扣.在此背景下,企业信息化系统得 到了高速发展.如我们常见的ERP系统.MES系统,都是提高公司运行效率,降低运营以及 ...

  8. [P3957][NOIP2017]跳房子 (DP+二分/队列?)

    看到GREED_VI大佬在打这题 我这个蒟蒻偷偷看一眼洛谷上目前普及难度里最难的一题 题目还是能看懂的,不想道路游戏那题,我完全不知道题目是什么意思…… GREED_VI大佬第一次用的是二分的思想,于 ...

  9. 狡猾的商人 [HNOI2005] [一题双解]

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  10. yii2 Gridview网格小部件

    Gridview 网格小部件 一.特点: 1.是yii中功能最强大的小部件之一: 2.非常适合快速建立系统的管理后台. 3.用 dataProvider 键来指定数据的提供者 4.用 filterMo ...