湖北理工学院专升本嵌入式知识点总结_第1页
湖北理工学院专升本嵌入式知识点总结_第2页
湖北理工学院专升本嵌入式知识点总结_第3页
湖北理工学院专升本嵌入式知识点总结_第4页
湖北理工学院专升本嵌入式知识点总结_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、第一章1, 嵌入式系统发展的4个阶段(书2)2, 嵌入式的发展趋势(书2)3, 嵌入式的定义,组成与特点(书3)第三章4, 嵌入式的基本特征(书11)5, 嵌入式处理器分类(书12)6, Cortex A8 处理器(书27)第四章7, 嵌入式操作系统的特征(书83)8,嵌入式linux操作系统的特点(书87)第1章 嵌入式系统概述1.1 嵌入式系统的发展史l 1.1.1嵌入式系统发展的4个阶段l 1.1.2嵌入式系统的发展趋势l 1.2 嵌入式系统的定义、组成与特点l 1.2.1嵌入式系统的定义l 1.2.2嵌入式系统的组成l 1.2.3嵌入式系统的特点嵌入式系统的应用领域嵌入式设计中,也产生

2、了阶段性的开发方式和多级产业链。电子专业和计算机专业在嵌入式系统中产生了融合,它们可以嵌入式系统的下层和上层设计。由于嵌入式系统与客观的对象有着很强的交互性,它与工业控制、通讯的等学科的联系也非常紧密。嵌入式系统的发展史单片机模式和计算机模式嵌入式系统发展的4个阶段1、以微控制器为核心的无操作系统阶段2、以嵌入式微处理器为基础的简单操作系统阶段3、以嵌入式操作系统为标志的中级嵌入式系统4、以Internet为标志的高级嵌入式系统嵌入式系统的发展趋势1、支持小型电子设备实现小尺寸、微功耗和低成本2、提供精巧的多媒体人机界面一个普遍被认同的嵌入式系统的定义以应用为中心、以计算机技术为基础、软件硬件

3、可裁剪、适应应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用 计算机系统。嵌入式系统的组成微处理器,外围硬件,嵌入式操作系统,应用程序,(开发环境)1 微处理器微处理器是嵌入式系统的核心。嵌入式微处理器一般都具有较高的集成度。嵌入式微处理器一般包含通用计算机CPU和芯片组的功能。2 外围硬件外围硬件是嵌入式系统处理器以外的硬件,它为系统提供了运行条件和部分功能。在运行条件方面,最基础的是时钟和电源部件,它们不可能集成到处理器内部,但它们对于处理器运转是必需的。外围硬件也将提供在系统中需要,但是微处理器内部不具有的功能,如:内存、各种通讯端口等。3 嵌入式操作系统嵌入式操作系统的作用一般

4、只是为了应用程序提供必要运行环境(任务调度),附加任务通讯、内存管理等功能。嵌入式系统和系统的硬件基础关系紧密,一般都需要移植和配置才可以使用。嵌入式操作系统让嵌入式系统的开发利用通用的功能模块,这可以让开发更加高效。4 应用程序在嵌入式系统中,应用程序的层级远远少于通用计算机。由于控制硬件是嵌入式系统基本的操作,因此嵌入式应用程序依然与系统的硬件基础关系密切。尤其在没有操作系统的情况下,嵌入式的应用程序需要直接访问寄存器或者设备的地址来操作硬件。5 开发环境开发环境并不是嵌入式系统产品的一部分,但是它在嵌入式系统的产品的开发过程中起着至关重要的作用。不同嵌入式系统的开发环境差异是很大的。嵌入

