linux操作系统入门 基本知识ppt课件_第1页
linux操作系统入门 基本知识ppt课件_第2页
linux操作系统入门 基本知识ppt课件_第3页
linux操作系统入门 基本知识ppt课件_第4页
linux操作系统入门 基本知识ppt课件_第5页
已阅读5页,还剩234页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,Welcome!嵌入式Linux系统培训,Linux操作系统入门,2,一周课程安排,一、Linux操作系统结构;常用的Linux Shell命令 二、开发环境使用(ultraedit、nfs、samba、超级终端(wins)、 minicom(linx) Shell编程实验 三、编译器GCC使用;调试器GDB; 项目管理工具MAKE 标准I/O开发,文件I/O操作编程 四、实验:设置编译环境; 文件I/O实验(包括如何实验GCC,MAKE),3,Linux是什么?,Linux是一种计算机操作系统和它的内核的名字。它也是自由软件和开放源代码发展中最著名的例子。,4,Linux是一种?,Lin

2、ux是一种Unix类操作系统 Unix类?,5,Linux的诞生,1991年,Linus Torvalds还是芬兰赫尔辛基大学的一名学生,最初用汇编语言写了一个在80386保护模式下处理多任务切换的程序,后来从Minix中得到灵感,发誓要写一个比Minix更好的Minix,于是开始写了一些硬件的设备驱动程序、一个小的文件系统 这样0.0.1版本的Linux就出来了,但是他必须在有Minix的机器上编译以后才能玩,这时候的Linus已经完全“走火入魔”了,决定完全脱离Minix,于是在1991年10月5号发布了Linux0.0.2版本,这个版本已经可以运行bash(一种用户与操作系统内核通讯的软

3、件)和gcc(GNU C编译器)了,6,Linux的编年史,11991年11月,芬兰赫尔辛基大学的学生Linus Torvalds写了个小程序,取名为Linux,放在互联网上。1993年,在一批高水平黑客的参与下,诞生了Linux1.0版 21994年,Linux的第一个商业发行版Slackware问世 31996年,美国国家标准技术局的计算机系统实验室确认Linux版本1.2.13(由Open Linux公司打包)符合POSIX标准 41999年起,多种Linux的简体中文发行版相继问世。国内自己创建的有Blue Point Linux、Flag Linux、Xterm Linux等,美国有

4、Xlinux、TurboLinux等 52001年,Linux2.4版内核发布 62003年,Linux2.6版内核发布 7现在 i市场上出现多种Linux发行版 iiLinux广泛用于桌面系统、嵌入式系统、网络服务器系统 iii众多大厂商参与Linux的开发工作,Linux可用软件越来越多,7,开启你的Linux旅途,8,第一步,如何使用Vmware打开RedHat Linux 演示.,9,Linux的启动与初始化,Linux Boot Stop,BIOS,open the power,kernel/boot,lilo/grab,mingetty,init,shell,login,-linu

5、x peration,Logon program,引导,启动第一个进程,10,第二步:登陆Linux系统,终端模式 Linux Login Password: 终端提示符 $ # Xwindow模式,Red Hat Linux release 7.3(Valhalla) Kernel 2.4.18-3 on an 1686 localhost login: root Password: 123456 localhost login: root Password:_ Last Login: Sun Sep 11 20: You have new mail. rootlocalhost root#

6、_ localhost login: sunkang Password:_ sunkanglocalhost sunkang$,11,Linux:登陆与退出,logout:退出登录(exit) reboot:重启系统 shutdown:关闭系统 poweroff:关闭系统 halt:系统挂起,12,第三步:如何启动终端,在菜单中,选择“系统设置”-”终端”,13,开始使用“终端”,下面将介绍的是: 1、 Linux操作系统的根文件系统(目录) 2、 Linux操作系统的系统文件结构 3、常用的Linux操作系统shell命令,14,1、 Linux操作系统的根文件系统,FHS:Filesyst

7、em Hierarchy Standard FHS: 规范档案目录的命名及存放标准 大多数Linux系统遵循FHS Linux:目录hd-harddisk;sd-scsi /etc -配置文件,如hosts, lilo.conf, inittab, rc,d(dir), samba/smd.conf等,17,根文件系统,/home,/root -每个用户在home下有一个自己的目录。 -root的在/root -权限和保护 /lost+found -Lost? found!一些丢失的文件可能可以在这里找到 /lib -共享库相关文件 /mnt -mount文件系统到这个目录 如cdrom,fl

8、oppy,18,根文件系统,/var -执行中记录数据 /proc -内存文件,报告程序执行的在线动态信息 -如进程id数字目录,sys, net 等 (/proc/sys/net/目录主要包括了许多网络相关的主题,例如:appletalk/,ethernet/,ipv4/,ipx/,及ipv6/。通过改变这些目录中的文件,网络管理员能够在系统运行时调整相关网络参数) /sbin -启动时需要,系统管理员程序工具、配置等 -如fsck(修复分区), lilo(安装引导程序), init(内核启动的第一个用户进程), fdisk等 /tmp -临时文件夹 /usr -用户应用程序和文件,19,2

9、、 Linux文件系统结构,应用程序,存储设备,RelserFS,VFS,文件访问请求,文件系统,EXT3,设备驱动程序,NTFS,ISO9660,Virtual File System是Linux内核中的一个软件层,用于给用户空间的程序提供文件系统接口。 它提供了内核中的一个抽象功能,允许不同的文件系统共存。 VFS提供统一的接口(open,read,write.)访问不同的实际文件系统,所以Linux系统可以同时支持多种文件系统 一个文件系统通常占用一个逻辑分区,20,EXT2 -The Second Extended File System,EXT2文件系统的整体结构和布局,超级块:文件

10、系统基本信息的描述,包括文件系统大小,状态 组描述符:描述每个块组的控制和统计信息 I节点:用于描述一个文件或目录、模式、拥有者信息、文件大小、时间标志、数据块指针,21,EXT3,EXT2的加强版本:EXT3 EXT3是一种日志文件系统:它会将磁盘的写入动作完整记录在磁盘的某个区域上,以免突然情况下发生不一致现象。 资料有效性 资料完整性 tune2fs:将ext2文件系统的分区转移成ext3文件系统的分区,22,设备也是一个文件,23,3、常用的Linux操作系统shell命令,内核信息 关于当前内核的基本信息 - uname命令:uname a (显示内核基本信息) :例如:2.4.18

11、 内核版本 - major.minor.patchlevel 核心版本.主号(偶数为稳定版本).第几次的修改(从0开始) 内核源文件所在目录 -内核源码通常被置于:/usr/src/linux下,24,目录相关的命令,cd:change directory,切换到其他目录 格式:cd directory 例:# cd /usr pwd:present working directory,显示当前路径 格式:pwd,25,实例,进入/usr 进入/usr/src/linux 1、cd src/linux 2、cd ./src/linux 3、cd src; cd linux 回到 /usr 1、

12、cd/usr 2、cd ./. (回到根目录) 进入/home 1、cd ./home,26,ls,ls命令用于显示目录内容,类似DOS下的dir。 ls optionsfilename 主要参数: -a,-all:列出所有文件,包括隐藏文件; -l:使用较长格式列出信息; -m:所有项目以逗号分隔,并填满整行行宽; -R,-recursive:同时列出所有子目录层; 蓝色表示是目录,绿色表示是可执行文件,红色表示是压缩文件,浅蓝色 表示是链接文件,灰色表示是其他格式文件。ls最常使用的是ls -l。其别名为ll。,27,文件操作相关的命令,mkdir: make directory,创建一个

13、文件夹 -如 mkdir temp rmdir:remove directory, 删除目录(要求目录是空的) -如 rmdir temp,28,cp and mv,cp option (可有可无) 源地址 目的地址 如: cp file1 file2 将文件file1复制成file2。 cp file1 dir1 将文件file1复制到目录dir1下。 cp /tmp/file1 file2 cp r dir1 dir2 复制整个目录。 mv option 源地址 目的地址 mv file1 file2 将文件file1更名为file2。 mv file1 dir1 将文件file1移到目录

14、dir1下。 mv dir1 dir2 将目录dir1更改为目录dir2。,29,rm,rm file1删除文件名为file1的文件。 rm file?删除文件名中有五个字符且前四个字符为file的所有文件。 rm f*删除文件名中以f为字首的所有文件。 rm r dir1删除目录dir1及其子目录下所有文件。 rm rf dir1不须确认,-force(强制),30,file,file通过探测文件内容判断文件类型。 fileoption文件名 使用file命令可以知道某个文件究竟是二进制的可执行文件,还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、Sh

15、ell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。 file grap grap: English text file命令不能探测包括图形、音频、视频等多媒体文件类型。,31,帮助命令,man:用户手册(mannual) 手册的章节 格式:man command man man man -S 2 read info:读取info版的帮助文档 格式:info command info info whatis:从whatis数据库里找某个命令的简单描述 格式:whatis command whatis man Apropos:从whatis数据库中找某个字符串 格

16、式:apropos keyword apropos print -help:命令参数,显示简单的用户帮助 格式:command - - help,32,ln,ln命令用来在文件之间创建链接 lnoption源文件链接名 -s :进行软链接(Symbolic Link) 链接有两种,硬链接(Hard Link)(缺省),符号链接(Symbolic Link) 硬链接指通过索引节点来进行的连接。每个文件都有一个编号,称为索引节点号(Inode Index),33,ln,符号连接(Symbolic Link),也叫软连接。类似于Windows的快捷方式。实际上是一个文本文件,包括有另一文件的位置信息

17、。 如:$ ln -s /usr/local/httpd/htdocs gg 这样每次进入gg目录就可以访问Web服务器的文档,以后如果不再访问Web服务器的文档时,删除gg即可,而真正的Web服务器的文档并没有删除。,34,时间设置,修改系统时间 rootdell vick# date Tue Mar 28 19:20:31 CST 2006 rootdell vick#date -s “Mar 28 19:19” rootdell vick #date -s “2006-3-28 19:19” -s,表示修改日期 修改后执行clock -w 或clock -systohc到硬件时钟,也可以

18、用hwclock命令。,35,Linux的Shell,Shell:外壳,也就是界面 Shell的作用 接受输入 解释接受到的输入信息 输出结果,36,Linux的Shell,Linux下常见的Shell -Sh:Bourne shell -Bash:Bourne Again Shell,最常用 -Csh:C Shell,加州大学伯克利分校,与 Bourne Shell基本兼容,但是程序设计界面有很大不同 -Ksh:Korn Shell,Unix系统下最普遍的 -Tcsh:C Shell的加强版 -Zsh:Z Shell,最新的Shell,与Bourn Shell兼容,37,bourne she

19、ll V7时发布,作者是AT export TEST 查看变量值:#echo $TEST 删除:unset 变量名 #echo $TEST #unset TEST,40,管道符号:|,管道符号是什么?| 管道符号的作用? 将一个命令的输出定向成另一个命令的输入,如:command1|command2,command1的输出将成为command2的输入 通常结合more 注意:在文件所在的当前目录查找,53,find,根据给定的参数在指定目录中查找文件 findpath.expression -find /usr/include -name ”stdio.h” -find . mtime +6

20、mtime -8 6天以前8天以内修改过的文件。 +n,great than n,-n less than n,n exactly n. -find . -size +10c -size -20c 搜索文件介于10byte到20byte之间。 -size nbckw,54,用户管理,useradd,adduser:添加用户 - useradd ahkang passwd:添加用户密码 -#passwd ahkang userdel -#userdel ahkang groupadd :添加组 #groupadd voip groupdel -# groupdel voip Usermod:修改

21、用户名 -#usermod G voip ahkang,(在管理员身份下才可进行),55,文件系统的挂载与卸载,mount:挂载文件系统 格式:mount -t fstype device mount-point 例:mount -t vfat/dev/sda1 /mnt/usbdisk umount:卸载文件系统 格式:umount device OR umount mount-point 例:umount/dev/sda1 系统启动时自动挂载文件系统:/etc/fstab,56,-t type minix, ext2, msdos, vfat(win95/98) nfs, iso9660,

22、 ntfs(winNT), hpfs(OS/2), auto(自动检测文件系统) 列出目前加载的ext2文件系统 mount -t ext2 模拟加载,查看mount的执行过程,配合-v,57,文件系统的挂载与检查,Linux下使用光盘 挂载:mount t iso9660/dev/cdrom/ mnt/cdrom 卸载:umount/dev/cdrom $eject $eject-t (弹出和收回光驱) 检查与修复文件系统 命令:fsck t type device 例:fsck t ext2/dev/hda2,58,/proc文件系统,一种虚拟文件系统:内核和内核模块用来向进程(proce

23、ss)发送信息的机制(所以叫做/proc) 访问方式:基于文件的接口,与其他文件系统一样,只是访问的内容由内核提供,而不是由存储介质提供,59,/proc文件系统,用途 查看计算机信息 查看内核状态 查看运行中的进程信息 运行中改变系统设置 驱动调试 查看/proc文件系统,60,/proc文件系统,cat /proc/cpuinfo CPU cat /proc/interrupts 中断 cat /proc/ioports 设备IO端口 cat /proc/meminfo 内存信息 cat /proc/partitions 所有设备的所有分区 cat /proc/pci PCI设备的信息 c

24、at /proc/swaps 所有Swap分区的信息 cat /proc/versionLinux的版本号 uname a 看系统内核等信息,61,最基本的网络管理,netconfig:进行网络配置 改动的是/etc/sysconfig/network-scripts/ifcfg-eth? ping:用于网络检测 #ping ifconfig:网络配置和网络参数查看 # ifconfig netstat 查看网络状况,62,如果你碰到这些问题?,实际使用中需要两台机器,但是现实太残酷,只有一台配置较好的机器,怎么办? 需要同一时间使用两个操作系统,如一个Windows和一个Linux,怎么办?

25、 如果你想安装一个不熟悉的操作系统,但是对于硬件(特别是硬盘)的操作不熟悉时,为了防止损坏数据,怎么办? 其他问题.,63,常用服务器,Apache (外部服务器) (/usr/local/apache/conf/目录下,三个配置文件httpd.conf, access.conf和srm.conf,来配置Apache服务器的行为. httpd.conf提供了最基本的服务器配置,是对守护程序 httpd怎么样运行的技术描述;srm.conf是服务器的资源映射文件 ) FTP Samba NFS SSHD(网络文件系统) Telnetd DHCP Named Sendmail,64,如何配置文件共

26、享服务(Samba),(1)检查Samba服务是否打开?,65,点击系统设置,选择服务器设置,最后选择服务。 检查samba是否打开,如勾上,就代表打开了。如没有就把smb勾上,再点击“重启”。,66,如何打开tftp服务,67,如何 打开NFS服务(网际文件共享),如samba,68,软件安装,1. 获取源码包 2. 配置编译选项 3. 编译 4. 安装 通常软件会给出自己的安装说明。 tar xvfz aaa.tar.gz; cd aaa; ./configure; make; make install,69,RPM,RPM是Redhat Package Manager的缩写,是由RedH

27、at公司开发的软件包安装和管理程序。 RPM虽然是为Linux而设计的,但是它已经移植到 SunOS、Solaris、AIX、Irix等其它UNIX系统上了。,70,RPM的使用,两种类型的RPM包 src rpm与二进制rpm,前者含有项目的源代码,后者主要为项目的可执行程序。 如:tftp-0.28-2.src.rpm tftp-0.28-2.i386.rpm 项目名-版本号-修改次数.rpm包类型.rpm,71,rpm命令的使用,rpm命令的基本模式 安装:rpm i 查询:rpm q 验证:rpm V 删除:rpm e 制作:rpm b 一般选项: -v 显示信息 -h 用“#“显示完

28、成的进度 -vv 显示调试信息,72,常用的命令形式,以tftp软件包tftp.-0.28.2.i386.rpm为例 安装一个软件包 rpm-ivh tftp-0.28-2.i386.rpm 卸载一个软件包 rpm e tftp 查询一个包内的信息 rpm qiq tftp-0.28-2.i386.rpm 查询一个包内有哪些文件 rpm qlq tftp-0.28-2.i386.rpm,73,常用的命令形式,查询一个包是否被安装 rpm q tftp 查询一个被安装包的信息 rpm qi tftp rpm ql tftp 查询一个包是否被正确安装 rpm V tftp 查询某个文件是被哪个包安

29、装的 rpm qf usr/bin/tftp,74,75,参考资料,Linux一句话精彩问答 Linux权威指南第四版,MATT Welsh等著,洪峰译 精通LinuxStan Kelly-Bootle著,电子工业出版社 Unix入门与提高徐锦波 朱文章,清华大学出版社 Linux入门到精通Arman Danesh著 电子工业出版社 RPM命令大全 Linux内核情景分析 毛德操/胡希明 浙江大学出版社 Unix环境高级编程 Richard Stevens 机械工业出版社 Unix网络编程卷一套接口API和X/Open传输接口API Richard Stevens 清华大学出版社 Unix网络

30、编程卷二 进程间通讯Richard Stevens清华大学出版社,76,Thanks!,谢 谢 !,77,vi 主讲老师:邓耀华,78,演示,用vi写一个“hello world” 过程 vi hello.c i input some c text 按ESC键 :wq,79,Vi与VIM,什么是Vi (*) Y与y$同义; y)复制到下一句的开始: y复制到下一段的开始; nyy复制从当前行开始的n行;(*) y 回车复制两行;(*),88,光标的定位,或k向上移一行 或j向下移一行 或h左移一个字符 或l右移一个字符 CTRL+f 向前(上)移动一满屏幕(forward) CTRL+b 向后

