73
嵌嵌嵌嵌 嵌嵌 Application of embedded S ystem 何何何 [email protected]

嵌入式系统应用 Application of embedded System

Embed Size (px)

DESCRIPTION

嵌入式系统应用 Application of embedded System. 何福贵 [email protected]. 第五部分 基于 Linux 的嵌入式操作系统. Linux 简介 嵌入式 Linux 应用程序的交叉编译 客户机 / 服务器应用程序的实现 GPS 应用程序 GSM/GPRS 应用程序. 1 、 Linux 简介. 1.Linux 简介. Linux 操作系统 - PowerPoint PPT Presentation

Citation preview

Page 1: 嵌入式系统应用 Application of embedded System

嵌入式系统应用Application of embedded System

何福贵[email protected]

Page 2: 嵌入式系统应用 Application of embedded System

第五部分 基于 Linux 的嵌入式操作系统

Page 3: 嵌入式系统应用 Application of embedded System

1 Linux 简介2 嵌入式 Linux3 应用程序的交叉编译4 客户机 / 服务器应用程序的实现5 GPS 应用程序6 GSM/GPRS 应用程序

Page 4: 嵌入式系统应用 Application of embedded System

1 、 Linux 简介

Page 5: 嵌入式系统应用 Application of embedded System

1.Linux 简介 Linux 操作系统 正式的 Linux 1.0 于 1994 年 3 月诞生于芬兰赫尔辛基大学的天才大学生 Linus 手中。现在, Linux 已成为当前最流行的免费操作系统。只要遵守 GPL(General Public Licens

e) ( GNU 通用公共许可证),任何人都可以自由使用 Linux 的源程序。

Page 6: 嵌入式系统应用 Application of embedded System

Linux 操作系统的特征 Linux 是开放源代码的,不在存黑箱技术,这样软件部分不存在盲点,这就有助于将来出现问题的分析和处理。 当在开发过程中遇到问题时,可得到很快的解决。遍布全球的众多 Linux 爱好者都是 Linux 开发者的强大技术支持者。

Linux 的源代码随处可得,注释丰富,文档齐全,易于解决各种问题。 选择范围宽。 Linux 的最初版本 Linux-1.0 ,发布的版本序列是 Linux-1.1, Linux-1.2, Linux-1.3, Linux-2.0, Linux-2.1, L

inux-2.2, Linux-2.3, Linux-2.4, Linux-2.5 到 Linux-2.6 ,目前发布的最新版本是 Linux-2.6.13 。众多的源代码版本提供了很大的选择范围。可以适应不同的系统的配置要求。

1.Linux 简介

Page 7: 嵌入式系统应用 Application of embedded System

1.Linux 简介Linux 操作系统的特征 现在有许多 Linux 上运行的软件及嵌入式 GUI ,它们源代码开放且遵守 GPL ,这为开发应用程序提供了方便。 Linux 是开放源代码的 OS ,在价格上极具竞争力,适合中国国情。 由于 Linux 不仅支持 x86 芯片,还是一个跨平台的系统,它可以支持 20 ~ 30 种 CPU ,所以使用 Linux ,可以为将来更换 CPU 类型提供方便。 Linux 的网络功能非常强, Linux 对硬件有广泛的支持,且硬件实现部分源代码开放,可方便地开发设备驱动程序 .

Page 8: 嵌入式系统应用 Application of embedded System

Linux 的内核结构

1.Linux 简介

Page 9: 嵌入式系统应用 Application of embedded System

Linux 操作系统的发展情况及前景 Linux 操作系统发展至今 , 已经成为具有全部 UNIX 特性的 POSIX 兼容的操作系统,能够与各种传统的商业操作系统分庭抗礼。

1.Linux 简介

Page 10: 嵌入式系统应用 Application of embedded System

2001-2002 嵌入式操作系统的使用情况

Page 11: 嵌入式系统应用 Application of embedded System

2005 年 05 月调查的各种嵌入式操作系统的使用状况

Page 12: 嵌入式系统应用 Application of embedded System

下面是 Linux 源代码目录树结构。 init 内核初始化代码 kernel 内核核心部分:进程、定时、程序执行、信号、模块… mm 内存管理 arch 平台相关代码 fs 文件系统 Net 网络代码 Ipc 进程间通信 Drivers 设备驱动程序 Lib 通用内核函数 Include 头文件( .h ) scripts 配置内核的一些脚本文件 Documentation 有关内核各个部分的通用解释和注释的文本文件