5、式系统的特点特定的设计,各学科结合的产物,高效的设计,与具体应用相结合,存储特性,交叉开发开发平台1、装有Ubuntu系统或装有Ubuntu虚拟机的PC机一台;2、凌阳A8嵌入式实验箱一台;操作系统(1)Linux在所有的操作系统中,Linux是一个发展最快、应用最为广泛的操作系统。Linux本身的种种特性使其成为嵌入式开发中的首选。(2)mC/OS它的特点是:公开源代码,代码结构清晰,注释详尽,组织有条理,可移植性好;可裁剪,可固化;抢占式内核,最多可以管理60个任务。(3)Windows CEWindows CE是微软的产品,它是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操

6、作系统。(4)VxWorksVxWorks是WindRiver公司专门为实时嵌入式系统设计开发的操作系统软件,为程序员提供了高效的实时任务调度、中断管理,实时的系统资源以及实时的任务间通信。(5)QNX这也是一款实时操作系统,由加拿大QNX软件系统有限公司开发。广泛应用于自动化、控制、机器人科学、电信、数据通信、航空航天、计算机网络系统、医疗仪器设备、交通运输、安全防卫系统、POS机、零售机等任务关键型应用领域。linux背景知识Unix:Unix是1969年AT&T贝尔实验室创造的一种健壮、灵活的操作系统。特点是:可靠性高、伸缩性强、开放性好、植根于网络、强大的数据库支持功能。GNU: GN

7、U是GNUs not UNIX的缩写。 GNU Project开始于1984年,由自由软件基金(FSF ,Free SoftwareFoundation)支持,目的是为了建立免费的UNIX系统。Free Software :自由软件。free并不是免费。使用者有使用、研究、修改、发布的自由。如此整个社群都能受惠,前提是获取或开放源码。GPL:General Public License 通用公共授权。Copyleft :Copyleft带有标准的copyright声明,确认作者的所有权和标志。但它放弃了标准copyright中暗含的一些其它权利:它声明,你不但可以自由分发该成果,你也可以自由地

8、修改它。但你不能声明你做了原始的工作,或声明是由他人做的。最终,所有派生的工作必须遵循这些条款。嵌入式LinuxLinux起源于芬兰一个名为Linus Torvalds的业余爱好,是最为流行的一款开放源代码的操作系统。Linux 1991年问世,现在已经发展成为一个功能强大、设计完善的操作系统。Linux系统现已成为嵌入式操作系统的理想选择。嵌入式Linux源码开放、免费,同时提供强大功能,包括支持多种文件系统、内置TCP/IP等网络协议、支持图形用户界面,并且易于移植。嵌入式Linux特点开放源代码、模块化设计,稳定性好,网络功能强大,跨平台Linux 的发行版本Ubuntu,Red Hat

9、,Fedora,OpenSUSE,Debian,Mandriva,Mint,PCLinuxOS,Slackware,Gentoo,CentOS典型的嵌入式处理器ARMARM 公司是全球领先的16/32 位RISC 微处理器知识产权设计供应商。ARM 公司通过将其高性能、低成本、低功耗的RISC 微处理器,外围和系统芯片设计技术转让给合作伙伴来生产各具特色的芯片。ARM 公司已成为移动通信、手持设备、多媒体数字消费嵌入式解决方案的RISC 标准。ARM 处理器的3 大特点:小体积、低功耗、低成本而高性能; 16/32 位双指令集;全球众多的合作伙伴CORTEX-A8本实验箱采用三星公司的ARM

10、CORTEX-A8内核的S5PV210芯片作为处理器。 该芯片又名“蜂鸟”(Hummingbird),是三星推出的一款适用于智能手机和平板电脑等多媒体设备的应用处理器,主频可达1GHZ,64/32 位内部总线结构,32/32KB 的数据/指令一级缓存,512KB 的二级缓存,可以实现2000DMIPS(每秒运算2 亿条指令集)的高性能运算能力。Cortex-A8采用了复杂的流水线构架,是ARM公司第一款超级标量处理器。S5PV210 的存储控制器支持LPDDR1,LPDDR2 和DDR2 类型的RAM,Flash 支持Nandflash,Norflash,OneNand 等,外围接口丰富。本实