31、(下)移动一满屏幕(backward) CTRL+d 向前(上)移动半屏幕(down) CTRL+u 向后(下)移动半屏幕(up) 0 移到当前行的开始 $移到当前行的结尾 回车符移到下一行的开始 可在命令前加入数字n作为前缀,使相应命令执行n次。,89,光标的定位,nG使光标定位在第n行。 gg光标移动到文件的开头 G光标移动到文件的结尾 :0光标移动到文件的第1行 :n光标移动到文件的第n行 : $光标移动到文件的最后一行,90,回顾,如何由编辑模式进入一般模式? -按ESC 如何移动到一行的开始和结尾? -在一般模式下按0和$ 如何移动到文档的开头和结尾? -移动到开头gg或:1 -移动

32、到结尾G或:$,91,回顾,如何向前或向后翻一页? -Page Down/Page Up -Ctrl+f/Ctrl+b 检索和替换的命令格式? -:addrs/s1/s2/option 如何undo和redo -u,ctrl+r,92,参考文献,入门学习Vim Tutor(运行vimtutor命令) 最快捷的帮助Online Help Doc: -Vim User Manual Websites: -VIM homepage -水木社区VIM版,93,谢 谢 !,94,Welcome!,Linux 下的C/C+编译器 主讲老师:邓耀华,95,GCC编译器,9

