2-嵌入式Linux开发环境的搭建

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数字集成电路设计与系统应用专业BuildingEmbeddedLinuxSystems数字集成电路设计与系统应用专业AllrightsreservedBUAAAllrightsreserved;Theinformationcontainedinthisdocumentissubjecttochangewithoutnotice;2数字集成电路设计与系统应用专业Summary嵌入式linux开发介绍嵌入式系统简介嵌入式linux系统构成嵌入式linux系统开发移植主要工作嵌入式Linux开发环境的搭建搭建嵌入式Linux开发环境的主要工作嵌入式Linux交叉开发环境硬件基本组成为什么需要交叉编译?GNU工具链简介安装交叉编译工具,开源的gcc的编译主机、目标机通讯及为提供开发效率辅助方法介绍主机端需要什么目标机端需要什么数字集成电路设计与系统应用专业WhatisEmbeddedSystemEmbeddedLinuxtypicallyreferstoacompletesystem,orinthecontextofanembeddedLinuxvendor,toadistributiontargetedatembeddeddevices.数字集成电路设计与系统应用专业嵌入式改变我们生活嵌入式系统作为“后PC时代”的新秀,是当前最热门最有发展前景的IT应用领域之一。我们平常用的手机、可视电话、数码相机、摄像机、机顶盒、路由器、数控设备或仪表、医疗仪器、航天航空设备等都是嵌入式系统。数字集成电路设计与系统应用专业Embeddedsystemsapplications嵌入式应用信息家电智能玩具军事电子通信设备移动存贮工控设备智能仪表汽车电子网络设备电子商务医疗电子电子农业视频监控数字集成电路设计与系统应用专业Generalembeddedsystemhardwarecomponents数字集成电路设计与系统应用专业嵌入式系统结构和知识BootloaderOSAppJava开发.Net开发3G开发嵌入式开发精通C语言操作系统原理嵌入式开发计算机原理精通汇编和C语言H/W电路原理常用EDA工具数字集成电路设计与系统应用专业Embeddedsystemcomponents数字集成电路设计与系统应用专业Linuxinembeddedapplicationsproblems•毕竟linux不是专为嵌入式应用而写的,Linux对硬件有一定要求,而嵌入式一般硬件资源有限制•Linux体系结构复杂,代码量大,不易理解和维护•Linux技术门槛相对高•Linux虽然是开源的,但正在产品化时,如果遇到问题,大多都要自行解决;因为在产品化中遇到的问题是具体的,专业的,除非有专门的第三方公司支持,否则就只有自己解决了。•Linux上资源丰富,但正在用到产品中时,移植优化的工作量极大数字集成电路设计与系统应用专业EmbeddedLinuxkernelstructure数字集成电路设计与系统应用专业Systemcall数字集成电路设计与系统应用专业Androidstructure内核挂载的第一个文件系统根文件系统上存放有内核运行的第一个初始化程序init、命令、设备节点、配置文件以及共享库等等系统中只能有一个根文件系统嵌入型linux系统通常用busybox工具集来构建根文件系统,以减小系统体积数字集成电路设计与系统应用专业PortingEmbeddedLinuxSystem搭建交叉编译环境Bootloader的选择和移植优化Kernel的配置、编译、移植、调试(BSP)根文件系统的制作基本驱动的移植数字集成电路设计与系统应用专业EmbeddedLinuxdevelopmentenvironment•准备开发主机、目标机(开发板)以及二者的连接介质•准备目标机代码•安装交叉编译工具链–Gnu工具链使用简介–安装已经编译好的工具链–自己动手编译交叉工具链•安装调试工具软件(可选)•配置主机方必须的软件(为方便调试)–终端软件(超级终端、minicom)–tftp服务器(可选)–NFS服务器(可选)–JTAG工具安装及配置–其他工具软件usb等16数字集成电路设计与系统应用专业EmbeddedLinuxcrossdevelopmentenvironmenthardwareHost;Target;Cable;Forexample:RS232,USB,network17数字集成电路设计与系统应用专业PreparedtotargetSourcecode从供应商那里得到开源,下载数字集成电路设计与系统应用专业WhydoweneedCross-Compiler?背景条件嵌入式系统硬件资源限制Mcu主频、内存RAM等嵌入式系统MCU体系结构和指令集不同ARM,MIPS,POWERPC开发效率交叉编译在开发主机运行编译器编译内核、应用,而内核和程序要在目标机上运行,这个编译过程称为交叉编译。编译器运行在开发主机(通常是X86体系的PC机)上,编译出的代码是目标机体系结构的,如:ARM。在主机上除了编译还可以完成制作根文件系统、数据加工等工作嵌入式linux开发,交叉编译使用开源gnu工具集,gcc等Intel、AMD、VIA也在采用X86体系进入嵌入式领域.数字集成电路设计与系统应用专业GNU工具集编译工具:把一个源程序编译为一个可执行程序调试工具:能对执行程序进行源码或汇编级调试软件工程工具:用于协助多人开发或大型软件项目的管理,如make、CVS、Subvision其他工具:用于把多个目标文件链接成可执行文件的链接器,或者用作格式转换的工具。数字集成电路设计与系统应用专业21GCC简介全称为GNUCC,GNU项目中符合ANSIC标准的编译系统编译如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多种语言GCC是可以为多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%一个交叉平台编译器,适合在嵌入式领域的开发编译21数字集成电路设计与系统应用专业22GCC编译器的版本GNUCompilerCollectionC,C++,Objective-C,Fortran,Java,Ada数字集成电路设计与系统应用专业23GCC简介gcc所支持后缀名解释.cC原始程序.C/.cc/.cxxC++原始程序.mObjective-C原始程序.i已经过预处理的C原始程序.ii已经过预处理的C++原始程序.s/.S汇编语言原始程序.h预处理文件(头文件).o目标文件.a/.so编译后的库文件23数字集成电路设计与系统应用专业24编译器的作用GCC的编译流程分为四个步骤:1.预处理(Pre-Processing)2.编译(Compiling)3.汇编(Assembling)4.链接(Linking)24源代码*.c预处理器头文件*.h编译器目标代码*.o可执行文件引导代码库函数汇编处理链接数字集成电路设计与系统应用专业25分析器:分析器将源语言程序代码转换为汇编语言。因为要从一种格式转换为另一种格式(C到汇编),所以分析器需要知道目标机器的汇编语言。汇编器:汇编器将汇编语言代码转换为CPU可以执行字节码。链接器:链接器将汇编器生成的单独的目标文件组合成可执行的应用程序。链接器需要知道这种目标格式以便工作。标准C库:核心的C函数都有一个主要的C库来提供。如果在应用程序中用到了C库中的函数,这个库就会通过链接器和源代码连接来生成最终的可执行程序。编译器的主要组件数字集成电路设计与系统应用专业26GCC的执行过程•调用cpp进行预处理,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析;•调用cc1进行编译,生成.o为后缀的目标文件;•调用as进行汇编,汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件;•调用ld进行链接,所有的目标文件被安排在可执行程序中的恰当的位置。同时,该程序所调用到的库函数也从各自所在的档案库中链接到合适的地方。26数字集成电路设计与系统应用专业27“hello”的演变历程27Pre-processor(cpp/Gcc-E)Compiler(cc1/Gcc-S)Assembler(as/Gcc-c)Linker(ld)hello.c(text)hello.i(text)hello.s(text)hello.o(binary)hello(binary)printf.o(binary)数字集成电路设计与系统应用专业28GCC的基本用法和选项Gcc最基本的用法是∶gcc[options][filenames]-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-ooutput_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。-Ldirname,将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在链接过程中使用的参数。28数字集成电路设计与系统应用专业29GCC使用实例•#includestdio.h•intmain(void)•{–inti,j;–j=0;–i=j+1;–printf(“hello,world\n”);–printf(“theresultis%d\n”,i);•}编译:$gcc–otesttest.c执行:$./test查看更详细的信息:$gcc–v–otesttest.c29数字集成电路设计与系统应用专业30GCC的错误类型及对策•第一类∶C语法错误–错误信息∶文件source.c中第n行有语法错误(syntexerrror)。有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,我们最主要的是要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。•第二类∶头文件错误–错误信息∶找不到头文件head.h(Cannotfindincludefilehead.h)。这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。•第三类∶档案库错误–错误信息∶链接程序找不到所需的函数库(ld:-lm:Nosuchfileordirectory)

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功