11、验箱包括以下资源:S5PV210 核心处理器,1GBytes DDRII,1GBytes NAND Flash,UART 接口,USB2.0 接口(HOST/OTG),以太网接口,GPRS 接口,GPS 接口,Zigbee 无线通信接口,FM 收音机接口 等。实验箱资源完备,支持多种方式启动,例如SD 卡启动、NAND 启动等。一般情况下,更新系统时采用SD卡启动,正常情况都采用NAND启动,即自动运行NANDFLASH中的UBOOT,从而启动系统。(1)系统在出厂时默认的启动方式是Nand 启动,启动之前确认核心板旁边的拨码开关(SW1)的第二位置“ON”端,其余的拨至“OFF”端。(2)将

12、实验箱核心板左侧的拨码开关的第3和第4位,设置为ON,其余设置为OFF;即为SD卡启动。并将制作好的SD卡插入实验箱右下角的“SD2”插槽内。嵌入式Linux开发流程建立开发环境操作系统一般使用Linux的某个发行版,在本课程中采用Ubuntu10.10,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如arm-linux-gcc),或者安装产品厂家提供的交叉编译器。配置开发主机配置MINICOM,一般参数为波特率115200,数据位8位,停止位1,无奇偶校验,软硬件控制流设为无。在WINDOWS下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板信

13、息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。建立引导装载程序BootLoader从网络上下载一些公开源代码的BootLoader,如U-Boot、BLOB、VIVI、LILO、ARM-Boot、Redboot等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9系列芯片,这样就需要编写烧写开发板上flash的烧写程序,网络上有免费下载的WINDOWS下通过JTAG并口简易仿真器烧写ARM外围flash芯片的程序。也有LINUX下公开源代码的J-Flash程序。如果不能烧写自己的开发

14、板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂家的仿真器当然比较容易烧写flash了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。下载别人已经移植好的Linux操作系统,如uCLinux、ARM-Linux、PPC-Linux等,如果有专门针对你所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU 的CPU 可以使用模块方式调试驱动,对于uCLinux这样的系统好像只能编译进内核进行调试。建立根文件系统可以使用BusyBox软件进行功能裁减,产

15、生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。可以修改根文件系统中默认的启动脚本,来适应应用的需要。启动脚本存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs 、genromfs等工具产生烧写映象文件。建立应用程序的flash磁盘分区,一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性Flash(NOR 型)512K32

16、M,有的系统使用非线性Flash(NAND 型)8512M,有的两个同时使用,需要根据应用规划Flash的分区方案。嵌入式Linux开发环境搭建流程环境配置步骤1、连接PC机与实验箱2、制作引导卡(SD卡)3、复制Linux镜像文件4、烧写系统(烧写过程不考)首次启动1、将实验箱设置为由Nand Flash启动,开关2设置为ON,其余均为OFF。2、按下实验箱的RESET按键,或者POWER_ON按键。3、烧写后的首次启动需要进行坐标校验。(30秒内)4、如需重新校验,在终端执行/usr/local/tslib/bin/ts_calibrate开发机环境要求开发机(PC机)运行嵌入式Linux

17、操作系统。本课程选择发行版Ubuntu10.10系统,并且使用虚拟机运行。网络环境配置手动配置的方式为实验箱分配IP地址-i后面的参数是实验箱的IP地址;-m后面的参数是子网掩码;-g后面的参数是网关地址。如果不需要网关,可以将-g和其后面的参数省略。设置完成之后,需要执行“servicenetwork restart”命令重启网络服务,使设置生效。如需查看实验箱当前的IP地址,可以执行命令“ifconfig eth0”。windows到实验箱的/root目录。在地址栏输入:ftp:/A8的IP地址,即可访问/root目录。Ubuntu下运行效果第五章9,shell编程(书119)10,mak