33、6,示例,great.c #include void main(void) printf(“hello,how are youn”); vicknec gcc-lab$ gcc o hello hello.c great.c:In functionmain: great.c:3:warning:return type of main is not int,97,GCC,GCC是什么? -GCC:GNU Compiler Collection; -GCC支持多种硬件平台和操作系统,能编译多种语言 (C,C+,Java,Ada95,Objective C, .ect); -GCC与G+的关系: G

34、CC用于编译多种语言编写的程序,主要是C; G+用于编译C+程序,以GCC为基础,编译过程中加入了C+的支持库,参数与GCC基本一致; 可以利用GCC编译C+程序,但是需要在参数中加入引用的C+库,比如;libstdc+(如gcc o out -lstdc+ main.cc)。,98,编译器与库,Preprocessor,Compiler,前端,后端,Optimizer,Assembler,Linker,.o,.s,a.out,.c,C预处理,汇编,优化,语法语义分析,代码生成,链接,GCC编译C源码步骤: 预处理- 编译 - 汇编 - 链接,99,后缀,.c C源代码 .hC头文件 .o目标

35、代码(obj) .s汇编代码文件 C+文件 -file.hh,file.HC+头文件 -file.C,file.cc,file.cxx等C+源文件,100,选项,-E输出预处理结果(输出终端) -S 输出汇编代码(great.s) -c输出目标代码(great.o) -o file 输出名为file的可执行文件名 (缺省为a.out) -O O2 优化编译 -g: 产生可用于调试的输出,101,示例,gcc o main I./include -DDebug g main.c 输出文件 头文件搜索目录 定义宏 用于调试 源文件,102,预处理(Pre-processing),在该阶段,编译器将