1.Linux 简介

Page 13: 嵌入式系统应用 Application of embedded System

根文件系统目录结构

home usr bin dev var etc tmp

binteam

1.Linux 简介

Page 14: 嵌入式系统应用 Application of embedded System

运行在 Linux 内核上的根文件系统目录说明 / 根目录(最上层目录)     /bin bin 是 binary 的缩写,存放着使用者最经常使用的命令。     /boot 存放的是启动 Linux 时使用的一些核心文件。包括 linux 内核。     /dev dev 是 device( 设备 ) 的缩写。这个目录下是所有 LINUX 的外部设备。     /etc 用来存放所有的系统管理所需要的配置文件和子目录。     /home 用户的主目录。     /lib 存放着系统最基本的动态链接共享库。     /lost+found 这个目录平时是空的,当系统不正常关机后,存放其它目录不能 存放的文件。     /mnt 这个目录是让用户临时挂载别的文件系统。     /proc 是一个特殊的文件系统目录,它是系统内核的映射,可以通过直接访问这个目录来获取系统信息。     /root 系统管理员目录,也叫作超级权限者的用户主目录。     /tmp 用来存放一些临时文件的地方了。     /var 这个目录中存放着那些不断变化的文件,例如系统的日志文件就在 /var/log 目录中     /usr 这个目录的内容比较多,存放系统应用程序。

1.Linux 简介

Page 15: 嵌入式系统应用 Application of embedded System

1.Linux 简介 Linux 的内核版本指的是在 Linus 本人领导下的开发小组开发出的系统内核的版本号 , 目前最新的版本的序号是 : linux- 2.6.13.1 ,其中 , 序号的第二位为偶数的版本表明这是一个可以使用的稳定版本 , 如 2.4.20, 而序号的第二位为奇数的版本一般有一些新的东西加入 , 是个不一定很稳定的测试版本 , 如 2.5.1 。 Linux 由于其“自由”和“开放”的特性,衍生出了数量众多各具特色的发行版。所谓发行版,有一些组织或商业厂家 , 将 Linux系统的内核与外围应用软件和文档包装起来 , 并提供一些系统安装界面和系统设定与管理工具 , 这样就构成了一个发行版本,实际上 , Linux 的发行版本就是 Linux 核心再加上外围的实用程序组成的一个大软件包而已。相对于操作系统内核版本 , 发行版本的版本号是随着发布者的不同而不同 , 与 Linux 系统内核的版本号是相对独立的。目前主要的 Linux 的发行版本有: Red Hat Linux 、红旗 Linux 、 Debain 、 Turbilinux 、 Xteamlinux 和 Mandriva L

inux等,都使用 Linux 作为内核,本质是一致的。但由于各种发行版侧重的用户群体不同,往往在使用上差异很大

Page 16: 嵌入式系统应用 Application of embedded System

2 、嵌入式 Linux

Page 17: 嵌入式系统应用 Application of embedded System

2. 嵌入式 Linux

嵌入式系统是以应用为中心,以计算机技术为基础、软硬件均可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。其发展已有二十多年的历史,国际上也出现了一些著名的嵌入式操作系统,如 VxWorks ,Palm OS , Windows CE等等,但这些操作系统均属于商品化产品,价格昂贵且由于源代码不公开导致了诸如对设备的支持,应用软件的移植等一系列的问题。而 Linux 作为一种优秀的 Free OS ,近几年在嵌入式领域异军突起,成为了最有潜力的嵌入式操作系统。

Page 18: 嵌入式系统应用 Application of embedded System

常见嵌入式 Linux 操作系统 RT- Linux 美国新墨西哥理工学院开发的嵌入式硬实时操作系统。它将标准 Linux 核心作为其实时内核的一个进程同实时进程一起调度,从而在改动最小的情况校充分利用了 Linux 下现有的资源。 ucLinux

ucLinux 是针对微控制领域而设计的 Linux 系统,其最大特征就是没有 MMU (内存管理单元模块)。 ucLinux包含 Linux 常用的 API 和小于 512k 的内核及相关的工具, 900k左右。