18、efile(书158)第六章11,bootloader的基本概念(书179)第七章12,linux内核的功能(书193)13,linux内核的特点(书195)1 、Linux 简介2 、Linux 目录结构3 、Linux 常用命令4 、Linux 文件访问5 、Shell 编程Linux简介一个典型的Linux发行版包括:Linux内核,一些GNU程序库和工具,命令行shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。红帽(Redhat)、Ubuntu等Linux的发展离不开GNU ( GNU 在英

19、文中原意为非洲牛羚,这里是GNU isNot Unix 的递归缩写), GNU计划又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的,它的目标是创建一套完全自由的操作系统。GNU计划开发出了许多高质量的免费软件,如:GCC、GDB、Bash Shell等,这些软件为Linux的开发创造了基本的环境,是Linux发展的重要基础,因此,严格来讲,Linux应该被称为GNU/Linux。Linux一般目录结构/bin : 存放常用命令,例如cp,ls等l /boot: 存放系统内核以及启动管理器,类似grubl /dev:存放设备文件l /etc: 存放相应的系统配置

20、文件l /home:用户工作根目录l /lib: 存放系统最基本的动态链接共享库l /root:超级用户的工作目录l /sbin:系统管理员的常用管理程序,是系统级的可执行文件l /tmp: 存放临时文件l /lost+found:系统出现异常时,用于保存部分资料,存放在文件系统修复时恢复的文件/misc : 一些实用工具l /mnt: 光驱、硬盘等的挂载点l /media: 光驱的自动挂载点l /proc: 操作系统的实时信息l /sys: 系统中的硬件设备信息l /srv: 服务启动后需要提取的信息,特定服务的文件l /var:主要存放系统日志l /usr:存放用户程序l /tftpboo

21、t: tftp服务器的服务目录l /selinux:系统提供的selinux安全程序,存放提供强制访问控制的相应文件Ubuntu 10.10发行版中另有以下目录l /cdrom:Ubuntu系统安装光盘镜像的挂载位置,这个目录根据用户的实际情况而存在,有些系统中可能没有。l /opt:用于存放安装时“可选”的程序。Linux常用命令进入Linux系统,必须要输入用户的账号,在系统安装过程中可以创建以下两种帐号:l 1root-超级用户帐号(系统管理员),使用这个帐号可以在系统中做任何事情。l 2普通用户-这个帐号供普通用户使用,可以进行有限的操作。l 一般的Linux使用者均为普通用户,而系统

22、管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一些由普通帐号就能完成的任务,建议不要使用超级用户帐号,以免无意中破坏系统,影响系统的正常运行。用户登录分两步:l 第一步,输入用户的登录名l 第二步,输入用户的口令l 当用户正确地输入用户名和口令后,就能合法地进入系统。屏幕显示:l rootloclhost /root #l 这时就可以对系统做各种操作了。超级用户的提示符是“#”,其他用户的提示符是“$”。Linux常用命令添加用户 useradd,切换用户 su,格式:su 选项用户名,范例:su root /切换到root用户/并将root的环境变量同时带入修改用户密码 p

23、asswd,格式:passwd 选项 用户名关机 shutdown复制 cp,移动(剪切)mv,删除 rm,创建目录 mkdir,切换目录 cd显示当前目录绝对路径 pwd,查看 ls,挂载 mount,网络配置 ifconfig/ipconfig解压/压缩 tar,格式:tar 选项 目录或文件,范例:l 1.tar cvf tmp.tar /home/tmpl 将/home/tmp目录下的所有文件和目录打包成一个tmp.tar文件l 2.tar xvf tmp.tar 目录l 将打包文件tmp.tar在当前目录下解开3.tar cvzf tmp.tar.gz /home/tmpl 将/ho