36、C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。 用法:#gcc -E hello.c -o hello.i 作用:将hello.c预处理输出hello.i文件。,103,root# gcc -E hello.c -o hello.iroot# lshello.c hello.iroot# vi hello.i,# 1 hello.c# 1 # 1 # 1 hello.c# 1 /usr/include/stdlib.h 1 3# 25 /usr/include/stdlib.h 3# 1 /usr/include/features.h 1 3# 2

37、91 /usr/include/features.h 3# 1 /usr/include/sys/cdefs.h 1 3# 292 /usr/include/features.h 2 3# 314 /usr/include/features.h 3# 1 /usr/include/gnu/stubs.h 1 3# 315 /usr/include/features.h 2 3# 26 /usr/include/stdlib.h 2 3# 3 hello.c 2 void main(void) printf(hello world!rn);,104,编译阶段(Compiling),第二步进行的是

38、编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。 用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码 用法:root# gcc S hello.i o hello.s 作用:将预处理输出文件hello.i汇编成hello.s文件,105,rootrichard hello-gcc# ls hello.c hello.i hello.s 如下为hello.s汇编代码 rootrichard hello-gcc# vi hello.s,.file hello.c.section

39、 .rodata.LC0:.string hello world!rn.text.globl main.type main,functionmain:pushl %ebpmovl %esp, %ebpsubl $8, %espandl $-16, %espmovl $0, %eaxsubl %eax, %espsubl $12, %esppushl $.LC0call printfaddl $16, %espmovl $0, %eaxleaveret.Lfe1:.size main,.Lfe1-main.ident GCC: (GNU) 3.2.2 20030222 (Red Hat Linu

40、x 3.2.2-5),106,汇编阶段(Assembling),汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码. 选项 -c 用法:root# gcc c hello.s o hello.o 作用:将汇编输出文件test.s编译输出test.o文件。,root# gcc -c hello.s -o hello.o root# ls hello.c hello.i hello.o hello.s,107,链接阶段(Link),在成功编译之后,就进入了链接阶段。 无选项链接 用法:root# gcc hello.o o hello.exe 作用:将编译输出文件hello.o链接成最终可执

