您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式Linux编程环境
嵌入式Linux操作系统第3章嵌入式Linux编程环境课程安排:第1章嵌入式Linux操作系统简介第2章Linux操作系统使用与系统配置第3章嵌入式Linux开发环境第4章嵌入式文件I/O编程第5章嵌入式Linux多任务编程第6章嵌入式Linux进程间通行第7章嵌入式Linux多线程编程第8章嵌入式Linux网络编程第9章Qt图形编程第10章嵌入式Linux设备驱动编程第3章嵌入式Linux编程环境3.1Linux下C语言编程概述3.2Linux编辑器vi的使用3.3gcc编译器3.4gdb调试器3.5Make工程管理器3.6使用autotools思考题本章课程:语言编程概述Linux下的C语言程序设计与在其他环境中的C程序设计一样,主要涉及编辑器、编译链接器、调试器及项目管理工具。(1)编辑器Linux下的编辑器就如Windows下的记事本、写字板等一样,完成对所录入文字的编辑功能。Linux中最常用的编辑器有vi(vim)和emacs。(2)编译链接器。编译是指源代码转化生成可执行代码的过程。在Linux中,最常用的编译器是gcc编译器。它是GNU推出的功能强大、性能优越的多平台编译器。语言编程概述(3)调试器调试器并不是代码执行的必备工具,而是专为方便程序员调试程序而用的。gdb是绝大多数Linux开发人员所使用的调试器,它可以方便地设置断点、单步跟踪等,足以满足开发人员的需要。(4)项目管理器。Linux中的项目管理器“make”有些类似于Windows中Visualc++里的“工程”,它是一种控制编译或者重复编译软件的工具,另外,它还能自动管理软件编译的内容、方式和时机。的使用Linux编辑器行编辑器(ed、ex)行编辑器每次只能对单行进行操作,使用起来很不方便全屏幕编辑器(vi、emacs)全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上vi是Linux系统的第一个全屏幕交互式编辑程序的使用3.2.1vi的模式vi有3种模式:命令行模式、插入模式、底行模式(1)命令行模式用户在用vi编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字。用户按[ESC]键回到命令行模式。(2)插入模式只有在该模式下,用户才能进行文字编辑输入,用户可按[i]键进入到命令行模式。(3)底行模式在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。用户可按[:]键进入到命令行模式。的基本流程(1)进入vi,即在命令行下键入vihello(文件名)。此时进入的是命令行模式,光标位于屏幕的上方,如图3.1所示。(2)在命令行模式下键入i进入到插入模式,如图3.2所示。可以看出,在屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。(3)最后,在插入模式中,输入“Esc”,则当前模式转入命令行模式,并在底行行中输入“:wq”(存盘退出)进入底行模式,如图3.3所示。这样,就完成了一个简单的vi操作流程:命令行模式→插入模式→底行模式。的各模式功能键(1)命令行模式常见功能键如表:(2)插入模式的功能键只有一个,也就是Esc退出到命令行模式。(3)底行模式常见功能键如表所示:用法---编辑新增(append)--a从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。--A从光标所在列最後面的地方开始新增资料。插入(insert)--i从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。--I从光标列的第一个非空白字符前面开始插入资料。开始(open)--o在光标所在列下新增一列并进入输入模式。--O在光标所在列上方新增一列并进入输入模式。用法---修改和删除x删除光标所在字符。dd删除光标所在的列。r修改光标所在字符,r後接著要修正的字符R进入取代状态,新增资料会覆改原先资料,直到按[ESC]回到指令模式下为止。s删除光标所在字符,并进入输入模式。S删除光标所在的列,并进入输入模式。用法---退出:q不保存退出:q!不保存强制性退出:w保存编辑:wfilename存入文件filename中:w!filename强制性存入文件filename中:wq(:x)保存并退出(shift+zz)用法---光标移动b移动到当前单词的开始e移动到当前单词的结尾w向前移动一个单词h向前移动一个字符j向上移动一行k向下移动一行l向后移动一个字符用法---替换操作r替换光标所在的字符R替换字符序列cw替换一个单词ce同cwcb替换光标所在的前一字符c$替换自光标位置至行尾的所有字符C同c$cc替换当前行用法---复制与粘贴/yw将光标所在单词拷入剪贴板y$将光标至行尾的字符拷入剪贴板Y同y$yy将当前行拷入剪贴板p将剪贴板中的内容粘贴在光标后P将剪贴板中的内容粘贴在光标前编译器GNUCC(简称为gcc)是GNU项目中符合ANSIC标准的编译系统,能够编译用C、C++和ObjectC等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。本章中的示例,除非特别注明,否则均采用gcc版本为4.0.0。下表3.3是gcc支持编译源文件的后缀及其解释。个步骤,分别为:预处理(Pre-Processing);编译器对包含的头文件(#include)和宏定义(#define、#ifdef等)进行处理。用户可以使用gcc的选项“-E”进行查看,该选项的作用是让gcc在预处理结束后停止编译过程。编译(Compiling);gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。编译流程解析汇编(Assembling);汇编阶段是把编译阶段生成的“.s”文件转成目标文件,读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。链接(Linking)。系统把API函数(如printf)实现都被做到名为libc.so的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到libc.so库函数中去,这样就能实现API函数,而这也就是链接的作用。完成了链接之后,gcc就可以生成可执行文件。编译选项分析(1)总体选项,右表:(2)告警和出错选项,右表:(3)优化选项gcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比较典型的范围是从0变化到2或3。(4)体系结构相关选项下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也足以与微软的VC工具等媲美。使用流程首先,打开Linux下的编辑器vi,编辑如下代码#vitest.c在保存退出后首先使用gcc对test.c进行编译,注意一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件#gcc-gtest.c-otest接下来就启动gdb进行调试。注意,gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试使用流程gdbtest可以看出,在gdb的启动画面中指出了gdb的版本号、使用的库文件等信息,然后进入由“(gdb)”开头的命令行界面。(1)查看文件:键入“l”(list)就可以查看所载入的文件(2)设置断点:在“b”后加入对应的行号即可(3)查看断点情况:在设置完断点之后,用户可以键入“infob”来查看设置断点情况,在gdb中可以设置多个断点(4)运行代码:gdb默认从首行开始运行代码,键入“r”(run)即可(5)查看变量值:键入“p”+变量值即可(6)单步运行:键入命令“n”(next)或“s”(step)(7)恢复程序运行:使用命令“c”(continue)恢复程序的正常运行了调试器3.3.2gdb基本命令1.工作环境相关命令2.设置断点与恢复命令gdb中设置断点有多种方式:其一是按行设置断点,另外还可以设置函数断点和条件断点①函数断点,gdb中按函数设置断点只需把函数名列在命令“b”之后②条件断点,gdb中设置条件断点的格式为:b行数或函数名if表达式调试器3.3.2gdb基本命令3.gdb中源码查看相关命令4.gdb中查看运行数据相关命令5.gdb中修改运行参数相关命令gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set变量=设定值”。这样,在此之后,程序就会按照该设定的值运行了。工程管理器工程管理器,顾名思义,是指管理较多的文件的。工程管理器能够自动识别更新了的文件代码,同时又不需要重复输入冗长的命令行。Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。用户只需编写一次简单的编译语句就可以了。它大大提高了实际项目的工作效率,而且几乎所有Linux下的项目编程均会涉及它。读入的惟一配置文件,在一个Makefile中通常包含如下内容:需要由make工具创建的目标体(target),通常是目标文件或可执行文件;要创建的目标体所依赖的文件(dependency_file);创建每个目标体时需要运
本文标题:嵌入式Linux编程环境
链接地址:https://www.777doc.com/doc-916326 .html