24、me/tmp目录下的所有文件和目录打包并压缩成一个tmp.tar.gz文件l 4.tar xvzf tmp.tar.gzl 将打包压缩文件tmp.tar.gz在当前目录下解开解压zip文件 unzip格式:unzip 选项 压缩文件名.zip范例:l unzip tmp.zip解压tmp.zip文件tar命令常用参数介绍l -f 使用归档文件,-z 通过gzip过滤归档,-v 详细列出处理的文件,-x 解压,-c 打包Linux文件访问访问权限l 系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问文件。或目录的访问权限分为只读,只写和可执行三种。有三种不同

25、类型的用户可对文件或目录进行访问:文件所有者,与所有者同组的用户、其他用户。所有者一般是文件的创建者。每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件所有者的读、写和执行权限;与所有者同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:l $ ls -l sobsrc. tgzl -rw-r-r- 1 root root 483997 Ju1 l5 17:3l sobsrc. Tgz注意这里共有10个位置。第一个字符指定了文件类型,d表示目录;c表示字符设备文件;s表示套接字文件;b表示块

26、设备文件;p表示命名管道文件;-表示普通文件。r代表只读,w代表写,x代表可执行,-代表无该项权限。修改文件权限 chmod格式:chmod who + | - | = mode 文件名参数:l who:l u 表示文件的所有者。l g 表示与文件所有者同组的用户。l o 表示“其他用户”。l a 表示“所有用户”。它是系统默认值。l mode:l + 添加某个权限l - 取消某个权限l = 赋予给定权限l例:chmod g+w hello.cl例:chmod 761 hello.cshell编程什么是Shell?l 简单地讲,就是命令解析器,将用户输入的指令转换为相应的机器能够运行的程序。种

27、类l Bourne shell (sh),Korn shell (ksh),Bourne Again shell (bash), C shell (包括csh and tcsh) TENEX/TOPS C shell (tcsh)Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Sh

28、ell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。可以打开文件/etc/shells查看系统中所有已知(不一定已安装)的Shell。用户的默认Shell设置在/etc/passwd文件中。用户在命令行输入命令后

29、,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。以前学过的cd、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手册中查看内建命令,可以使用以下命令。l $ man bash-builtinsl Linux有很多内建命令,如export、shift、if、eval、for、while等等。内建命令虽然不创建新的进程,但也会有ExitStatus,通常也用0表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束

30、后也会有一个状态码,也可以用特殊变量$?读出。Shell脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到执行。在shell编程中,所有的变量都由字符串组成,并且不需要预先对变量进行声明,例eg1:hello.sh:l #!/bin/shl #set variable a /#开头的句子表示注释直到这一行的结束l a=hello worldl # print al echo a is:l echo $al若要执行以上脚本文件,需要修改hello.sh的权限或者把文件名改为script.sh。有时候变量名很容易与其他文字混淆,比如eg1:l num=2l e

31、cho this is the $numnd“l思考:输出?Why?l注意:1. 变量赋值时,“=”左右两边都不能有空格否则会被Shell解释成命令和命令行参数。l2. BASH 中的语句结尾不需要分号num=2l echo this is the $numndl 这并不会打印出this is the 2nd,而仅仅打印this is the ,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num 变量:l num=2l echo this is the $numndl 这将打印: this is the 2ndShell中的变量

32、可分为局部变量、环境变量、位置变量三种。Shell语言是一种解释型语言,它与C或Java语言不同,编程时无需事先声明变量。当对一个变量进行赋值时,也就定义了变量。局部变量指的是只在当前的进程和程序中有效的变量。shell程序的变量是无数据类型的,可以使用同一个变量存放不同数据类型的值。变量赋值之后,只需在变量前面加一个$符号即可访问变量的值。可以用赋值符号=为变量赋值。变量的值如果是不带空格的字符串,则可以不加引号。变量输出使用的命令是echo。eg2:shell脚本中变量的定义与赋值。#!/bin/bash#eg2.sha=123 #直接为变量赋值b=1.23c=xyzd=efgh xyze