Embedix 嵌入式 Linux 行业主要厂商 Lineo推出,最小需要 8M内存, 3M ROM或者 FLASH ,提供了超过 25 种的 Linux系统服务,是一种较完整的嵌入式 Linux 解决方案。

2. 嵌入式 Linux

Page 19: 嵌入式系统应用 Application of embedded System

XLinux 美国网虎公司推出,主要开发者陈盈豪,核心仅 143

k ,而且还在不断减小中,号称世界上最小的嵌入式 Linux 系统。其核心采用了“超字元集”的专利技术,与标准字符集兼容的同时还覆盖了 12 个国家和地区的字符集,在国际化方面具有得天独厚的优势。

KURT- Linux 该 OS 是为多媒体应用和 ATM 网络应用设计的“严格”的实时系统。

2. 嵌入式 Linux

Page 20: 嵌入式系统应用 Application of embedded System

中断控制硬件RTLINUX 实时内核LINUX内核 实时任务LINUX进程

中断控制硬件

LINUX内核

LINUX进程Linux 到 RTLinux体系结构的变化

Page 21: 嵌入式系统应用 Application of embedded System

嵌入式 Linux 系统构成嵌入式 Linux也是 Linux 基于主流的 Linux 内核源码开发 不同的类型对内核有不同的修改 基于标准 Linux 系统构架定制嵌入式系统Linux 系统的构成 硬件平台 引导程序 Linux 内核 根文件系统

Page 22: 嵌入式系统应用 Application of embedded System

引导程序 bootloader

Bootloader Bootloader 是引导设备启动并且执行主程序的固件Monitor除了引导功能, minitor 还有命令行的接口,可以有调试、读写内存、擦写 FLASH 、配置参数等功能。习惯上,可以把上面两种软件都叫做 "bootlo

ader“

Page 23: 嵌入式系统应用 Application of embedded System

Linux 的 bootloader

所有 Linux 系统都需要通过 bootloader引导启动 对于嵌入式 Linux 系统,需要专门定制引导程序 已经有各种各样的 bootloader 供嵌入式系统使用PPC 和 x86 平台已经有众人皆知的 bootloader 其他体系结构没有标准的 bootloader 依赖于硬件供应商提供的 bootloader开放的和商业的 bootloader

Page 24: 嵌入式系统应用 Application of embedded System

开放源码的 Bootloader

Page 25: 嵌入式系统应用 Application of embedded System

x86 Bootloaders

X86 平台的 2 个主要引导程序 : LILO 和 GRUB LILO: http://brun.dyndns.org/pub/linux/lilo/ GRUB: http://www.gnu.org/software/grub/ LILO 和 GRUB 工程的 Makefile 不允许交叉编译,需要 X86主机上本地编译。其它 bootloaders: Rolo, EtherBoot,LinuxBIOS –很少用 –应用于特定环境下

Page 26: 嵌入式系统应用 Application of embedded System

ARM Bootloaders

U-Boot 已经成为标准的 ARM bootloader Armboot跟 ppcboot 合并,成为 u-boot 支持 arm720, arm920, arm926, sa1100, xscale… ttp://armboot.sourceforge.net/Blob blob 是由 LART 工程中开发的 bootloader blob 已经移植到其它基于 ARM 的系统上 http://www.lart.tudelft.nl/lartware/blobRedboot 也能支持

Page 27: 嵌入式系统应用 Application of embedded System

PowerPC Bootloaders

U-boot 是 PowerPC 平台的主要引导程序 Ppcboot 是 u-boot 的前身 能够支持上百的 PowerPC 板子 支持 PPC 4xx, 5xx, 8xx, 82xx, 7xx, 74xx…等系列处理器OpenBIOS 开放源码的 IEEE 1275-1994 兼容的固件 支持一些 IBM PPC405 的板子Redboot也能支持

Page 28: 嵌入式系统应用 Application of embedded System

MIPS Bootloaders

YAMON MIPS 嵌入式 Linux 系统的标准引导程序 MIPS 公司的开放源码的软件 支持大多数的 MIPS 开发板PMON 作为初始化代码使用需要移植到自己的开发板上U-boot 和 Redboot也能支持

Page 29: 嵌入式系统应用 Application of embedded System

其它 bootloader

