1 系统总体设计
整个系统由手持终端和远端服务器构成,系统整体结构如图1所示。手持终端设备通过GPRS无线网络实现与监控中心服务器之间的通信,使得当监控中心接入Internet网络时能够接收来自手持终端的数据,并在监控中心大屏幕上显示。
手持终端采用ARM-Linux系统。系统的核心部件ARM(AdvancedRISC Machines)处理器是专门针对嵌入式设备设计的,是目前构造嵌入式系统硬件平台的首选,采用RISC(精简指令集计算机)架构的ARM微处理器具有体积小、低功耗、低成本、高性能的特点。而Linux操作系统可公开获得的源代码已经在性能、功能、驱动开发和可移植性等方面经历了无数的改进、增强及扩充,其操作系统代码可裁减,所以采用嵌入式Linux操作系统可以大大提高系统的可靠性,充分发挥处理器的多任务潜力,提高开发效率和缩短开发周期。
2 系统硬件实现
手持终端硬件结构主要分为以下几个部分:ARM处理器及其扩展接口、触摸屏、电源、GPS模块、GPRS模块等。手持终端硬件平台以S3C2410控制器为核心,其他模块通过它的内部接口,辅助以设计的外部电路来完成相应的功能。
S3C2410自带3通道UART,这里使用的串口2与GPRS模块相连,如图2所示。由图中可以看出GPB6~8代替了串口2的CTS,DCD和DTR握手信号,因此要在串口驱动中将原来对于串口2“DCD,DTR,CTS”信号操作的地方,改成相应对“GPB6~8”的操作;此外,因为要给MC35i模块“IGT”引脚至少100 ms的低脉冲用于启动MC35i模块,而这个脉冲是通过由软件的方法对-GPB9脚写0和1来产生,因此要在驱动中串口初始化的部分添加这个脉冲产生的代码,用于启动GPRS模块。
系统使用的嵌入式Linux内核版本是2.6.14,其中串口驱动的部分位于ARM板内核的kernel/driv-ers/serial和/kernel/drivers/char/目录下。其中串口初始化部分位于/kernel/drivers/serial/serials3c2410.c文件中。对其进行如下修改:
对于握手信号的处理位于/home/guoguo/kernel/drivers/char/serial.c文件中。主要需要修改的函数有:check_modem_status(),get_modem_info(),block_til_ready(),line_info(),autoconfig()等函数。
上述的函数中都有涉及到读握手信号的状态进行判断操作,而读握手信号值主要是通过读modem状态寄存器的值来实现,在内核中modem状态寄存器被定义为UART_MSR,UART_MSR共8 b,从高到低每个bit依次代表的是DCD,RI,DSR,CTS,DDCD,TERI,DDSR,DCTS的值(高低电平),因此要将这些函数中对UART MSR的状态值status进行判断处理前,相应的位赋上正确的值,这个值从相应的GPIO脚来获取。