33、=efgh xyzecho $a #打印变量的值echo $becho $cecho $decho $e环境变量是在一个用户的所有进程中都可以访问的变量。系统中常常使用环境变量来存储常用的信息。使用export命令可以查看系统的环境变量列表。环境变量的访问:需要在一个环境变量的前面加一个$符号环境变量的定义:使用export命令定义环境变量。环境变的名称一般都是大写的。l export XX=1234l echo $XX在系统配置文件中定义环境变量 :上面定义的环境变量,只在当前shell中运行的所有进程中有效。系统重启后失效。同学们可以试一下在系统配置中加入这些环境变量的定义。在环境变量配置

34、文件/etc/profile中定义两个环境变量:l export A1=hellol export A2=12345位置变量:是shell程序在运行时传入的参数。程序中可以用变量的形式来调用这些参数。这些参数被存放在1到9的9个特殊变量名中,被形象的称为位置变量。同普通变量一样,位置变量用$前缀加数字来表示。l $# :传入脚本的命令行参数个数l $* :所有命令行参数值,在各个参数值之间留有空格l $0 :命令本身(shell文件名)l $1 :第一个命令行参数l $2 :第二个命令行参数eg3:l #!/bin/shl echo number of vars:$#l echo values

35、 of vars:$*l echo value of var1:$1l echo value of var2:$2l echo value of var3:$3l echo value of var4:$4l 运行./eg3.sh 1 2 3 4l 输出结果:?算术运算符:是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。l +:对两个变量做加法。l -:对两个变量做减法。l *:对两个变量做乘法。l /:对两个变量做除法。l *:对两个变量做幂运算。l %:取模运算,第一个变量除以第二个变量求余数。l +=:加等于,在自身基础上加第二个变量。l -=:

36、减等于,在第一个变量的基础上减去第二个变量。l *=:乘等于,在第一个变量的基础上乘以第二个变量。l /=:除等于,在第一个变量的基础上除以第二个变量。l %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。#!/bin/bash#eg4.shs=0 #定义一个求和变量,初值为0。t=expr $1*$2 #用expr改变运算顺序,求参数1的参数2次方。t=$t*3 #t乘以3。s=$s+t #结果相加。t=$1*2 #求x的平方。t=$t*4 #结果乘以4。s=$s+t #结果相加。t=expr $2*5 #求5y的值。s=$s+t #结果相加。s=$s+6 #结果加上6。e

37、cho $s #输出结果。输入指的是shell程序读入数据。有从文件读取、从用户输入读取等方式读入数据。输出指的是shell程序的运行结果的处理,可以显示到屏幕或保存到文件。echo命令输出结果:echo命令可以输出文本或变量的值,是shell中最常用的输出方式。结果可以输出到终端,也可以写入到文件。 例如:l echo $str #将结果输出到终端。l echo $str file #将结果保存到文件file中,如果没有文件会新建一个文件。如果已经有文件则会覆盖以前的文件。l echo $str file #将结果追加到文件file中。l echo输出的内容可以有下面的格式控制字符。l c:

38、末尾加上c表示这一行输出完毕以后不换行。l t:输出一个跳格,相当于按下“Tab”键。l n:输出一个换行。if语句:最常用的条件判断语句,是通过一个条件的真假来决定后面的语句是不是执行。逻辑测试指的是将多个条件进行逻辑运算,常用作循环语句或判断语句的条件。shell程序中有下面三种逻辑测试。l -a:逻辑与,操作符两边均为真时结果为真,否则为结果为假。l -o:逻辑或,操作符两边至少一个为真时,结果为真,否则为假。l ! :逻辑否,只有条件为假时,返回结果为真。比较操作 整数操作 字符串操作l 相同 -eq =,不同 -ne !=,大于 -gt ,小于 -lt ,大于或等于 ge,小于或等于