SuperH sh-boot 是 SH 平台的标准引导程序 Redhat 也能支持M68K Redhat 能支持没有标准的 bootloader

Page 30: 嵌入式系统应用 Application of embedded System

3. 应用程序的交叉编译

Page 31: 嵌入式系统应用 Application of embedded System

3. 应用程序的交叉编译步骤 :1. 目标机的应用程序在宿主机上编译 .2. 在宿主机安装交叉编译器3. 在宿主机编译和连接目标机应用程序4. 下载到目标机运行

Page 32: 嵌入式系统应用 Application of embedded System

3. 应用程序的交叉编译 交叉编译器和交叉链接器是能够在宿主机上运行,并且能够生成在目标机上直接运行的二进制代码的编译器和链接器。例如在基于 ARM体系结构的 gcc 交叉开发环境中, arm-linux-gcc 是交叉编译器, arm-linux-ld 是交叉链接器。通常情况下,并不是每一种体系结构的嵌入式微处理器都只对应于一种交叉编译器和交叉链接器,比如对于 M68K体系结构的 gcc 交叉开发环境而言,就对应于多种不同的编译器和链接器。如果使用的是 COFF 格式的可执行文件,那么在编译 Linux 内核时需要使用 68k-c

off-gcc 和 m68k-coff-ld ,而在编译应用程序时则需要使用 m68k-coff-pic-gcc 和 m68k-coff-pic-ld 。

Page 33: 嵌入式系统应用 Application of embedded System

3. 应用程序的交叉编译 嵌入式系统在链接过程中通常都要求使用较小的函数库,以便最后产生的可执行代码能够尽可能地小,因此实际运用时一般使用经过特殊处理的函数库。对于嵌入式 Linux 系统来讲,功能越来越强、体积越来越大的 C语言函数库 glibc 和数学函数库 libm已经不能满足某些系统的要求,这时需要采用它们的精化版本 uClibc 、 uClibm 和 newlib等。 目前嵌入式的集成开发环境都支持交叉编译和交叉链接,如 ADS 和 GNU工具链等,编写好的嵌入式软件经过交叉编译和交叉链接后通常会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件。

Page 34: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现

Page 35: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 TCP/IP协议被集成到 UNIX 内核中时,相当于在

UNIX 系统引入了一种新型的 I/O 操作。 UNIX 用户进程与网络协议的交互作用比用户进程与传统的 I/O 设备相互作用复杂得多 . 在 UNIX 系统中,网络应用编程界面有两类: U

NIX BSD 的套接字( socket )和 UNIX System V 的 TLI 。由于 Sun 公司采用了支持 TCP/IP 的UNIX BSD 操作系统,使 TCP/IP 的应用有更大的发展,其网络应用编程界面──套接字( socket )在网络软件中被广泛应用,至今已引进微机操作系统 DOS 和 Windows 系统中,成为开发网络应用软件的强有力工具

Page 36: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 Socket接口是 TCP/IP 网络的 API , Socket接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP 网络上的应用程序。要学 Internet 上的 TCP/IP 网络编程,必须理解 Socket接口。 Socket接口设计者最先是将接口放在 Unix 操作系统里面的。如果了解 Unix 系统的输入和输出的话,就很容易了解 Socket 了。网络的 Socket数据传输是一种特殊的 I/O ,

Socket也是一种文件描述符。 Socket也具有一个类似于打开文件的函数调用 Socket() ,该函数返回一个整型的 Socket描述符,随后的连接建立、数据传输等操作都是通过该 Socket 实现的。常用的 Socket 类型有两种:流式 Socket ( SOCK_STREAM )和数据报式 Socket ( SOCK_DGRAM )。流式是一种面向连接的 Socket ,针对于面向连接的 TCP 服务应用;数据报式 Socket 是一种无连接的 Socket ,对应于无连接的 UDP 服务应用。

Page 37: 嵌入式系统应用 Application of embedded System

BSD Sockets

INET Sockets

TCP UDP

IP

PPP SLIP Ethernet

ARP

User

Kernel

Network Applications

Socket Interface

Protocol Layers

Network Devices

Linux Networking Layers

Page 38: 嵌入式系统应用 Application of embedded System

Linux 的文件系统逻辑结构

Page 39: 嵌入式系统应用 Application of embedded System

