电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

嵌入式Linux操作系统第2章-1

88页
  • 卖家[上传人]:宝路
  • 文档编号:54606771
  • 上传时间:2018-09-15
  • 文档格式:PPT
  • 文档大小:1.27MB
  • / 88 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、嵌入式Linux操作系统,第2章 Linux编程基础,第2章 Linux编程基础,Linux下的C语言编程,C语言是结构化的语言 采用代码及数据分隔的方式,使程序的各部分独立 以函数的形式提供给用户,方便调用 C语言是模块化的语言 减少重复编程,减少劳动量,提高编程效率 程序可移植性好 不同机器上的编译程序大约有80%的代码是公共的 C语言运算符丰富、代码效率高 C语言共有34种运算符,使用各种运算符可以实现在其他高级语言中难以实现的运算。,Linux下的C语言编程,编辑器 Linux下的编辑器就如Windows下的word、记事本等一样,完成对所录入文字的编辑功能。Linux中最常用的编辑器有Vi(Vim)和Emacs,它们功能强大,使用方便,广受编程爱好者的喜爱 编译器 编译是指源代码转化生成可执行代码的过程。可见,在编译过程是非常复杂的,它包括词法、语法和语义的分析、中间代码的生成和优化、符号表的管理和出错处理等。在Linux中最常用的编译器是Gcc编译器。,Linux下的C语言编程,调试器 Gdb是绝大多数Linux开发人员所使用的调试器,它可以方便地设置断点、单步跟踪等,足以

      2、满足开发人员需要 项目管理器 Linux中的项目管理器“Make”有些类似于Windows中VC+里的“工程”,它是一种控制编译或者重复编译软件的工具。,VIM编辑器,命令行模式(Command Mode) 在该模式下用户可以输入命令来控制屏幕光标的移动,字符、单词或行的删除,移动复制某区段,也可以进入到底行模式或者插入模式下。 插入模式(Insert Mode) 用户只有在插入模式下才可以进行字符输入,用户按Esc键可回到命令行模式下。 底行模式(Last Line Mode) 在该模式下,用户可以将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、显示行号等。这一模式下的命令都是以“:”开始。,VIM编辑器,进入与离开 进入vi可以直接在系统提示符下键入vi 文档名称,vi可以自动载入所要编辑的文档或是创建一个新的文档。如在shell中键入vi hello.c(新建文档)即可进入vi画面. 进入vi后屏幕最左边会出现波浪符号,凡是有该符号就代表该行目前是空的。此时进入的是命令行模式。 要离开vi可以在底行模式下键入“:q”(不保存离开),“:wq”(保存离开)则是存档后再离开(

      3、注意冒号)。,VIM编辑器,vi中3种模式的切换 1. 命令行模式、底行模式转为插入模式,VIM编辑器,vi中3种模式的切换 (续) 2. 插入模式转为命令行模式、底行模式 从插入模式转为命令行模式、底行模式比较简单,只需使用Esc键即可 3. 命令行模式与底行模式转换 命令行模式与底行模式间的转换不需要其他特别的命令,而只需要直接键入相应模式中的命令键即可,VIM编辑器,VIM编辑器,vi的基本流程 (1)进入vi,即在命令行下键入vi hello(文件名)。此时进入的是命令行模式,光标位于屏幕的上方,如图3.1所示。 (2)在命令行模式下键入i进入到插入模式,如图3.2所示。可以看出,在屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。 (3)最后,在插入模式中,输入“Esc”,则当前模式转入命令行模式,并在底行行中输入“:wq”(存盘退出)进入底行模式,如图3.3所示。 这样,就完成了一个简单的vi操作流程:命令行模式插入模式底行模式。,VIM编辑器,vi常用命令涉及的单词或字符 w: write or word r: read b: begin h: home d

      4、: delete u: undo p: paste i: insert q: quit a: append m: middle l: last $: 尾 : 头 s: stick,VIM编辑器,vi的修改、复制 和粘贴,VIM编辑器,vi的删除和恢复,VIM编辑器,vi的光标移动,VIM编辑器,vi的查找与替换,VIM编辑器,vi的文件操作指令,VIM编辑器,(1)在/root目录下建一个名为vi的目录。 (2)进入vi目录。 (3)将文件/etc/inittab复制到当前目录下。 (4)使用vi编辑当前目录下的inittab。 (5)将光标移到该行。 (6)复制该行内容。 (7)将光标移到最后一行行首。 (8)粘贴复制行的内容。 (9)撤销第8步的动作。 (10)将光标移动到最后一行的行尾,VIM编辑器,(11)粘贴复制行的内容。 (12)光标移到“si:sysinit:/etc/rc.d/rc.sysinit”。 (13)删除该行。 (14)存盘但不退出。 (15)将光标移到首行。 (16)插入模式下输入“Hello,this is vi world!”。 (17)返回命令行模式。

      5、 (18)向下查找字符串“unused”。 (19)再向上查找字符串“halt”。 (20)强制退出vi,不存盘,VIM编辑器,(1)mkdir /root/vi (2)cd /root/vi (3)cp /etc/inittab ./ (4)vi ./inittab (5)17G(命令行模式) (6)yy (7)G (8)p (9)u (10)$,VIM编辑器,(11)p (12)21G (13)dd (14):w(底行模式) (15)1G (16)i 并输入“Hello,this is vi world!”(插入模式) (17)Esc (18)/unused (命令行模式) (19)?halt (20):q!(底行模式),gcc编译器,gcc 是 GNU 的 C 和 C+ 编译器。实际上,gcc 能够编译多种语言:C、C+、Java 和 Object C等。利用 gcc 命令可同时编译并连接 C 和 C+ 源程序。也可以对几个 C 源文件利用 gcc 编译、连接并生成可执行文件。 gcc可以使程序员灵活地控制编译过程。编译过程一般可以分为四个阶段,每个阶段分别调用不同的工具进行处理

      6、,gcc编译器,gcc编译器,预处理:在该阶段,编译器将C源代码中的包含的头文件编译进来,如对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。将*.c预处理输出*.i文件 编译:在这个阶段中,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。将预处理输出文件*.i汇编成*.s文件 。用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码 汇编:是把编译阶段生成的*.s文件转成二进制目标代码*.o文件。用户可以使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了,gcc编译器,链接:将汇编输出文件*.o链接成最终可执行文件*.exe。 系统把一些函数(printf)实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。完成了链接之后,gcc就可以生成可执行文件,gcc编译器

      7、,GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C+和Object C等语言编写的程序 gcc不仅功能强大,而且可以编译如C、C+、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言 gcc是一个交叉平台编译器,支持的硬件平台很多,如alpha、arm、avr、hppa、i386、m68k、mips、sparc、 powerpc、vxworks、x86_64、MS Windows、OS/2等等。它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译,gcc编译器,gcc的编译流程分为了4个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking),gcc编译器,gcc编译器,GCC使用的基本语法为: gcc option | filename,gcc编译器,预处理阶段 处理的主要作用是通过预处理的内建功能对一些可预处理资源进行等价替换,最常见可预处理资源有:文件包含、条件编译、布局控制

      8、和宏处理等。 gcc选项“-E”可以使编译器在预处理结束时就停止编译,选项“-o”是指定GCC输出的结果,其命令格式为如下 gcc E o 目标文件 编译文件 例如: $ gcc E o hello.i hello.c,gcc编译器,编译阶段 编译器在预处理结束之后,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,就开始把代码翻译成汇编语言,gcc的选项“-S”能使编译器在进行汇编之前就停止。 “.s”是汇编语言原始程序,因此,此处的目标文件就可设为“.s”类型。 $ gcc S o hello.s hello.i,gcc编译器,汇编阶段 汇编阶段是把编译阶段生成的“.s”文件生成目标文件,读者在此使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。如下所示。 $ gcc c hello.s o hello.o,gcc编译器,链接阶段 完成了链接之后,gcc就可以生成可执行文件,其命令如下所示。 $ gcc hello.o o hello 运行该可执行文件,出现正确的结果。 $ ./hello hello, embedded w

      9、orld,gcc编译器,gcc有超过100个的可用选项,包括总体选项、警告和出错选项、优化选项和体系结构等相关选项 (1)常用选项,gcc编译器,(2)库相关选项,gcc编译器,(3)警告和出错选项,gcc编译器,Wall类警告提示,gcc编译器,Wall类警告提示,gcc编译器,Wall类警告提示,gcc编译器,非Wall类警告提示 (1)“-ansi” 该选项强制GCC生成标准语法所要求的告警信息,尽管这还并不能保证所有没有警告的程序都是符合ANSI C标准的。 (2)“-pedantic” 该选项允许发出ANSI C标准所列全部警告信息,同样也保证所有没有警告的程序都是符合ANSI C标准的。,gcc编译器,Linux函数库介绍 Linux中函数库包括两类:静态库和共享库。 静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库是在程序开始运行时被加载。 系统中可用的库都安装在/usr/lib和/lib目录下。库文件名由前缀lib和库名以及后缀组成。根据库类型不同,后缀名也不一样。,gcc编译器,Linux中函数库包括两类:静态函数库和共享函数库 静态函数库(stati

      10、c libraries):是一个普通的目标文件的集合,一般用“.a”作为文件的后缀。静态函数库和共享函数库相比有很多的缺点,占用内存空间多。但使用ELF格式的静态库函数生成的代码可以比使用共享函数库的程序运行速度上快一些。 可以用ar这个程序来创建一个静态函数库文件,或者往一个已经存在地静态函数库文件添加新的目标代码。 例如, 把file1.o和file2.o加入到my_library.a这个函数库文件: ar rcs my_library.a file1.o file2.o 然后运行 ranlib,以给库加入一些索引信息,gcc编译器,共享函数库(shared libraries):当一个可执行程序在启动的时候被加载的函数。每个共享函数库都有个特殊名字,称作soname。soname名字命名必须以lib作为前缀,然后是函数库的名字,然后是“.so”,最后是版本号信息。 优点:多进程使用同一函数库;修改函数库不需重新连编。 安装一个新版本的函数库的时候,要先将这些函数库文件拷贝到一些特定的目录中,运行ldconfig就可以。ldconfig检查已经存在的库文件,然后创建soname的符号链接到真正的函数库,同时设置/etc/ld.so.cache这个缓冲文件。 例如,创建两个目标文件(a.o和b.o),然后创建一个包含a.o和b.o的共享函数库。 gcc -fPIC -g -c -Wall a.cgcc -fPIC -g -c -Wall b.cgcc -shared -Wl,-soname,liblusterstuff.so.1 -o liblusterstuff.so.1.0.1 a.o b.o lc 注:” -fPIC ”是位置无关参数, ”-g”和“Wall”参数不是必须的,

      《嵌入式Linux操作系统第2章-1》由会员宝路分享,可在线阅读,更多相关《嵌入式Linux操作系统第2章-1》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.