41、行文件hello.exe。 root# ls hello.c hello.exe hello.i hello.o hello.s,108,运行该可执行文件,出现正确的结果如下。 rootlocalhost Gcc# ./hello Hello World! 在这里涉及到一个重要的概念:函数库。 程序中并没有定义”printf”的函数实现,且在预编译中包含进的”stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现”printf”函数的呢? 系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径”/usr/lib”下

42、进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数”printf” 了,而这也就是链接的作用。,109,你可以用ldd命令查看动态库加载情况: root# ldd hello.exe libc.so.6 = /lib/tls/libc.so.6 (0 x42000000) /lib/ld-linux.so.2 = /lib/ld-linux.so.2 (0 x40000000),110,与库和路径相关选项,-l name链接库文件名为libname.a 或libname.so的库 -I dir 在dir这个目录寻找被include的文件 -L dir在dir这个目录寻找被-L

43、的库,111,Thanks!,谢 谢 !,112,Makefile 主讲老师:邓耀华,113,想一想,一个工程含有20个.c文件,18个.h文件,每次改完程序,比如说改动了一个头文件1.h,重新将20个文件编译一次,还是说只编译含有1.h的那个文件? 如果选前者,当工程增加到100个文件,每编译一次等待的时间是否可以容忍? 如果选后者,要记住哪个.c包含了1.h,如果记漏了,会出现什么情况。,114,make和makefile,在shell的提示符号下,键入“make”,则它会到当前的目录下先后找寻“makefile”和”Makefile”文件,并按该文件所记录的规则执行相应的动作。 make

