引言
嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。其中基于嵌入式Linux的远程配置模块的设计越来越得到人们的关注。通过基于嵌入式Linux的远程配置模块设计,远程专家和相关技术人员可以从Internet网上任意节点对服务器端所连接的设备的运行状态进行监控.并执行操作的修改。
系统的主要功能是通过计算机可使远程专家和相关技术人员在异地通过系统的客户器端监控多台设备的运行状态。系统在设备端的服务器端不仅仅承担一些实时检测系统状态的任务.而且需要把这些记录信息进行保存,并对客户端软件发出的请求进行相应的处理,系统在硬件上扩展了网卡模块、输入输出信号接口等模块,以满足远程控制的需求。
1 系统硬件设计
本系统采用三星公司.ARM7TDMI核心的S3C44BOX作为微处理器芯片,系统硬件框架结构图如图l所示,其电路原理图如图2所示。
1.1 存储模块设计
系统的FLASH采用的是HY29LV160,容量大小为2M字节,充当S3C44BOX的程序存储器,其内部存放启动代码、uclinux内核、以太网MAC地址以及应用程序等。HY29LV160的单片存储容量为16M位(2 M字节),工作电压为2.7 V~3.6 V,采用48脚TSOP封装或48脚FBGA封装,16位数据宽度,可以以8位(字节模式)或16位(字模式)数据宽度的方式工作。在本系统设计过程中,考虑到uclinux操作系统带应用程序的最大容量不会超过l_7 MB,因此,FLASH采用大小为2MB的FLASH存储器就可以满足系统的需求。DRAM采用的是HY57V641620,用于设置程序堆栈和存放各种变量。HY57V641620存储容量为4组x 16 M位(8 M字节),工作电压为3.3 V,根据系统需求,可构建16位或32位的SDRAM存储器系统.但为充分发挥32位CPU的数据处理能力,系统采用32位的SDRAM存储器系统,共16 MB的SDRAM空间,可满足嵌入式操作系统及各种相对较复杂的算法的运行要求。
1.2 网络接口模块设计
系统的网络接口芯片采用的是RTL8019AS。它是一款10 M以太网芯片,能够为系统提供以太网的接入。RTL8019AS数据总线宽度为16位。因此设计中将IOCS16B引脚上拉。RTL8Ol9AS内部集成了两块RAM。一块16 kB,地址为0x4000—7FFF;一块32字节,地址为0x0000一Ox001F。16 k的RAM用作收发数据的缓冲区,一般将0x4000—0x46FF作为发送缓冲区,0x4700—0x7FFF作为接收缓冲区。RTL8019的中断输出INTO与S3C44BOX的EINTO端相连。这样可以通过处理器的外部中断O来报告CPURTL8019AS目前所执行的操作,如发送和接收数据,错误异常等等。系统可以通过查询RTL8019内部寄存器ISR的值.从而得到系统所处的运行状态进行读取。
2 系统软件平台的构建
uclinux经过对标准Linux内核的改动,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,但uclinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持,以及标准丰富的API,适合远程配置模块的建立。因此,远程配置模块以uclinux为基础,建立系统的软件平台。
系统采用GNU的套件arm-elf工具链:arm—elf-tools-20030314.sh建立对uclinux进行编译的交叉环境。将arm-elf-tools-20030314.sh拷贝到根目录,运行安装:
sh arm-elf-tools-20030314.sh即可对uclinux进行编译和移植了
交叉编译成功后,在uClinux-dist/目录下产生images目录,其中包含的3个二进制文件文件image.ram,image.rom和romfs.img。
3 系统软件设计
系统的软件是实现远程配置模块的核心,首先编写bootloader的过程,以优化系统在开发板上的执行,然后实现了应用程序以及设备驱动程序的开发。应用程序的开发主要是基于Socket应用程序的编写。在socket的实现过程中.本系统采用了xml文件配置设备驱动参数。
3.1 Bootloader的设计
Bootloader的设计主要是为了在系统上电复位之后,将系统程序执行跳转到系统内核的执行地点。针对这个主要的功能,必须对微处理器的内核以及其他部分进行初始化以及其它的功能扩展,Bootloader它主要完成了以下几个过程:
(1)建立中断向量表
(2)初始化各种处理器模式
(3)引入特殊变量
(4)初始化memory
(5)代码复制
完成了系统的硬件初始化过程后,将CPU使用权交给
了操作系统,从而完成了.Bootloader的最终目的。
3.2设备驱动程序开发
Linux对设备的操作Linux系统访问设备就像访问文件—样。例如打开设备使用系统调用open(),关闭设备使用系