本章导读
在上面入门视频第十期“搭建编译环境uboot_linux_Android”中,只介绍了输入Make命令就可以编译出内核手机linux操作系统,并没有介绍它是怎样运行的。
在向内核中添加驱动的时侯要完成3项工作,包括:
1)在Kconfig中添加新代码对应项目的编译条件,这一部份在实验3早已介绍过;
2)将驱动源码添加到对应的目录中,这一步比较好理解,在本章实验上将给你们演示一下;
3)在目录Makefile中文件中降低针对新代码的编译条目,这一部份将在本章节介绍到。
4.1.1工具
4.1.1.1硬件工具
1)PC机
4.1.1.2软件工具
1)虚拟机Vmware
2)Ubuntu12.04.2
4.1.2预备课程
入门视频“01-烧录、编译以及基础知识视频”
→“实验10-搭建编译环境uboot_linux_Android”或者使用指南“五Android开
发环境搭建以及编译”;
实验三Menuconfig_Kconfig
4.1.3视频资源
本节配套视频为“视频04_Makefile编译”
4.2学习目标
本章须要学习以下内容:
把握Linux内核编译命令
把握编译器路径设置的方式
理解环境变量路径、编译器、源码Makefile文件中编译器路径两者之间的关系
理解Makefile文件结构
把握向Makefile文件中添加脚本命令的方式,才能读懂Makefile脚本
4.3编译器路径的设置
在上面入门知识中,只介绍了在哪些目录解压编译器,在环境变量文件中添加路径,就可以编译出内核,并没有介绍她们之间是怎样对应的。
如右图所示,根据上面提供的基础教程,配置好Ubuntu中的编译器和库文件,输入命令“#make”,就可以编译生成内核的二补码镜像。
如右图所示,使用命令“#cd”,使用命令“#vim.bashrc”打开环境变量文件“.bashrc”。
如右图所示,步入最底行,可以见到,在环境变量文件中编译器路径设置为“exportPATH=$PATH:/usr/local/arm/arm-2009q3/bin”。
之后使用命令“#cd/usr/local/arm/”,步入解压编译器“arm-2009q3.tar.bz2”的文件目录。
可以显著的看见,环境变量中设置的路径和解压的路径是对应的。
这儿回到内核源码的目录,如右图所示。
如右图所示,使用命令“#vimMakefile”打开内核目录下的Makefile文件。
这儿通过vim编辑器查找参数“CROSS_COMPILE”,如右图所示。
可以查到参数“CROSS_COMPILE”,如右图所示。
如上图所示,可以看见这个参数是“/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-”。
再看一下参数“CROSS_COMPILE”的下一行,可以看出这儿有更改过的痕迹。很容易推论出,原先三星是用的“4.5.1”版本的编译器,不过这个没关系linux中makefile文件,只要能编译通过就可以了。
通常说来,领到源码以后的第一步,是要先要先将源码编译通过。
设置上图中的变量“CROSS_COMPILE”以及环境变量还有编译器实际解压路径二者对应。这两者对应以后,才能确保执行Make命令以后,系统就能找到这个编译器。
在编译命令执行的过程中,会提示一些错误,之后按照提示的错误,逐个去排查更改,去添加库文件或则更改库文件。这个过程有长有短,考验的只是耐心,并没有太多方法。因为早已将缺乏的库文件写成脚本,这样你们在编译器执行以下脚本就才能编译通过。
针对内核目录下的Makefile文件linux中makefile文件,提醒你们一下,这个文件中内容好多,不仅里面编译器路径变量以外的其它部份几乎不用关注。
另外还有一个地方须要了解一下,如右图所示,在该文件的第一行,可以看见内核的版本。
4.4Make内核编译命令执行过程简介
如右图所示,编译内核须要执行make命令,在执行make命令以后,并没有介绍它是怎样执行的。
在make命令执行以后,它会首先找到当前目录下的“Makefile”文件,如右图所示。
运行Makefile文件以后,它会在Makefile文件中找到编译器的路径“/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-”如右图所示。
之后系统依据环境变量找到“exportPATH=$PATH:/usr/local/arm/arm-2009q3/bin”编译器的路径linux驱动下载,如右图所示。
如右图所示,使用命令“ls/usr/local/arm/arm-2009q3/bin/”可以查看到arm20092009qq3解压以后有什么具体编译器。
如上图,系统找到编译器以后,同时基础的库文件也是和编译器在一起的,有时侯编译一个新的内核,还有可能须要更改库文件。
编译执行前还须要找到“.config”文件,默认是置于源码目录下的。使用命令“ls-a”就可以见到,如右图所示。
从本章‘实验03’的3.5小节,学习到这个“.config”是通过menuconfig工具生成的,上面只是一些宏定义,如右图所示,打开这个文件。
查找宏定义”LEDS,”是编译led驱动的宏定义“LEDS_CTL”,如右图所示。
如今系统找到这个宏定义“LEDS_CTL”,在编译具体中间文件的时侯会用到。
具体是如何实现的,继续看下一小节的内容就可以厘清楚这个宏定义有哪些好处。