车载导航系统终端的研究
时间:11-02
来源:互联网
点击:
一般linux的设备驱动有三种类型,字符设备、块设备、网络设备。而我要讲的gps模块的驱动程序是属于字符设备。对于字符设备发出读/写请求时,实际的硬件i/o操作一般紧接着发生。在设备管理中,除了设备类型外,内核还需要一对被称为主从设备号的参数,才能唯一标识一个设备。主设备号相同的设备使用相同的驱动程序,从设备号用于区分具体设备的实例。用命令cat/proc/devices可以查看系统中所有设备对应的主设备号。所以在gps驱动程序的开始定义设备名称#define device_name “s3c2440-gps”再定义主设备号,我是让系统自动分配的,以防主设备号已被占用,static int gps_major=0;驱动程序以一个模块初始化函数作为入口,如module_init(s3c2440_gps_init)向内核声明当前模块的初始化函数;再写gps的初始化函数:static int __init s3c2440_gps_init(void)函数,在这个函数里面注册一个设备,返回主设备号,可以写成:gps_major=register_chrdev(0,device _name,&s3c2440_gps_fops),s3c2440_gps_fops是定义了的结构体,规定了驱动程序向应用程序提供的操作接口。如:static struct file_operations s3c2440_gps _fops ={.owner= this_module,。
open= s3c2440_gps_open,.release= s3c2440_gps_release=s3c2440_gps_release, .ioctl=s3c2440_gps_ioctl};继续向下写,gps_class=class_create(this_module,device_name);在/sysfs目录下创建这个设备的类。再是注册这个设备的类,如device_create(gps_class,null,mkdev(gps_major,0),null,device_name)。
gps应用程序即定位功能的实现
要实现gps的定位必须先要对gps数据包进行解析,gps上电后,每隔一定的时间就会返回一定格式的数据,数据格式为$信息类型,每行开头的字符都是$,接着是信息类型,后面的是数据,以逗号分开,完整的数据类型如下:$gprmc,080655.00,a,4546.40891,n,12639.65641,e,1.045,328.42,170809,,,a*60信息类型为:gpgsv:可见卫星信息、gpgll:地理定位信息、gprmc:推荐最小定位信息、gpvtg:地面速度信息、gpgga:gps定位信息、gpgsa:当前卫星信息、这里我只解析gprmc和gpgga的信息。一.gprmc数据详解:$gprmc,《1》,《2》,《3》,《4》,《5》,《6》,《7》,《8》,《9》,《10》,《11》,《12》*hh《1》utc时间,hhmmss(时分秒)格式《2》定位状态,a=有效定位,v=无效定位《3》纬度ddmm.mmmm(度分)格式(前面的0也将被传输)《4》纬度半球n(北半球)或s(南半球)《5》经度dddmm.mmmm(度分)格式(前面的0也将被传输)《6》经度半球e(东经)或w(西经)……。
最后编写代码,把经/纬度解析出来,对于gpgga类型数据,也是一样,先了解每一位的含义,再写代码把海平面高度和大地水平面高度等数据解析并显示出来。
gprs通信模块实现
gprs模块是借助gprs无线网络实现数据的无线传输,从而在不同的车辆或车辆与控制中心之间架起沟通的桥梁,所以软件的功能主要是建立无线连接,按照gprs通信协议传输数据。gprs模块的通信主要是通过串口驱动实现,在嵌入式linux内核中已经提供了对串设备的支持,因此在配置内核编译选项时,只需要选中对串口设备的支持,就可以实现对gprs模块的串口数据通信功能。为了实现与internet的通信,还需要在配置内核编译选项时选中ppp和tcp/ip协议。这样一旦网络连接建立,就可以使用应用程序来实现网络数据的通信。本系统数据链路层采用ppp协议,它是一种面向字符的协议,是为在两个对等实体间传输数据包连接而设计的,使用可扩展的链路控制协议lcp来建立、配置和测试数据链路。用网络控制协议族ncp来建立和配置不同的网络层协议,并且允许采用多种网络层协议。一个ppp会话分四个步骤:建立连接、连接质量控制、网络层协议配置和连接终止。
嵌入式linux系统内核源自于linux内核,并保留了对tcp/ip以及其他的网络协议的支持。在嵌入式linux系统上编写网络应用程序与在linux上编写网络应用程序没什么大区别,通常只需要做很小的修改就可以移植到嵌入式linux系统上。至此,gprs模块完整地集成到嵌入式终端中。
can总线驱动程序要完成的报文发送、接收等任务都是围绕can总线控制器展开的,因此驱动程序主要是对控制器mcp2510内部寄存器进行操作。can总线控制器mcp2510的初始化按照以下步骤进行:(1)软件复位,进入配置模式;(2)设置can总线波特率;(3)关闭中断,设置id过滤器;(4)切换mcp2510到正常状态;(5)清空接收和发送缓冲区;(6)开启接收缓冲区,开启中断。
open= s3c2440_gps_open,.release= s3c2440_gps_release=s3c2440_gps_release, .ioctl=s3c2440_gps_ioctl};继续向下写,gps_class=class_create(this_module,device_name);在/sysfs目录下创建这个设备的类。再是注册这个设备的类,如device_create(gps_class,null,mkdev(gps_major,0),null,device_name)。
gps应用程序即定位功能的实现
要实现gps的定位必须先要对gps数据包进行解析,gps上电后,每隔一定的时间就会返回一定格式的数据,数据格式为$信息类型,每行开头的字符都是$,接着是信息类型,后面的是数据,以逗号分开,完整的数据类型如下:$gprmc,080655.00,a,4546.40891,n,12639.65641,e,1.045,328.42,170809,,,a*60信息类型为:gpgsv:可见卫星信息、gpgll:地理定位信息、gprmc:推荐最小定位信息、gpvtg:地面速度信息、gpgga:gps定位信息、gpgsa:当前卫星信息、这里我只解析gprmc和gpgga的信息。一.gprmc数据详解:$gprmc,《1》,《2》,《3》,《4》,《5》,《6》,《7》,《8》,《9》,《10》,《11》,《12》*hh《1》utc时间,hhmmss(时分秒)格式《2》定位状态,a=有效定位,v=无效定位《3》纬度ddmm.mmmm(度分)格式(前面的0也将被传输)《4》纬度半球n(北半球)或s(南半球)《5》经度dddmm.mmmm(度分)格式(前面的0也将被传输)《6》经度半球e(东经)或w(西经)……。
最后编写代码,把经/纬度解析出来,对于gpgga类型数据,也是一样,先了解每一位的含义,再写代码把海平面高度和大地水平面高度等数据解析并显示出来。
gprs通信模块实现
gprs模块是借助gprs无线网络实现数据的无线传输,从而在不同的车辆或车辆与控制中心之间架起沟通的桥梁,所以软件的功能主要是建立无线连接,按照gprs通信协议传输数据。gprs模块的通信主要是通过串口驱动实现,在嵌入式linux内核中已经提供了对串设备的支持,因此在配置内核编译选项时,只需要选中对串口设备的支持,就可以实现对gprs模块的串口数据通信功能。为了实现与internet的通信,还需要在配置内核编译选项时选中ppp和tcp/ip协议。这样一旦网络连接建立,就可以使用应用程序来实现网络数据的通信。本系统数据链路层采用ppp协议,它是一种面向字符的协议,是为在两个对等实体间传输数据包连接而设计的,使用可扩展的链路控制协议lcp来建立、配置和测试数据链路。用网络控制协议族ncp来建立和配置不同的网络层协议,并且允许采用多种网络层协议。一个ppp会话分四个步骤:建立连接、连接质量控制、网络层协议配置和连接终止。
嵌入式linux系统内核源自于linux内核,并保留了对tcp/ip以及其他的网络协议的支持。在嵌入式linux系统上编写网络应用程序与在linux上编写网络应用程序没什么大区别,通常只需要做很小的修改就可以移植到嵌入式linux系统上。至此,gprs模块完整地集成到嵌入式终端中。
can总线驱动程序要完成的报文发送、接收等任务都是围绕can总线控制器展开的,因此驱动程序主要是对控制器mcp2510内部寄存器进行操作。can总线控制器mcp2510的初始化按照以下步骤进行:(1)软件复位,进入配置模式;(2)设置can总线波特率;(3)关闭中断,设置id过滤器;(4)切换mcp2510到正常状态;(5)清空接收和发送缓冲区;(6)开启接收缓冲区,开启中断。
嵌入式 电子 触摸屏 总线 传感器 收发器 显示器 电路 相关文章:
- 采用MPC5200实现高速视频探测的车内应用(02-22)
- 嵌入式非易失性存储器在汽车系统中的应用(05-13)
- 基于嵌入式的悬架与转向集成控制器研究(05-20)
- 嵌入式电脑在车载电视系统中的应用方案(04-13)
- 基于嵌入式Qt的车载GUI平台的设计(07-10)
- ARM嵌入式汽车节能控制系统的设计(07-17)