files_structcountclose_on_execopen_fsfd[0]fd[1]

fd[255]

filef_modef_owner

f_op

f_dentryf_version…

inode

sock

sockettypeprotocoldata

typeprotocolsocket

SOCK_STREAM

SOCK_STREAMAddress Familysocket operations

BSD SocketFile Operations

lseekreadwriteselectioctlclosefasync

Linux BSD Socket Data Structure

dentry

inode

Page 40: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现TCP/IP Networking Layers BSD Socket

Interface INET Socket Layer Create Bind Listen Accept Connect

Page 41: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 _ socket()

我们使用系统调用 socket() 来获得文件描述符:#include<sys/types.h>#include<sys/socket.h>int socket(int domain,int type,int protocol);第一个参数 domain 设置为“ AF_INET” 。第二个参数是套接口的类型: SOCK_STREAM或SOCK_DGRAM 。第三个参数设置为 0 。系统调用 socket() 只返回一个套接口描述符,如果出错,则返回 -1 。

Page 42: 嵌入式系统应用 Application of embedded System

<include/linux/socket.h> AF_UNIX

Unix domain sockets AF_INET

Internet IP Protocol AF_IPX

Novell IPX AF_APPLETALK

Appletalk DDP AF_X25

Reserved for X.25 project ... ...

4. 客户机 / 服务器应用程序的实现 _ socket()

Page 43: 嵌入式系统应用 Application of embedded System

一旦你有了一个套接口以后,下一步就是把套接口绑定到本地计算机的某一个端口上。但如果你只想使用 connect()则无此必要。下面是系统调用 bind() 的使用方法:#include<sys/types.h>#include<sys/socket.h>intbind(int sockfd,struct sockaddr*my_addr,int addrlen);第一个参数 sockfd 是由 socket() 调用返回的套接口文件描述符。第二个参数my_addr 是指向数据结构 sockaddr 的指针。数据结构 sockaddr 中包括了关于你的地址、端口和 IP 地址的信息。第三个参数 addrlen 可以设置成 sizeof(structsockaddr) 。如果出错, bind()也返回 -1 。如果你使用 connect() 系统调用,那么你不必知道你使用的端口号。当你调用 connect() 时,它检查套接口是否已经绑定,如果没有,它将会分配一个空闲的端口。

4. 客户机 / 服务器应用程序的实现 _ bind()

Page 44: 嵌入式系统应用 Application of embedded System

统调用 connect() 的用法如下:#include<sys/types.h>#include<sys/socket.h>int connect(int sockfd,struct sockaddr* serv_addr,int addrlen);第一个参数还是套接口文件描述符,它是由系统调用 socket()返回的。第二个参数是 serv_addr 是指向数据结构 sockaddr 的指针,其中包括目的端口和 IP 地址。第三个参数可以使用 sizeof(structsockaddr)而获得。

4. 客户机 / 服务器应用程序的实现 _ connect()

Page 45: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 _ listen() 如果你希望不连接到远程的主机,也就是说你希望等待一个进入的连接请求,然后再处理它们。这样,你通过首先调用 listen() ,然后再调用 accept() 来实现。系统调用 listen() 的形式如下:

int listen(int sockfd, int backlog);第一个参数是系统调用 socket()返回的套接口文件描述符。第二个参数是进入队列中允许的连接的个数。进入的连接请求在使用系统调用 accept() 应答之前要在进入队列中等待。这个值是队列中最多可以拥有的请求的个数。大多数系统的缺省设置为 20 。你可以设置为 5或者 10 。当出错时, listen() 将会返回 -1值。当然,在使用系统调用 listen()之前,我们需要调用 bind()绑定到需要的端口,否则系统内核将会让我们监听一个随机的端口。所以,如果你希望监听一个端口,下面是应该使用的系统调用的顺序:socket();bind();listen();

Page 46: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 _ accept() accept()系统调用 accept()比较起来有点复杂。在远程的主机可能试图使用 connect()连接你使用

listen() 正在监听的端口。但此连接将会在队列中等待,直到使用 accept() 处理它。调用 accept()之后,将会返回一个全新的套接口文件描述符来处理这个单个的连接。这样,对于同一个连接来说,你就有了两个文件描述符。原先的一个文件描述符正在监听你指定的端口,新的文件描述符可以用来调用 send() 和 recv() 。