44、与makefile 的作用 自动化:一条命令均可 灵敏:只涉及新变动的部分 管理作用:管中窥豹,115,一个简单的makefile,CC=gcc (定义变量“CC”,将gcc赋值给CC) foo : foo.c (规则) $(CC) o foo foo.c (这一行,必须使用一个tab字符,$:应用变量) 完成编译,保存为makefile,在shell命令下输入make命令即可使用,myprog:foo.o bar.o gcc foo.o bar.o o myprog foo.o:foo.c foo.h bar.h gcc c foo.c o foo.o bar.o:bar.c bar.h g

45、cc c bar.c o bar.o,116,makefile基本内容,1、解释与续行 任何以“#”为开头的文字皆为解释,需要续行时键入字符,然后紧跟回车。 2、变量,或宏(variable or macro) 如:CFLAGS=-Wall O g 3、规则,由目标、依赖和命令组成。 target. : prerequisites(依赖). (这里必须按Tab键)command. . 这里必须是一个tab键导致的空白。,117,make的行为准则,1、make把第一个目标做为其最终目标。如果在make调用时指定目标,就以指定的目标为最终目标,如make clean。然后处理含有这个目标的规则。

46、 2、处理规则,如果规则的目标不存在或存在但比依赖中的某个旧,则执行规则中的命令。 注意!在查看目标是否存在或查看依赖是否比当前新之前,先看看依赖中的每一项,本身是不是某条规则的目标,如果是,先处理那条规则。,118,一个简单的makefile,make 把第一个目标myprog做为其主要目标 1、比较myprog的第一个依赖foo.o是否比myprog新,比较之前,先查找foo.o是否为其它规则的目标。 2、找到关于foo.o的规则,该文件的依赖文件是foo.c,foo.h和bar.h 3、再找这些依赖是否为别的规则的目标,找不到,开始检查这些依赖文件是否比foo.o新。如果这些文件中任何一

