新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM的嵌入式车载GPS定位系统设计

基于ARM的嵌入式车载GPS定位系统设计

作者: 时间:2013-01-12 来源:网络 收藏
软件平台的搭建

  系统的软件平台的搭建其实就是嵌入式linux操作系统的移植移植工作,主要包括4步:建立交叉编译环境,移植引导程序,编译内核,生成根文件系统。

  交叉编译工具主要由gcc,binutils和glibc这几部分组成。由于重新建立一个交叉编译工具链比较复杂也没有任何意义,所以本文使用已经做好的工具链。因此建立交叉编译环境的过程实际就是对工具包cross-3.3.2.tar.bz2解包的过程。

  本文移植的Bootloader是韩国Mizi公司开发的vivi.首先在根目录下创建一个armsys2410目录,对vivi_armsys.tgz执行解压命令。解压完成后进人vivi_armsys.执行命令makememmonfig,然后选择"Load on Alternate Configuration File"菜单,再写入arch/def-co-igs/smdk2410,进行vivi的裁剪。执行make命令进行编译,在vivi_armsys目录下生成vivi二进制文件。最后将其烧写到Flash.

  内核的编译通过命令make menueorffig进行内核的配置;通过命令make dep建立依赖关系;通过命令make zlmage建立内核。得到Linux内核压缩映像zhnage.最后通过vivi命令提示模式下使用下载命令,将压缩映像文件zlmge装载到flash存储器中。

  Linux支持多种文件系统。cramfs是Linus Torvalds撰写的只具备最基本特性的文件系统。本文使用mkcramfs工具对主机里已有cramfs文件系统进行制作和压缩。最后也要烧写到flash的相应部分。

  3模块驱动程序的开发

  Linux将设备分为最基本的两大类,字符设备和块设备。字符设备是单个字节为单位进行顺序读写操作,通常不使用缓冲技术;而块设备则是以固定大小的数据块进行存储和读的。

模块驱动程序是在UART驱动程序的基础上加入对模块初始化和对GPS模块输出数据处理的部分,构建一个独立的驱动模块,在导航系统进实时导航工作模式时挂接到系统内核中,实现GPS功能。

  3.1 初始化/清除模块

  在初始化程序段中要完成对GPS设备的注册,设备节点的创建和对串口相关寄存器的初始化。部分代码如下:

  3.2 两个数据结构定义

  模块驱动的最终目的就是取得GPS信息,因此规范GPS数据是对数据传递的可靠性和速率都是有益的。

  struct GPS_DATA{

  unsigned int hour;//小时,24小时制

  unsigned int minute;//分

  unsigned long Second;//秒,精度小数点后三位

  unsigned long latitude;//纬度

  unsigned char southornorth;//纬度属于南北的标志码

  unsigned long longitude;//经度

  unsigned char eastorwest;//经度属于东西的标志码

  };//其中包括了在导航系统中所需的几个重要数据。

  另外还有对驱动模块文件操作结构的定义。即:

  static struct file_operations gps_fops={ead:gps_read,

  rite:gps_write,

  octl:gps_ioctl,

  open:gps_open,

  elease:gps_release,

  };//定义了设备操作映射函数结构。

3.3 驱动程序的模块操作

  在导航系统进入GPS导航模式时,系统首先是将GPS模块注册到操作系统中,实现初始化过程,再通过gps_open函数打开设备,此过程中完成对中断、缓冲区以及定时器等资源的申请,为GPS数据读取做准备。通过gps_write()向模块写命令字来是自主地选择工作模式,gps_ioctl()则是选择串口传输模式,使之与GPS模块传输模式相匹配。之后的应用程序将创立一个独立的进程为进行GPS数据的读取gps_read(),该进程没有数据时进程会一直处于睡眠等待数据,有数据来,进入中断处理模块,完成数据的分析,生成GPS_DATA数据结构,供导航使用。这个进程是随着导航模式的切换而终止的,此时除了关闭进程外,还需要用gps_release()释放申请的所有资源,并关闭设备。



关键词:ARMGPS定位系统

评论


相关推荐

技术专区

关闭