ARM9嵌入式Linux开发-嵌入式Linux开发环境构建

目录

1、嵌入式Linux开发简介

1.1嵌入式系统

1.2嵌入式操作系统简介

1.2.1嵌入式操作系统的发展

1.2.2几种代表性嵌入式操作系统

1.3嵌入式Linux简介

2、搭建嵌入式Linux开发环境

2.1基本概念

主机系统和目标系统

交叉编译

2.2软件安装及使用

3、基本的Makefile语法

3.1最基本的Makefile文件

3.2MakeFile简介

3.3Makefile规则


1、嵌入式Linux开发简介

1.1嵌入式系统

嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。嵌入式系统一般由以下几部分组成:嵌入式微处理器、外围硬件设备、嵌入式操作系统和特定的应用程序。    

近年来掀起了嵌入式系统应用热潮。  

      从上面的定义,可以看出嵌入式系统的几个重要特征:

  1. 系统内核小。
  2. 专用性强。
  3. 系统精简。
  4. 高实时性的系统软件(OS)是嵌入式软件的基本要求。
  5. 嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。
  6. 嵌入式系统开发需要开发工具和环境。  

1.2嵌入式操作系统简介

EOS是相对于一般操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点:

  • 可装卸性。
  • 强实时性。
  • 统一的接口。
  • 操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用
  • 提供强大的网络功能,
  • 强稳定性,弱交互性。
  • 固化代码。
  • 更好的硬件适应性,也就是良好的移植性。

1.2.1嵌入式操作系统的发展

嵌入式操作系统伴随着嵌入式系统的发展经历了四个比较明显的阶段

第一阶段:无操作系统的嵌入算法阶段

第二阶段:以嵌人式CPU为基础、简单操作系统为核心的嵌入式系统

第三阶段:通用的嵌人式实时操作系统阶段

第四阶段:以基于Intemet为标志的嵌入式系统

1.2.2几种代表性嵌入式操作系统

常见的嵌入式系统有:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive。

1.3嵌入式Linux简介

伴随着Linux的快速成长,嵌入Linux在近两年也发展迅速,与传统商业性操作系统象Vxworks、Psos等相比,嵌入Linux没有昂贵的版权费,而且完全开放源代码,在Internet上有着丰富的开发资源,支持众多CPU架构象PPC、COLDFIRE、ARM、X86、MIPS,这些有点吸引了众多的商家投入Linux的怀抱。          

与Vxworks等典型嵌入操作系统相比,实时性是Linux的弱项,因此一些公司对Linux进行了二次包装,以提高嵌入linux的实时性,比较优秀的嵌入Linux有Montavista公司的Hardhat Linux,还有RTLinux、Bluecat Linux等。  

嵌入Linux的移植开发是一项很有趣的工作,在开发的过程中会感受到Linux强大的吸引力。          

嵌入linux开发我们暂且把它分为四个大部分:硬件系统、bootloader、linux kernel和应用程序,它们的关系如下图: 

ARM9嵌入式Linux开发-嵌入式Linux开发环境构建_第1张图片

按照这个图来说,我们的开发包括以下一些步骤 设计自己的硬件系统 编写BootLoader 裁减自己的linux内核 开发应用程序

2、搭建嵌入式Linux开发环境

2.1基本概念

主机系统和目标系统

主机系统就是我们一般用的计算机或者工作站,用来编写和编译代码;目标系统就是嵌入开发系统中的硬件板。在主机开发好的目标执行代码通过网络接口、USB或者串口烧写到目标系统中的永久记忆体(通常是flash),目标系统执行这些代码。模型如下图所示:

ARM9嵌入式Linux开发-嵌入式Linux开发环境构建_第2张图片

主机系统的要求:

一般的PC都可以进行嵌入式Linux开发,两个必要的条件是:9针RS-232串口和网络接口。其实串口不一定需要,如果没有串口,可以使用USB——串口转换器。