Page 47: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 _ server()

#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>int main(){

int server_sockfd,client_sockfd;int server_len,client_len;struct sockaddr_in server_address,client_address;

server_sockfd = socket(AF_INET,SOCK_STREAM,0);

server_address.sin_family = AF_INET;server_address.sin_addr.s_addr = INADDR_ANY;//inet_addr("192.168.2.122");server_address.sin_port = 9734;server_len = sizeof(server_address);bind(server_sockfd,(struct sockaddr *)&server_address,server_len);

listen(server_sockfd,5);while(1){

char ch;printf("server waiting\n");

client_len = sizeof(client_address);client_sockfd = accept(server_sockfd,

(struct sockaddr *)&client_address,&client_len);

read(client_sockfd,&ch,1);ch++;write(client_sockfd,&ch,1);close(client_sockfd);

}}

Page 48: 嵌入式系统应用 Application of embedded System

4. 客户机 / 服务器应用程序的实现 _ client()

#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>int main(){

int sockfd;int len;struct sockaddr_in address;int result;char ch = 'A';

sockfd = socket(AF_INET,SOCK_STREAM,0);

address.sin_family = AF_INET;address.sin_addr.s_addr = inet_addr("192.168.2.120");address.sin_port = 9734;len = sizeof(address);

result = connect(sockfd,(struct sockaddr*)&address,len);if(result == -1){

perror("oops:client1");}

write(sockfd,&ch,1);read(sockfd,&ch,1);printf("char from server = %c\n",ch);close(sockfd);exit(0);

}

Page 49: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现

Page 50: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现5.1 GPS 简介 GPS即全球定位系统( Global Positioning System )的简称。 G

PS 是美国国防部 (U.S.Department Of Deefense--DOD)从本世纪 70 年代开始研制,历时 20 年,耗资一百多亿美元,于 1994 年全面建成。具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。我国测绘等部门在近 10 年的使用表明,GPS 是全天候、高精度、高效率,多功能等显著特点,赢得广大测绘工作者的信赖,并成功地应用于大地测量、工程测量、航空摄影测量、运载工具导航和管制、地壳运动监测、工程变形监测、水纹测试、资源勘察、地球动力学等多种学科,从而给测绘领域带来一声场深刻的技术革命。

GPS 系统的特点: 高精度、全天候、高效率、多功能、操作简便、应用广泛等。 GPS 的应用: GPS 是目前技术最成熟且真正实用的一种卫星导航和定位系统。它具有定位快、全时域、全天候、高动态等特点,现在交通、测量、勘探、航空、航海等诸多民用领域获得了广泛应用。 由于 GPS 定位技术具有精度高、速度快、成本低的显著优势,因而以成为目前世界上应用最广泛、应用最强的全球精密授时、测距、导航的定位系统。

Page 51: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现5.2. GPS原理: GPS 由三个独立的部分组成: 空间部分—— GPS卫星星座; 地面控制部分——地面监控系统; 用户设备部分—— GPS 信号接收机。 GPS接收机硬件一般由主机、天线和电源组成,我们提供的 GPS/GPRS扩展模块就是一个简单的 GPS接收机, GPS 模块 目前市场上的 GPS 模块有很多,本实验采用的是台湾

HIMARK 公司的 GPS 模块。此模块是符合民用标准的 GPS接收器,信号接收性能好,功耗较小,整体工作比较稳定。

Page 52: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现5.3 GPS 模块使用说明:( 1 )将模块插到 S3C2410 实验板的多功能扩展口上,方向如上图所示。( 2 )将功能开关 S1 、 S2扳到下面以选择 GPS 模块(注:功能开关扳上选择 GSM/GPRS 模块,扳下选择 GPS 模块)。( 3 )接 GPS 天线。将小头插入 GPS 天线接口, GPS Ac

tive Antenna端放到一个可以接收到信号的地方,如果在室内实验,建议将 GPS Active Antenna端伸出窗外,其平滑的一面有磁性,可附着在其他铁制的长物体上。这是能否正确接收信息的最关键一步。( 4 )连接好实验箱上的串口、通过超级终端接收到的数据查看 GPS 定位信息。

Page 53: 嵌入式系统应用 Application of embedded System

