资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
操作系统(Linux)第二章补充嵌入式操作系统1目标 v了解嵌入式操作系统 v了解Linux v独立安装Linux v熟练操作Linux常用命令 v熟练使用Linux下的编辑器 v熟练使用GCC编译器 v能够使用GDB调试器 v了解Linux编程库2嵌入式操作系统 v嵌入式操作系统 v实时系统 v主流嵌入式操作系统 vLinux的发展历史 vLinux发行版本 vLinux安装 vLinux编程环境3Linus TorvaldsLinux的创始人4Linux项目v 1991年8月,芬兰研究生Linus Torvalds谨慎地发布了一个新的类Unix的操作系统 内核,内容如下: v 来自:torvaldsklaava.Helsinki.FI (Linus Benedict Torvalds) v 新闻组:comp.os.minix v 主题:在minix中你最想看到什么? v 摘要:关于我的新操作系统的小调查 v 时间:1991年8月25日 20:57:08格林尼治时间 v 每个使用minix的朋友,你们好。 v 我正在做一个(免费的)用在386(486)AT上的操作系统(只是业余爱好,它 不会像GNU那样庞大和专业)。这个想法从4月份起就开始酝酿,现在快要完成 了。我希望得到各位对minix的任何反馈意见,因为我的操作系统在某些方面是与 它相类似的(其中包括相同的文件系统的物理设计(因为某些实际的原因)。 v 我现在已经移植了bash(1.08)和gcc(1.40),并且看上去能运行。这意味着 我需要用几个月的时间使它变得更实用一些,并且我想知道大多数人想要的特性 。欢迎提出任何建议,但是我无法保证都能实现。: - ) v Linus (torvaldskruuna.helsinki.?) v 接下来,如他们所说,这就成为了历史。Linux逐渐发展成为一个技术和文化现象 。通过结合GNU项目的力量,Linux项目发展成为一个完整的、符合Posix标准的 Unix操作系统的版本,包括内核和所有支撑的基础设施。从手持设备到大型计算 机,Linux在范围如此广泛的计算机上得到了应用。IBM的一个工作组甚至把 Linux移植到了一块腕表中! 5Linux发行版本 vRedHat vFedora Core vMandrake vSuse vDebian vCentOS vUbuntu vRedFlag6Linux的编程环境1.1 Shell简介及常用Shell命令1.2 Linux与GNU1.4编译器GCC的使用1.5调试器GDB的使用1.6 Make工程管理器1.7 Linux编程库1.3 Linux程序编辑器Vi7Shell简介及常用Shell命令 vShell作为操作系统的最外层,也称为外壳v内核、Shell和用户的关系 Shell是一种Linux中的命令行解释程序,为用户提供使 用操作系统的接口。用户在提示符下输入的命令都由 Shell先解释然后传给Linux内核。 Linux中运行Shell的环境是“系统工具”下的“终端”,可以 单击“终端”以启动Shell环境。这时屏幕上显示类似 “linuxwww home$”的信息,其中,linux是指系统 用户,而home是指当前所在的目录。 vShell也是一种程序设计语言,用户可利用多条 shell命令构成一个文件。8vShell命令使用说明 Shell命令的一般格式 命令名 【选项】【参数1】【参数2】 命令行中的第一部分必须是一个命令的名字,第二部分是命令 的选项或参数,命令行中的每个部分必须有空格或Tab键隔开 ;【】内表示可选项 对于选项和参数的说明 【选项】是一个包括一个或多个字母的代码,它前面有一个减 号(-)。 【参数】提供命令运行的信息或者命令执行所使用的文件名。 命令历史列表 使用箭头键、F3等功能键翻查历史命令 输入命令行自动补齐 输入命令的任何时刻按【Tab】键,系统将试图补齐已输入的 命令 中断Shell命令的方法Ctrl+CShell简介及常用Shell命令9v 常用Shell命令 对目录和文件的操作 cd,pwd,mkdir,rm,cp,ln,grep,find chmod,chown 用户管理 adduser,userdel,su 进程管理 ps,kill 文件的打包与压缩(gzip和bzip2两种压缩包) 打包并压缩:tar cvzf test.tar.gz *.jpg或tar cvjf test.tar.bz2 *.jpg 解压缩包:tar xvzf test.tar.gz或tar xvjf test.tar.bz2 rmp软件包的安装 源码维护基本命令 diff创建补丁: diff ruN a.txt b.txt c.patch patch打补丁: patch p1 ,与处理器将读需stdio.h的内容并将它插入 到C程序中。结果生成一个.i为扩展名的文件。 编译阶段 编译器(ccl)将.i文件翻译成文本文件.s,它包含一个汇编语言程序。 汇编阶段 汇编器(as)将.s文件翻译成机器语言指令,把这些指令打包成一种叫做 可重定位目标程序的格式,并将结果保存在目标文件.o中。它是一个二进 制文件,它的字节编码是机器指令而不是字符。 链接阶段 链接器(ld)负责将程序中所使用的C库函数,如printf函数所在的printf.o 并入到前面生成的.o程序中,最终得到一个可执行目标文件(可执行文件 )。可执行文件加载到存储器后,由系统负责执行。GCC编译器的使用18v gcc编译选项分析 v (1)总体选项,右表: v (2)告警和出错选项,右表: v (3)优化选项 v gcc可以对代码进行优化, 它通过编译选项“-On”来控制 优化代码的生成,其中n是一 个代表优化级别的整数。对 于不同版本的gcc来讲,n的取 值范围及其对应的优化效果可 能并不完全相同,比较典型的 范围是从0变化到2或3。 v (4)体系结构相关选项GCC编译器的使用19 调试是所有程序员都会面临的问题。如何提高程序员的 调试效率,更好更快地定位程序中的问题从而加快程序 开发的进度,是大家共同面对的。 Windows下的一些调试工具,如VC自带的如设置断点 、单步跟踪等,在Linux下有什么很好的调试工具呢? GDB调试器是一款GNU开发组织并发布的UNIX/Linux 下的程序调试工具。虽然,它没有图形化的友好界面, 但是它强大的功能也足以与微软的VC工具等媲美。GDB调试器的使用20 打开Linux下的编辑器vi,编辑如下代码 # vi test.c 在保存退出后首先使用gcc对test.c进行编译,注意一定要加上选项“-g”,这 样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行 文件 # gcc -g test.c -o test 启动gdb进行调试。注意,gdb进行调试的是可执行文件,而不是如“.c”的源 代码,因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试 gdb test 在gdb的启动画面中指出了gdb的版本号、使用的库文件等信息,接下来就 进入了由“(gdb)”开头的命令行界面了 (1)查看文件,在gdb中键入“l”(list)就可以查看所载入的文件 (2)设置断点 ,在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可 (3)查看断点情况,在设置完断点之后,用户可以键入“info b”来查看设置断点 情况,在gdb中可以设置多个断点 (4)运行代码,gdb默认从首行开始运行代码,可键入“r”(run)即可 (5)查看变量值,在gdb中只需键入“p”变量值即可 (6)单步运行,单步运行可以使用命令“n”(next)或“s”(step) (7)恢复程序运行,可以使用命令“c”(continue)恢复程序的正常运行了GDB调试器的使用21vgdb基本命令 1工作环境相关命令 2设置断点与恢复命令 gdb中设置断点有多种方式: 其一是按行设置断点,另外 还可以设置函数断点和条件 断点 函数断点,gdb中按函 数设置断点只需把函数名 列在命令“b”之后 条件断点,gdb中设置 条件断点的格式为:b 行 数或函数名 if 表达式 GDB调试器的使用22GDB调试器的使用vgdb基本命令 gdb中源码查看相关命令 gdb中查看运行数据相关命令 gdb中修改运行参数相关命令 gdb还可以修改运行时的参数,并使该变量按照用户当前输入的 值继续运行。它的设置方法为:在单步执行的过程中,键入命令 “set 变量设定值”。这样,在此之后,程序就会按照该设定的值运行了。 23v 工程管理器,顾名思义,是指管理较多的文件的。可以试想 一下,有一个上百个文件的代码构成的项目,如果其中只有 一个或少数几个文件进行了修改,按照之前所学的gcc编译 工具,就不得不把这所有的文件重新编译一遍,因为编译器 并不知道哪些文件是最近更新的,而只知道需要包含这些文 件才能把源代码编译成可执行文件,于是,程序员就不能不 再重新输入数目如此庞大的文件名以完成最后的编译工作。 v 希望有一个工程管理器能够自动识别更新了的文件代码,同 时又不需要重复输入冗长的命令行,这样,Make工程管理 器也就应运而生了。 v 实际上,Make工程管理器也就是个“自动编译管理器”,这里 的“自动”是指它能够根据文件时间戳自动发现更新过的文件 而减少编译的工作量,同时,它通过读入Makefile文件的内 容来执行大量的编译工作。用户只需编写一次简单的编译语 句就可以了。它大大提高了实际项目的工作效率,而且几乎 所有Linux下的项目编程均会涉及它 Make工程管理器24Make工程管理器v Makefile基本结构 Makefile是Make读入的惟一配置文件,在一个Makefile中通常包含如下内容: 需要由make工具创建的目标体(target),通常是目标文件或可执行文件; 要创建的目标体所依赖的文件(dependency_file); 创建每个目标体时需要运行的命令(command)。 它的格式为: target: dependency_files command 例如,有两个文件分别为hello.c和hello.h,创建的目标体为hello.o,执行的命令为gcc 编译指令:gcc c hello.c,那么,对应的Makefile就可以写为: #The simplest example hello.o: hello.c hello.h gcc c hello.c o hello.o 接着就可以使用make了。使用make的格式为:make target,这样make就会自动读 入Makefile(也可以是首字母小写makefile)并执行对应target的command语句,并会 找到相应的依赖文件。 rootlocalhost makefile# make hello.o gcc c hello.c o hello.o rootlocalhost makefile# ls hello.c hello.h hello.o Makefile 可以看到,Makefile执行了“hello.o”对应的命令语句,并生成了“hello.o”目标体。25Make工程管理器vMakefile变量 Makefile中常见预定义变量 Makefile中常见自动变量 在Makefile中还可以使用环境变量。使用环境变量的方法相对比较简单, make在启动时会自动读取系统当前已经定义了的环境变量,并且会创
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号