应特 别注意到是要把握好选择网络的有效传输距离。 黟 (2)与监护中心服务器的接入方式:实现与监护中心服务器的接入方式主 要是依据通信接口设计合适的通信协议。常选用的协议主要有点对点协议 (PPP)、TCP/UDP/IP协议、无线应用协议(WAJP)。PPP协议主要在蓝牙、GPRS 等技术中使用,完成点对点的连接,适用于两个移动终端之间的通信连接; TCP/UDP/IP协议是广泛用于互联网通信的协议,可以实现与互联网相连接了的 监护中心服务器进行通信;WAP融合了各种广域无线网络技术,实现将互联网 内容和电话传送的业务传送到数字蜂窝电话和其他无线终端上。选用WAP可以 充分利用无线应用环境(WAE)开发的高层应用软件。应利用嵌入式操作系统强大 的网络功能,针对应用环境不同的通信接口选择适用的通信协议。 (3)系统软件模块的设计:由于医疗本身专业性强,并且业务种类繁多、 流程繁琐,所涉及的信息包括文本、图形、图像、视频等。因此,需合理设计 各软件模块来实现有效管理,特别是医学信号的处理分析、存储、显示、打印 等功能。应逐步将嵌入式数据库平台应用于移动医疗系统中,利用嵌入式操作 系统开源性提供对个人隐私安全保护,杜绝非法使用和非法访问。 9 第三章系统整体架构设计 第三章系统整体架构设计 根据所要实现的功能要求,构建的移动医疗系统框架如图3.1所示。系统包 括嵌入式ARM平台、GPRS模块和监护三部分。 鼽掷台 触摸显示模块 G陬S模块 工 数 据 采 集 模 。圈曩7 ————— ~ ^肿 ￥3C2410 ■ _- G豫S模块 / 块 I 数据存储模块 } ● 由 8 凰 { //≮\ 图3-1移动医疗系统设计框图 Fig 3-1 block diagram ofdesigned M-health system 3.1嵌入式ARM平台 平台核心采用了韩国Samsung公司32位ARM920T核RISC处理器 s3c2410[351,其内部具有触摸屏控制器、LCD控制器及A/D转换器,支持8路模 拟输入混合器,12位模数转换,最大转换速率为100 kps。嵌入式ARM平台实 现数据采集和处理,由ARM9处理器、数据采集模块、存储模块、触摸显示模 块等组成。四线电阻式触摸屏做输入设备,5.7寸、320x240像素、256色的LCD 做输出设备,二者结合作为触摸显示模块;0"--2.5V的心电模拟信号接入AIN0 由￥3C2410内置的A/D转换器完成数据采集;存储模块采用W86L388D SD卡 控制器芯片,最高时钟速率为25MHZ,兼容MMC卡,使用前要先实现控制芯 10 硕士学位论文 片的初始化。标准20针JTAG接口用于程序调试。平台图如下3-2图所示。 图3-2系统开发硬件平台 Fig 3-2 Developping hardware platform ofthe system 3.2 GPRS模块 GPRS网络是目前国内覆盖范围最大的无线网络,综合性能与成本考虑本文 选择GPRS网络实现无线数据通信。GPRS模块主要功能是通过GPRS网络实现 ARM控制器与医院监护中心或者医生之间的数据交换。在此,系统选用Wavecom 公司的Q2403 GPRS模块。Q2403模块集成了射频电路和GPRS基带处理器,支持 900/1 800双频,提供完整的GSM和GPRS无线接口;带有1 6M Flash和2M S洲; 支持数据、语音、短消息等多种通信方式。用户永远在线、按流量计费、通信 成本低也是选择GPRS进行无线数据传输的重要原因。SIM卡需根据实际数据流 量申请开通合适的GPRS资费套餐。 3.3监护中心 监护部分主要是指医院的监护中心端,它作为移动医疗系统的数据接收端。 连接了Intemet的监护中心服务器将接收到的简单诊断结果及生理数据显示并由 医生作出诊断再通过短信或电话反馈给病人或其家属,同时开具相应医嘱,从 而实现院外流动病人的移动监护和治疗。 第三章系统整体架构设计 3.4移动医疗终端应用信息流程 设计的移动医疗系统终端实现应用主要包括三个重要环节:采集、移动及 管理,即有数据采集设备提供实时的数据采集手段;医护人员在移动过程中借 助一个安全、快速响应的无线网络的支持,保证移动终端上的内容同原有信息 系统的数据同步:具有通信和移动数据库等功能,以便对数据进行有效的管理。 具体信息流图如图3.3所示。 图3-3移动医疗应用信息流图 Fig 3-3 information flow of Mohealth application 硕士学位论文 第四章系统移动终端软件平台构建 移动医疗终端是一个多任务系统,同一时刻可能有若干任务并发执行,由 于引入了人机交互功能,根据患者的不同要求,不同时刻并发执行的任务也会 有所不同。为了对多任务管理提供更好的支持,移植嵌入式操作系统是最佳选 择。依据系统提供的函数来编写应用程序,也可大大减少程序员的负担。需要 注意的是,由于系统设计中选用的Q2403A模块没有自带的TCP/IP协议栈,宜 选用内嵌TCP/IP协议栈的操作系统,为接入Intemet提供支持。 操作系统向下负责管理硬件系统提供的各种资源,向上为各个层次协议软 件提供数据通信接口,共享信息以及进程管理等。目前,嵌入式流行的操作系 统主要有ttC/OS.II、linux(Vxworks、uclinux)等。其中ttc/os.II以体积小、编译 方便著称,所有硬件平台均可使用,开源但非免费,开发商业产品需购买license; Vxworks主要流行于欧美,国内使用较少;Linux主要在带mmu的32位平台上使 用(不带mmu的使用uCLinux),2.4内核以前仅支持分时调度,实时性较不好(主 要是调度算法不同),2.6内核增加了实时调度,提供完善的进程通信、线程同 步等服务,网络功能超级强大(支持PPP、Ethemet等多种网络连接方式,包括 完整的TCP/IP协议),支持动态链接,文件系统完善,有uboot,vivi等bootloader (引导加载程序)的支持,内核小巧容易裁剪,移植性很强。另外,由于Linux 的开放性,新的网络协议也可以很容易地加入内核中。 因此,终端软件平台采用了Linux系统,开发板上构建Linux系统的步骤为i 在宿主机上建立交叉编译的环境;编译生成Bootloader;编译生成Linux的内核; 编译生成根文件系统;向目标机下载Bootloader的映像;烧写Linux内核和文件 系统的映像;复位启动。 第四章系统移动终端软件平台构建 1建立交叉编译环境 由于嵌入式平台的资源限制,嵌入式的开发采用的是一种宿主机.目标机的 开发模式。在宿主机上交叉编译生成目标机上可运行的程序二进制代码,再下 载到目标板上调试运行。因此需要建立交叉编译环境。在建立交叉编译环境前, 在宿主机上要有一个Linux环境,这主要通过两种方法实现:一种是在PC机或虚 拟机(适合配置较高的PC机)上安装Linux操作系统;另外一种就是在Windows 下安装软件cygwin,通过cygwin软件在Windows下提供一个模拟的Linux运行环 境。交叉编译环境建立可以采用Binutils、GCC、Glibc等工具自己来构建交叉编 译工具链,也可以直接下载网上一些成熟稳定的交叉编译器版本。在此选择后 者,这样交叉编译环境的建立实际上就是各个交叉编译工具包的解压,以2.95.3 版本为例:tar ixf cross2.95.3.tar.bz2.C/usr/local/armllP可在/usdlocal/arm目录下创 建2.95.3的目录,也就是构建了2.95.3的交叉编译环境,其他版本的交叉编译器 以同样的方法即可创建对应的交叉编译环境,可在宿主机上同时建立多种交叉 编译器环境。经测试,系统最终采用的Bootloadcr采用2.95.3的交叉编译器,而对 内核采用4.3.2,文件系统的buSybox则采用3.4.5。使用中设定2.95.3版本为默认交 叉编译器,则其余版本使用时均设置绝对路径。 4.2引导加载程序移植 Bootloadcr的基本功能是初始化硬件设备、建立内存空间映射图等,为引导 和加载操作系统内核做好准备。通常,Boofloader是严重依赖于硬件而实现的, 特别是在嵌入式的世界[361。设计中常根据CPU及相应外设如FLASH的不同, 选择合适的Bootloader。Uboot是支持CPU架构较多、应用最为广泛的Bootloadcr 之一,通常搭配NOR Flash使用。NOR Flash可以直接被系统寻址,启动时可直 接把Boofloader拷贝到RAM中去的。若系统采用的是NAND Flash,那么它是 不能直接被系统寻址的,对它的读写需要专门的操作,此时采用Uboot需要修 14 硕士学位论文 改太多的代码,而vivi针对NAND Flash作了特别处理,是韩国Mizi公司开发 的一款针对ARM9处理器系列的Bootloader。根据移动医疗终端的硬件配置系统 选用vivi作为Bootloader,移植vivi以便后续加载终端上运行的嵌入式系统。 vivi的整体设计是仿照linux内核设计的,具有与其相似的配置界面,其源码 结构也与linuxl内核类似,其代码树结构如下: 图4-l vivi源码结构 Fig 4?1 Sourcecode stmct ofvivi 其中,arch存放平台相关代码,在此即为s3c2410的相关代码;Documentation 存放一些操作说明;drivers存放了串口和mtd设备的驱动程序;include存放平台、 mtd设备和运行时所需的头文件;init存放c语言主函数文件,与普通C语言程序 类似,从main.C文件中的main函数开始执行vM;lib提供vivi各程序共用的库函 数;scripts提供配置界面程序;util提供,Nand Flash操作相关的程序。 4.2.1 vivi实现linux启动 Bootloader的启动过程可以分为单阶段和多阶段两种,而多阶段的Bootloader 更好的移植性。vivi等从固态存储设备上启动的 根据完成的功能不同,可将启动过程分为stagel 15 第四章系统移动终端软件平台构建 和stage2两个阶段M7l。 Stagel由arch/s3c24lO/head.s文件实现,汇编编程实现S3C2410堆栈、寄存器、 时钟等的初始化,准备好stage2运行环境,并跳转至lJstage2执行。具体程序执行 流程如图4.2所示。 t置中断和异常向量l l 关闭|^TClt 上 Wakeepstart 0函数处理 D∞ 上 关闭所有中断 上 ● 口始化系统时钟频率 点亮所有嗍I 上 设置U^RT的GPIO 』 韧始化内存控制嚣 1L 内存测试 <各 丫 图4.2 1L 拷贝vivi代码至nM中 1L 跳转至s咖e毖行 vivi stagel启动流程 图4.3 vivi stage2启动流程 Fig 4-2 startup flow ofvivi stagel Fig 4-3 startup flow ofvivi stage2 Stage2的代码在init/main.c中,包括开发板初始化、内存映射和内存管理单 元初始化等的实现,最后跳转至boot—or—vivii函数,辨别vivi的操作模式。Stage2 的具体实现步骤如图4.3所示。vivi的操作模式可分为启动加载模式和下载模式, 需要在初始化完成进行判断。一般通过是否有空格键按下判断,若有则进入、,ivi 命令行控制台进行文件下载、命令操作等,否则加载并启动linuxg马核。 16 硕士学位论文 4.2.2 vivi的配置移植 (1)实现移动医疗应用嵌入式linux引导的基本修改【38-421 这部分可以生成基本硬件环境下运行的vivi Bootloader,包含交叉编译器设 置、顶层Makefile修改、NAND Flash存储分配三个方面的修改。 1)交叉编译器 在此使用2.95.3交叉编译器避免出现invalid option”no.fpu”之类的错误。 2)顶层Makefile 在顶层Makefile中设置①Llmm INCLUDE DIR=/kernel/include/,kernel 即为存放linux内核源码的位置,vivi的编译需要linux内核源码的部分头文件; ②CROSS COMPILE=arm-linux.,若没在/etc/profile文件中设置了默认的交叉 编译工具,则需具体交叉编译工具的路径;③ARM GCC LIBS一羔一 /usr/local/arm/2.95.3/arm.1inux/lib/gee.1ib/arm.1inux/2.95.3,这边完成vivi编译时 链接库的配置,注意不是/usr/local/arm/2.95.3/1ib,否则会由于arm-linux.1d找不 到所需的libgcc.a库而出现瓜r/local/arm/2.95.3/bin/arm—linux—ld:???一lgce的错误。 3)Nand Flash存储空间分配 一. 根据系统配置需求,可把NAND FLASH分为五个区,NAND FLASH存储 空间分配如图4.4所示。具体是通过修改arch/s3c2410/smdk2410.c中数据结构 mtd_partition_t . default_mtd_partitiom[]={>实现分区名称、偏移地址、占用空间 大小及标志位的设置。 图44NANDFALSH存储分配 Fig 4-4 NAND FLASH allocation 17 第四章系统移动终端软件平台构建 (2)功能扩展 以上完成得到的vivi已经可以进行移动医疗系统终端linux系统内核的引导 启动,但是仅支持串口模式的下载,具有一定的局限性。为有效缩减系统开发 时间和适应应用程序开发需要,本文对vivi添加了USB下载和yaffs文件系统的 烧写命令支持。 由于vivi源码中没有USB下载和yaffs文件系统的支持,因此需在原有代码基 础上先添加所需的源文件,再修改lib/config_cmd.in添加命令配置选项。vivi的命 令添加是通过include/command.h中的结构体user command t来实现的。以USB下 载命令usb download为例介绍vj、,i中命令的添加方法。usb download定义如下: user—command—t usb—cmd={ ‘‘1asb—download”, Command—usb, NULL, ‘'usb—download…download files to nandflash using USB”); vivi启动后会调用lib/command.c Op l拘add_commandO把所支持的命令通过 链表连接起来。由main.c中调用init_builtin_cmdsOi蚕l数添加语句add_command(& usb cmd)即可完成USB下载命令的添加。 (3)启动参数设置 上面完成后,移动医疗系统所需的vivi功能已全部实现。但是vivi是可以 传递参数给内核的Bootloader,linux内核会依据vivi中定义的linux 启动系统。因此还需针对arch/s3c2410/smdlc2410.c中的linux 置。根据NAND FLASH分区信息,设置为linux root=/dev/mtdblock3 init=/linuxrc cmd cmd line来 line进行设 cmd line=¨noinitrd console=-ttySACO¨。其中,root设置根文件系统 ‘ 所在分区,console设置与PC机连接的控制终端。 硕士学位论文 4.2.3 vivi下载到开发板 用直连串口线连接主机COMl和开发板的串口,用Jflash配线连接主机的 并口和开发板的JTAG接口;将Jflash软件放在宿主机目录,进入其目录并在 终端下输入:./Jflash-s3c2410 入O,回车;在Input Select the function to vivi/t=5,在Select the function to test:提示下键 target block number:提示下键入0,回车; 烧写完毕后在 test:提示下键入2,回车完成vivi到开发板的下载。 4.3 Linux内核移植 实现嵌入式系统功能的第一步就是进行系统内核移植,内核提供移动医疗 终端应用程序的有效管理、为程序运行准备好设备、提供网络支持等 内核移植的关键是要确定硬件平台,目前嵌入式常用的处理器有ARM、 PowerPC、MIPS等【37。8】,在国内占据主导地位的主要是ARM。内核的裁剪、定 制其实就是进行内核的配置,配置内核主要是处理器类型、板级支持、设备驱 动支持、文件系统支持等。