GPS&GPRS 扩展板

Page 54: 嵌入式系统应用 Application of embedded System
Page 55: 嵌入式系统应用 Application of embedded System
Page 56: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现

连接示意图

GPS模块 COM-COM

嵌入式目标板

Page 57: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现5.4 NMEA 0183 格式 GPS 的通讯接口协议采用美国的 NMEA ( National M

arine Electronics Association ) 0183 ASCII 码协议, NMEA 0183 是一种航海、海运方面有关于数字信号传递的标准,此标准定义了电子信号所需要的传输协议,传输数据时间。下列描述了其数据帧的格式定义,包括波特率选择,秒脉冲输出, RTCM 定义输出。我们这里只介绍我们要用的位置信息〈 GGA〉语句。

$GPGGA,031736.594,3957.1451,N,11618.8424,E,1,05,1.7,111.4,M,-8.8,M,,*48

Page 58: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现 _GGA讯息格式说明

Page 59: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现GPS显示的时间是格林威治时间,北京时间 = 格林威治时间 +8小时。读上例中的数据 031736.594 ,其中 03 代表时, 17 代表分, 36.594 代表秒,那么北京时间为 11点 37 分 36秒。经度、纬度读出为北纬 3957.1451 ,东经

11618.8424 ,通过电子地图我们可以查到具体位置。

Page 60: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现5.5 实验步骤1 硬件连接:( 1 )将 GPS扩展板插入 S3C2410 开发板(以下简称开发板)扩展槽;( 2 )扩展板安装GPS 天线。注意 GPS 天线最好水平放置到空旷的室外。如果天线放置在室内,或屏蔽较大的地方,卫星信号会很弱,有可能导致接收不到信号,无法定位。( 3 )用串口线连接宿主机与开发板的串口 0;( 4 )用网线连接宿主机与开发板(内侧 100M 网口);注意:开发板上的开关 SW6=SW2 , SW2=EXS2 ,扩展板上开关 S2=GPS_SA;2 启动 LINUX :( 1 )宿主机进入 LINUX ,打开 MINICOM 。波特率 115200 , 8位数据, 1位停止,无校验,无流控。( 2 )开发板设置为从 Intel Flash启动,给实验箱加电,在宿主机 MINICOM 中可以看到目标板的启动 LINUX 过程,使用 Enter 进入命令行格式 3 建立开发环境( 1 )宿主机打开 NFS 服务( 2 )开发板挂载宿主机mount 192.168.0.xxx:/<your_dir> /mnt( 3 )执行 GPS测试程序 ./gps_demo根据提示,选择 1 ,可以看到 GPS 的原始数据;按 Ctrl+C退出。

Page 61: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现

Page 62: 嵌入式系统应用 Application of embedded System

5.GPS 应用程序的实现源代码分析

Page 63: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现

Page 64: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现程序完成功能:1.测试 GSM/GPRS 模块是否工作。2.读取 SIM卡 ID 。3.拨打电话测试。4.接收电话测试。5.发送接收短信息。

Page 65: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现

实验连接示意图

GSM//GPRS模块 MODEM-

RS232

嵌入式目标板

Page 66: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现 6.1 GSM/GPRS 简介: GSM 是 Global System For Mobile Communication 的简称,中文名称为全球移动通信系统,是 1992 年由欧洲标准化委员会统一推出的,以数字为主的第二带代移动电话系统。它采用数字通信技术、统一的网络标准,使通信质量得以保证,是全球最成熟的数字移动电话网络标准之一,用的是窄带 TDMA ,能提供全面的语音、文字和数据业务,并提供一些诸如短消息服务、语音信箱、呼叫转移等的增值业务。 GPRS 是 General Packet Radio Service 的简称,中文名称为通用分组无线业务,是在现有的 GSM 系统上发展出来的一种新的分组数据承载业务。 GRPS 与 GSM 系统最根本的区别是, GSM 是一种电路交换系统,而 GPRS 是一种分组交换系统。 GPRS 特别适用于间断的、突发性的或频繁的、少量的数据传输,也适用于偶尔的大数据量传输。我们可以将 GPRS 理解为 GSM 的一个更高层次。