目标系统的要求: 目标系统就是我们的开发板。该系列文档适用于S3C2440开发板。市场上的S3C2440开发板的原理图、硬件配置等基本相同,在细节上可能存在一些差异,理解了代码后稍作修改即可。         

交叉编译

伴随着以计算机技术、通讯技术为主的信息技术的飞速发展和互联网的广泛应用,3C(Computer、Communication、ConsumerElectronic)合一将成为必然趋势。信息家电,手持设备,移动设备等嵌入式产品的迅速发展,使得嵌入式软件开发再度成为一个研究热点。 由于嵌入式设备的性能局限,往往不能通过本机编译得到所需软件的可执行程序。因此,以Linux为主机操作系统,搭配一个交叉编译系统,为嵌入式设备生成可执行程序已成为现在日益流行的编译嵌入式软件的解决方案。而开放源码的编译器GCC,经过多年的发展,已能支持几乎所有知名厂商的处理器,是嵌入式软件开发中理想的交叉编译器。

交叉编译环境,用于编译目标系统可执行的代码。之所以要交叉编译环境,是因为我们用的PC CPU的架构为X86,目标系统为ARM架构的,所以要有一个编译器,链接器用于将C语言的代码编译为ARM系统可识别的目标代码。           要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc;交叉连接器为arm-linux-ld;arm-linux-objcopy用于将一个目标文件的内容复制到另一个文件中,可以进行格式转换,例如可将ELF格式的可执行文件转换为二进制文件;arm-linux-objdump可用于显示二进制文件信息。

2.2软件安装及使用

  • ADS1.2 集成开发环境的使用。一般用于裸板开发,现在基本不用这个工具,主要使用DS-5,更多的是直接使用gcc进行开发。此外,对于比较高级的ARM CPU一般都会移植大型系统(比如Linux,Android等),很少进行裸板开发了。
  • arm-linux-gcc

3、基本的Makefile语法

3.1最基本的Makefile文件

helloworld:file1.o file2.o //helloworld依赖file1.o file2.o两个目标文件     

gcc file1.o file2.o -o helloworld //编译出helloworld可执行文件。-o表示你指定的目标文件名 。

 

file1.o:file1.c file2.h //依赖file1.c文件     

gcc -c file1.c -o file1.o //编译出file1.o文件。-c表示gcc 只把给它的文件编译成目标文件,用源码文件的文件名命名

 

file2.o:file2.c file2.h   

gcc -c file2.c -o file2.o

 

clean: //当用户键入make clean命令时,会删除*.o 和helloworld文件

rm -rf *.o helloworld 将上述文件存为Makefile,然直接执行make命令即可编译程序,执行make clean即可清除编译出来的结果。

3.2MakeFile简介

无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到 make、make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大提高项目开发的效率。

 makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。在Linux中, GNU make工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索makefile文件。

3.3Makefile规则

make程序基于文件之间的依赖性,需要建立的目标文件,以及建立目标文件时要执行的命令,以上所有被称为规则,存放在文件makefile中。定制规则的语法如下:

目标列表 : 关联性列表

命令列表

注意:

1.可以在关联性列表和命令列表中使用shell文件名模式匹配字符,例如?、*、[]等等。

2.如果目标的命令列表中某个命令前面带有@,那么当make程序执行时,该命令是不会有反应的,在程序运行完毕之后,所有前面带@的命令按照反序执行。可以通过执行make -n命令显示这些命令以供查看。

3.如果目标的命令列表中某个命令前面带有-,说明如果该命令执行有误,会跳过该命令并继续执行。

make程序使用makefile中的规则决定程序中需要重新编译的文件,并再次链接生成可执行代码。如果源文件上修改的时间戳比目标文件上的时间戳更新,那么make重新编译build中包含的源文件。例如,如果修改了一个.h头文件,make程序就会重新编译所有包含该头文件的源文件,前提是头文件在这些源文件的目标文件的关联性列表中;再如某.c源文件被修改,那么该源文件被重新编译,生成对应的新的目标文件。

你可能感兴趣的:(ARM9嵌入式Linux开发)