47、个的修改时间比foo.o的新,命令gcc o foo.o foo.c将会执行,从而更新文件foo.o。如果找不到,则不动作。 4、处理第二个依赖bar.o. 5、处理完foo.o和bar.o,然后比较看是否比myprog新。如果myprog不存在,或者存在但比文件foo.o或bar.o中的任何一个旧,则执行gcc foo.o bar.o o myprog。如果不新,不动作。,119,使用变量替换,OBJS=foo.o bar.o CC=gcc CFLAGS=-Wall O g (-o -o1 -o2 -o3表示优化的级别,-o是最小,-o3最高) myprog:$( OBJS) $(CC)$(

48、 OBJS) o myprog foo.o: foo.c foo.h bar.h $(CC)$( CFLAGS) c foo.c o foo.o bar.o: bar.c bar.h $(CC)$( CFLAGS) c bar.c o bar.o(先编译bar文件,) 等效于:gcc Wall o g c bar.c o bar.o,120,使用内建变量,$ 当前规则的目标 $ 当前规则的第一个依赖 $ 当前规则的所有依赖 $? 当前规则中所有比目标新的依赖 $* stem which an implicit rule matches foo.o: foo.c foo.h bar.h $ fo

49、o.o $ foo.c $ foo.c foo.h bar.h $? bar.h(假设只改了bar.h),121,使用内建变量,OBJS=foo.o bar.o CC=gcc CFLAGS=-Wall O g (所有警告信息;优化;调试) myprog:$( OBJS) $(CC)$ -o $(当前规则的目标,表示输出的是myprog) foo.o: foo.c foo.h bar.h $(CC)$( CFLAGS) c $ -o $ bar.o: bar.c bar.h $(CC)$( CFLAGS) c $-o $,122,谢 谢 !,123,Welcome,GDB 主讲老师:邓耀华,12

50、4,GDB概述,GDB(GNU Debugger),是Linux/Unix下强大的程序调试工具。 -在被监控的环境下运行程序 -可以为程序设置断点,使程序运行期间暂停 -检查程序的运行状态 -动态改变程序的运行环境 很多图形调试工具诸如Data Display Debugger(DDD)是使用gdb作为后台来工作的。,125,GDB使用基础,编译程序 编译选项中加入-g参数,并且不要使用优化参数-O或-O2 如:gcc g exel.c o exel 启动GDB 方法1:gdb exel 方法2:gdb (gdb)file exel 方法n:. 启动程序:利用r或run命令 如何退出gdb (

51、gdb)quit,126,断点,-设置断点 break funcl break 35 break test.c:18 break test.c:func2 查看中断信息 info break 条件中断 break 5 if i=7 带条件中断 condition 1 i=9 更改条件 condition 1清除条件,127,vicknec gdb_lab$ cat moon.c n #include void goto_the_moon(int ary) int i; for(i=0;i100;i+) aryi=i; int main() int i,ary100; for(i=0;i10;i