Page 67: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现 6.2 WAVECOM GSM/GPRS 模块: 本实验使用的 GSM/GPRS 模块是法国 WAVECOM 公司设计的 Q2403A 型模块,双波段( 900/1800MHz )工作,支持通用 AT命令,可以完成基本移动数据业务:电话呼叫与接收,短信收发等等。 1.3 AT命令集: AT命令集是用于终端机(如 PC 机)和调制解调器( MODEM )之间通讯控制的一组命令。 AT 是 ATTENT

ION 的缩写。所有 AT命令都是以 ASCII字符“ AT” 开始,并由回车符 <CR>或换行符 <LF> 结束。 AT命令集最初是由 Hayes 公司建立的,是目前调制解调器广为支持的命令集之一,大部分厂家生产的 Modem 都能执行此 Hayes命令集,包括普通 Modem 和无线Modem 。但厂家之间有会有差别,不同厂家使用的 AT命令不是完全兼容的。有些厂商为了 GPRS 的应用还扩展了 AT命令集。本开发板使用的 AT命令集如下表所示:

Page 68: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现 6.3 串口终端函数 在 LINUX 系统中访问串口,认为串口是一个文件,我们可以使用文件系统控制函数实现基本的串口操作:如用 open()函数来打开串口,用 read() , write() 来读写它,操作完成后,再用 close()关闭它。 ( 1 )打开串口 , 常 LINUX 下的串口设备为:

串口 0 /dev/ttyS0 串口 1 /dev/ttyS1 串口 2 /dev/ttyS2

本实验使用的是串口 1 。以下的程序可以打开一个串口: int fd; fd=open(“/dev/ttyS1”,O_RDWR); if(fd= =-1) { printf(“ 提示错误 !”); }

Page 69: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现 设置串口最基本的设置串口包括波特率设置,效验位和停止位设置。 串口的设置主要是设置 struct termios 结构体的各成员值。

struct termio{ unsigned short  c_iflag; /* 输入模式标志 */  unsigned short  c_oflag;  /* 输出模式标志 */  unsigned short  c_cflag;  /* 控制模式标志 */  unsigned short  c_lflag;  /* local mode flags */  unsigned char  c_line;      /* line discipline */  unsigned char  c_cc[NCC];    /* control characters */};

Page 70: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现6.4 实验步骤;1 硬件连接:( 1 )将 GSM/GPRS扩展板插入 S3C2410 开发板(以下简称开发板)扩展槽;( 2 )扩展板装入 SIM卡;( 3 )扩展板安装天线;( 4 )用串口线连接宿主机与开发板的串口 0;( 5 )用网线连接宿主机与开发板(内侧 100M 网口)。注意:开发板上的开关 SW5=EXS1 ,扩展板上开关 S1=GSM_S, S2=GSM_FW2 启动 LINUX :( 1 )宿主机进入 LINUX ,打开 MINICOM 。波特率 115200 , 8位数据, 1位停止,无校验,无流控。( 2 )开发板设置为从 Intel Flash启动,给开发板加电,在宿主机 MINICOM 中可以看到开发板启动 LINUX ,使用 Ente

r 进入命令行格式。3 建立开发环境:( 1 )宿主机打开 NFS 服务;( 2 )开发板挂载宿主机mount 192.168.0.xxx:/<your_dir> /mnt;( 3 )执行 GSM/GPRS测试程序 ./gsm_gprs_demo;4 根据提示可以进行简单的 GSM/GPRS 的实验:( 1 )向 GSM/GPRS 模块发送最近本测试命令 ” AT” ,当模块工作正常时将返回 ” OK” 。( 2 )测试 SIM卡的 ID 号。如果 SIM卡安装正确,执行此命令会显示出 SIM卡中 20位的 ID 号。( 3 )拨打电话。输入被呼叫号码,拨打对方电话;回车挂断。( 4 )等待呼叫。当有电话呼入时,屏幕会显示 RING ,表明本地号码正在被呼叫。( 5 )短消息功能。( 6 )发送短消息。( 7 )阅读收到的所有端消息。( 8 )配置短消息工作方式是文本模式,服务中心号码是: +8613800100500 。

Page 71: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现

Page 72: 嵌入式系统应用 Application of embedded System

6.GSM/GPRS 应用程序的实现源代码分析

Page 73: 嵌入式系统应用 Application of embedded System

本部分结束