39、 le,为空 z,不为空 n例:l 比较整数a和b是否相等:if $a = $b (也可用eq)l 判断整数a是否大于整数b:if $a -gt $b l 比较字符串a和b是否相等:if $a = $b l 判断字符串a是否为空: if -z $a l 判断整数变量a是否大于b:if $a -gt $b l 注意:l 1. 在“”和“”符号的左右都留有空格l 2. “=”左右都有空格#!/bin/bash#eg5.shi=$ $1 % 2 if test $i -eq 0 ; thenecho oushuelseecho jishufi-e 文件已经存在l -f 文件是普通文件l -s 文件大

40、小不为零l -d 文件是一个目录l -r 文件对当前用户可以读取l -w 文件对当前用户可以写入l -x 文件对当前用户可以执行eg7:#!/bin/shl folder=/homel -r $folder & echo Can read $folderl -f $folder | echo this is not filefor循环结构与C语言中有所不同,在BASH中for循环的基本结构是:l for var in listl dol #code blockl donel其中$var是循环控制变量,list是var需要遍历的一个集合,do/done 对包含了循环体,相当于C 语言中的一对大括

41、号。另外如果do 和for 被写在同一行,必须在do 前面加上“;”。l 如: for $var in list; doeg8.sh:l #!/bin/bashl for day in Sun Mon Tue Wed Thu Fri Satl dol echo $dayl done如果列表被包含在一对双引号中,则被认为是一个元素,如下:l #!/bin/bashl for day in Sun Mon Tue Wed Thu Fri Sat“l dol echo $dayl done查看修改后脚本的运行结果有什么不一样?练习1:编写shell脚本eg9.sh,统计当前目录下的文件数。实验一:1

42、) 编写shell脚本1.sh判断输入数据的奇偶性;PC:#!/bin/bash#eg5.shi=$ $1 % 2 if test $i -eq 0;thenecho oushuelseecho jishufiA8:#!/bin/sh#eg5.shi=$($1%2)if test $i -eq 0;thenecho oushuelseecho jishufi2) 编写shell脚本2.sh判断文件属性;PC:#!/bin/bashfolder=/home -r $folder & echo Can read $folder -f $folder | echo this is not filei

43、f test -f $file /判断文件是否可读thenecho readableelse echo unreadablefiif test -f $file /判断文件是否可写thenecho writableelse echo unwritablefiif test -f $file /判断文件是否可执行thenecho execelse echo unexecfiA8:#!/bin/shfolder=/root -r $folder & echo Can read $folder -f $folder | echo this is not file3) 编写shell脚本3.sh统计当

44、前目录下的文件数。PC:#!/bin/bashsum=0FILE=ls *for file in $FILEdoif test -f $filethenecho $filelet sum+fidoneecho the number of file is :$sumA8:#!/bin/shsum=0FILE=ls *for file in $FILEdoif test -f $filethenecho $filelet sum+fidoneecho the number of file is :$sum1 、gcc 程序编译l 2 、gdb 调试l 3 、Makefilegcc 程序编译Linu