52、+) printf(“i=%drn”,i); goto_the_moon(ary); return 0; vicknec gdb_lab$ gcc moon.c g o moon,128,GDB调试方法,单步调试程序 step:单步调试 next:单步调试,但不进入要调用的函 数 until:运行程序直到退出循环体 finish:运行程序直到从函数返回 return value:停止函数运行,返回value stepi/nexti:机器指令的单步调试,129,vicknec gdb_lab$gdb moon -q (gdb)break 12 Breakpoint 1 at 0 x80484b0

53、:file moon.c,line 12. (gdb)break goto the_moon Breakpoint 2 at 0 x8048466:file moon.c,1ine 5 (gdb)r Starting program:/home/vick/aka/gdb_lab/moon Breakpoint 1,main() at moon.c:12 12 printf(“i=drn”,i); (gdb)n i=0 11 for(i=0;i10;i+) (gdb)n Breakpoint 1,main() at moon.c:12 12 printf(“i=drn”,i); (gdb),13

54、0,(gdb)clear 12 Deleted breakpoint 1 (gdb)info break Num Type Disp Enb Address What 2 breakpoint keep y 0 x08048466 in goto_the_moon at moon.c:5 (gdb)n i=1 11 for(i=0;i10;i+) (gdb) until i=2 i=9 13 goto the moon(ary); (gdb),131,(gdb)c Continuing Breakpoint 2,goto_the_moon(ary=oxbffff8b0)at moon.c:5

55、5 for(i=0;i100; i+) (gdb)n 6 aryi=i; (gdb) fin Run till exit from #0 goto_the_moon(ary=oxbffff8b0)at moon.c:6 x080484db in main() at moon.c:13 13 goto_the_moon(ary); (gdb) n 14 return 0; (gdb),132,vicknec gdb_lab$gdb moon -q (gdb)break l3 Breakpoint 1 at 0 x80484cc: file moon.c,line 13. (gdb) r Star

56、ting program:/home/vick/aka/gdb_lab/moon Breakpoint 1,main() at moon.c: 13 13 goto_the_moon(ary); (gdb)s goto_the_moon(ary=0 xbffff8b0)at moon.c:5 5 for(i=0;i100;i+) (gdb) return 3 Make goto_the_moon return now?(y or n) y #0 0 x080484db in main() at moon.c:13 13 goto_the_moon(ary); (gdb) print i $l=

57、10 (gdb) quit The program is running. Exit anyway?(y or n) y vicknec gdb_lab$,133,断点和观察点,设置观察点(watch point) 观察点用于当某个表达式的值有变化,或被读写,程序暂停执行; watch 写 rwatch读 awatch读/写 info watchpoints 断点和观察点都是停止点。,134,取消和使能停止点,delete和clear clear func1 clear test1.c:func2 clear 6 clear test2.c 15 delete 2 *注意clear的是行号,d

58、elete的是断点号 disable和enable disable 2 enable 2 info breakpoints,135,设置命令行参数,在GDB中运行程序 -设置程序命令行参数:set args -show args显示命令行参数 例子: vicknec gdb_lab$ cat argc.c include int main(int argc,char *argv) printf(“sum=%drn”,atio(argv1)+atio(argv2); return 0; vicknec gdb_lab$./argc 3 5 sum=8,136,设置命令行参数,vicknec gd

59、b_lab$ gdb argc GNU gdb Red Hat Linux 7.x(5.0rh-15)(MI_OUT) . (gdb)set args 3 5 (gdb)r Starting program:/home/vick/aka/gdb_lab/argc 3 5 sum=8 Program exited normally. (gdb),137,查看数据,查看运行时数据 -print i+j+3 -printf”i=%drn”,i 如果有重名怎么办? -print foo.c:baz -print fun1:var0 查看数组 -print array1 -print *array10 列出前10个 -print array510 列出array5array15,138,vicknec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论