《ARM嵌入式第3章Linux编程环境.ppt》由会员分享,可在线阅读,更多相关《ARM嵌入式第3章Linux编程环境.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章 Linux编程环境2本章内容包括常用的本章内容包括常用的Linux开发工具使用技巧和开发工具使用技巧和Linux编程技术。本章内容比编程技术。本章内容比Linux编程方面的书编程方面的书籍简略得多,重点介绍常用的籍简略得多,重点介绍常用的Linux编程工具和技编程工具和技巧。通过本章学习可以使读者快速掌握基本的巧。通过本章学习可以使读者快速掌握基本的Linux开发工具,为后续的嵌入式开发工具,为后续的嵌入式Linux开发打下开发打下基础。基础。本章目标常用Linux编程工具GNU工具链的使用技巧Linux编程库的API介绍3.1 Linux常用工具常用工具3.1.1 Shell简介简介
2、在Linux系统开发过程中,开发者或者用户与Linux系统(内核)进行交互的时候需要一个平台,这就是Shell,有了它,用户就能通过键盘输入与系统进行交互了。单从字面意思上理解,Shell的本意是“壳”的意思,通俗地讲就是内部核心与外部使用者发生联系的介质。Shell工作示意图Shell提供了用户与操作系统之间通讯的方式。这种通信可以以交互方式(从键盘输入,并且可以立即得到响应),或者以Shellscript(非交互)方式执行。Shell本身又是一个解释型的程序,也是一种编程语言,Shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。3.1.2 常用
3、常用Shell命令命令1Shell命令的一般格式命令名【选项】【参数1】【参数2】命令行输入实际上是可以编辑的一个文本缓冲区,在命令行中就可以输入Shell命令了。在按“回车键”以确认当前操作之前,可以对输入的内容进行编辑。2命令行输入命令行输入命命令令行行输输入入实实际际上上是是可可以以编编辑辑的的一一个个文文本本缓缓冲冲区区,在在命命令令行行中中就就可可以以输输入入Shell命命令令了了。在在按按“回回车车键键”以以确确认认当当前前操操作作之之前前,可可以以对对输输入入的的内内容容进进行编辑。行编辑。3常用Shell命令介绍3常用Shell命令介绍(1)输入命令行自动补齐(automati
4、ccommandlinecompletion)功能(2)对目录和文件的操作(3)用户管理(4)文件的打包和压缩(5)rpm软件包的安装(6)源码维护基本命令diff命令(7)配置、编译、安装源码包软件(8)中断Shell命令执行的方法(9)模块管理指令3.1.3 编写编写Shell脚本脚本Shell不仅仅是命令的执行,而且是一种编程语言,它提供了定义变量和参数的手段以及丰富的程序控制结构1建立脚本建立脚本编辑Shell脚本文件使用Linux下的普通编辑器如vi、Emacs等即可。Linux下的Shell默认采用Bash,所以本书也主要以Bash脚本为例介绍2Shell变量变量Shell脚本中主
5、要有以下几种变量:系统变量,环境变量,用户变量3流程控制流程控制同传统的编程语言一样,Shell提供了很多特性,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及以中断处理等。4Shell脚本的执行脚本的执行如果已经写好Shell脚本,运行该脚本可以有以下的几种方法。(1)设置好脚本的执行权限之后再执行脚本(2)使用Bash内部指令source(3)直接使用sh命令来执行3.1.4 正则表达式正则表达式正则表达式是一种可以用于模式匹配和替换的有效工具。正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
6、正则表达式由普通字符(例如字符a到z)以及特殊字符(称为特殊字符)组成特定文字模式。当从一个文件或命令中抽取或者过滤文本时,使用正则表达式可以简化命令中的匹配表达。3.1.5 程序编辑器程序编辑器编辑器是系统的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件。Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、Vi和Emacs等,按功能它们可以分为两大类。行编辑器(如Ed、Ex)全屏幕编辑器(如Vi、Emacs)Vi有3种基本工作模式:指令行模式、文本输入模式、末行模式,它们的相互关系如下。3.2 Makefile3.2.1 GNU makeGNUmake最初是Unix系统下的
7、一个工具,设计之初是为了维护C程序文件不必要的重新编译,它是一个自动生成和维护目标程序的工具。make是一个解释Makefile文件中指令的命令工具,其最基本的功能就是通过Makefile文件来描述源程序之间的相互关系并自动维护编译工作,它会告知系统以何种方式编译和链接程序。通常状况之下GNUmake的工作流程如下。查找当前目录下的Makefile文件初始化文件中的变量分析Makefile中的所有规则为所有的目标文件创建依赖关系根据依赖关系,决定哪些目标文件要重新生成执行生成命令3.2.2 Makefile规则语法规则语法Makefile有其自身特定的编写格式并且遵循一定的语法规则。#注释目标
8、文件:依赖文件列表.命令列表.3.2.3 Makefile文件中变量的使用文件中变量的使用一般来说,Makefile文件中变量的应用主要有以下几个方面。1代表一个文件列表代表一个文件列表Makefile文件中的变量常常存储一些目标文件甚至是目标文件的依赖文件,引用这些文件的时候引用存储这些文件的变量即可,这给Makefile编写和维护者带来了很大的方便。2代表编译命令选项代表编译命令选项所有编译命令都带有相同编译选项时(比如-Wall-O2等),可以将该编译选项赋给一个变量,这样方便了引用。同时,如果改变编译选项的时候,只需改变该变量值即可,而不必在每处用到编译选项的地方都做改动。3.3 二进
9、制代码工具的使用二进制代码工具的使用3.3.1 GNU Binutils工具介绍工具介绍在Linux下建立嵌入式交叉编译环境要用到一系列的工具链(tool-chain),主要有比如GNUBinutils、Gcc、Glibc、Gdb等,它们都属于GNU的工具集。GNUBinutils工具集里主要有以下一系列的部件。asGNU的汇编器ldGNU的链接器add2line将地址转换成文件名或行号对,以便调试程序ar从文件中创建、修改、扩展文件gasp汇编宏处理器nm从目标代码文件中列举所有变量(包括变量值和变量类型),如果没有指定目标文件,则默认是a.out文件objcopyobjcopy工具使用GN
10、UBSD库,它可以把目标文件的内容从一种文件格式复制到另一种格式的目标文件中add2line把程序地址转换为文件名和行号objdump显示目标文件信息readelf显示elf文件信息ranlib生成索引以加快对归档文件的访问,并将其保存到这个归档文件中size列出目标模块或文件的代码尺寸strings打印可打印的目标代码字符(至少4个字符),打印字符多少可以控制strip放弃所有符号连接c+filt链接器ld使用该命令可以过滤C+符号和Java符号,防止重载函数冲突gprof显示程序调用段的各种数据3.3.2 Binutils工具软件使用工具软件使用1汇编器汇编器 Linux平台的标准汇编器是
11、GAS,它是GCC所依赖的后台汇编工具,通常包含在binutils软件包中。2链接器链接器GNU链接器使用一个命令语言脚本来控制链接过程。3.4 编译器编译器GCC的使用的使用3.4.1 GCC编译器介绍编译器介绍GCC是GNU项目的编译器组件之一,也是GNU软件产品家族具有代表性的作品。GCC的发展大体经历了下面的几个阶段。1987年,第一版的GCC发布。,GCC3.0正式发布。,版本发布。,最新版本的GCC4.0发布,官方网站:http:/。GCC是一组编译工具的总称,其软件包里包含众多的工具,按其类型,主要有以下的分类。C编译器cc,cc1,cc1plus,gccC+编译器c+,cc1p
12、lus,g+源码预处理程序cpp,cpp0库文件libgcc.a,libgcc_eh.a,libgcc_s.so,libiberty.a,libstdc+.a,so,libsupc+.a3.4.2 GCC编译选项解析编译选项解析GCC是Linux下基于命令行的c语言编译器,其基本的使用语法如下。gccoption|filename对于编译C+的源程序,其基本的语法如下。g+option|filenameGCC拥有众多的命令选项,有超过100个的编译选项可用,按其应用有如下的分类。1常用编译选项常用编译选项2出错检查和警告提示选项出错检查和警告提示选项3代码优化选项代码优化选项4调试分析选项调试
13、分析选项3.5 调试器调试器GDB的使用技巧的使用技巧3.5.1 GDB调试器介绍调试器介绍以下是GDB所提供的一些功能。启动程序,并且可以设置运行环境和参数来运行指定程序。让程序在指定断点处停止执行。对程序做出相应的调整,这样就能纠正一个错误后继续调试。使用gdb命令的语法如下。#gdb参数Filename3.5.2 GDB调试命令调试命令常用到的GDB调试命令。命 令说 明file指定要调试的可执行程序kill终止正在调试的可执行程序next执行一行源代码但并不进入函数内部list部分列出源代码step执行一行源代码并不进入函数内部run执行当前的可执行程序quit结束gdb调试任务wat
14、ch可以检查一个变量的值而不管它何时被改变print打印表达式的值到标准输出breakN在指定的第N行源代码设置断点infobreak显示当前断点清单,包括到达断点处的次数等infofiles显示被调试文件的详细信息infofunc显示所有的函数名infolocal显示当函数中的局部变量信息infoprog显示被调试程序的执行状态infovar显示所有的全局和静态变量名称make在不退出gdb的情况下运行make工具shell在不退出gdb的情况下运行shell命令continue继续执行正在调试的程序3.6 Linux编程库编程库3.6.1 Linux编程库介绍编程库介绍Linux下的库文件
15、分为共享库和静态库2大类,它们两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。此外,通常共享库以.so(SharedObject)结尾,静态链接库通常以.a结尾(Archive)。在终端下查看库的内容,通常共享库为绿色,而静态库为黑色。Linux的库一般在/lib或/usr/lib目录下。它主要存放系统的链接库文件,没有该目录则系统无法正常运行。3.6.2 Linux系统调用系统调用从字面意思上理解,系统调用说的是操作系统提供给用户程序调用的一组“特殊”接口。Linux系统有200多个系统调用,这些系统调用按照功能分类大致可分为以下几个方面。进程控制文件系统控制系统控制内存管理网络管理socket控制用户管理进程间通信3.6.3 Linux线程库线程库简单地讲,进程是资源管理的最小单位,线程是程序执行的最小单位。一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等),而将线程分配到某个cpu上执行。一个进程当然可以拥有多个线程。pthread_create()创建新的线程pthread_join()等待线程结束pthread_self()获取线程IDpthread_detach()用于让线程脱离pthread_exit()终止线程31Q&A32