45、x系统下的gcc(GNU CCompiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%30%。GCC编译器能将C、C+语言源程序、汇编程序编译、链接成可执行文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。使用GCC编译程序时,编译过程可以被细分为四个阶段:l 预处理(Pre-Processing),编译(Compiling),汇编(Assembling),链接(Linking)gcc通过后缀来区别输入文件的类别:l .c为后

46、缀的文件: C语言源代码文件l .a为后缀的文件: 是由目标文件构成的库文件l .C,.cc或.cxx 为后缀的文件: 是C+源代码文件l .h为后缀的文件: 头文件l .i 为后缀的文件: 是已经预处理过的C源代码文件l .ii为后缀的文件: 是已经预处理过的C+源代码文件l .o为后缀的文件: 是编译后的目标文件l .s为后缀的文件: 是汇编语言源代码文件l .S为后缀的文件: 是经过预编译的汇编语言源代码文件。hello.c:l #include l int main(void)l l printf (Hello world!n);l return 0;l l 编译和运行这段程序:l #

47、 gcc hello.c -o hellol # ./hellol 输出:Hello world!gcc最基本的用法是l gcc options filenamesl options:编译器所需要的编译选项l filenames: 要编译的文件名。l gcc编译器的编译选项大约有100多个,其中多数我们根本就用不到,这里只介绍其中最基本、最常用的参数。l -o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-c:只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标

48、文件。-g:产生调试工具(GNU的gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。例题L1.cl #include l int main(void)l l double counter;l double result;l double temp;l for (counter = 0; counter 2000.0 * 2000.0 *

49、2000.0 / 20.0 + 2020;counter+= (5 - 1) / 4)l l temp = counter / 1979;l result = counter;l l printf(Result is %lfn, result);l return 0; 1. gcc L1.c -o L1-1l time ./L1-12. gcc O L1.c -o L1-2l time ./L1-2对比两次执行的输出结果不难看出,程序的性能的确得到了很大幅度的改善【命令】time 执行命令并计时【格式】time -p command arguments.【说明】l 执行命令行command a

50、rguments.,命令行执行结束时在标准输出中打印执行该命令行的时间统计结果,其统计结果包含以下数据:l 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;l 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;l 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条

51、命令时,系统还要处理其它任务。另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。编译选项-Idirname: 将dirname所指出的目录加入到程序头文件目录列表中。l C程序中的头文件包含两种情况l #include l #include “B.h”l对于,预处理程序cpp在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;而对于” ”,cpp在当前目录中搜寻头文件。这个选项的作用是告诉cpp,如果在以上两种情况下的目录中都没有找到需要的文件,就到指定的dirname目录中去寻找。l 例:gcc fb.c -I/root/L

52、inux -o fb编译选项-Ldirname:将dirname所指出的目录加入到库文件的目录列表中。在默认状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后再到系统预设路径中寻找。如果我们使用了函数库,例如jpeg库等。那么在编译的使用以下命令编译l gcc -c fb.c -o fb.o -I/root/jpeg-8bl gcc fb.o -o fb -L/root/jpeg-8b/.libs/ -ljpeg编译选项:-lname:在连接时,装载名字为“libname.a“或“libname.so“的函数

53、库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库。l gcc fb.c -L /root/jpeg-8b/.lib -ljpeg -o fbl -Wall:生成所有警告信息l -w:不生成任何警告信息-static:静态链接库文件l 例:gcc static hello.c -o hellol 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libjpeg.so libname.a。l 当使用静态库时,连接器找出程序所需的函数,然后将它们拷贝到可执行文件,一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言

54、,就不是这样,动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库。练习:静态链接与动态链接可执行文件大小比较。GDB是GNU发布的一款功能强大的程序调试工具。GDB主要完成下面三个方面的功能:l 1、启动被调试程序。l 2、让被调试的程序在指定的位置停住。l 3、当程序被停住时,可以检查程序状态(如变量值)。1.编译生成可执行文件:l gcc -g eg.c -o egl 2.启动GDBl gdb egl 3. 在main函数处设置断点l break mainl 4. 运行程序l runl 5. 单步运行l

55、nextl 6. 继续运行l continue1. gdb 调试程序名l 例:gdb egl 2. gdbl file 调试程序名l file eglist(l) 查看程序l break(b) 函数名在某函数入口处添加断点l break(b) 行号在指定行添加断点l break(b) 文件名:行号在指定文件的指定行添加断点l break(b) 行号 if 条件当条件为真时,指定行号处断点生效,例b 5 if i=10,当i等于10时第5行断点生效l info break 查看所有设置的断点l delete 断点编号删除断点run(r) 开始运行程序l next(n) 单步运行程序(不进入子函数)l step(s) 单步运行程序(进入子函数)l continue(c) 继续运行程序l print(p) 变

温馨提示

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

评论

0/150

提交评论