基于Linux的无线传感器网络引导程序的设计
扫描二维码
随时随地手机看文章
引言
对等网络(Peer-to-Peer, P2P)和自组织网络(Selforganization Network)是目前国际计算机网络技术领域的研究 热点,有别于传统通信网络的Client/Server机制,对等网络 节点之间不仅可以直接通信,而且每个节点都可作为中间节点 为其他节点提供服务,使本不能相互覆盖的2个或多个网络节 点之间实现通信与数据传输。
无线传感器网络作为新一代的传感器网络,充分借鉴了 对等网络技术和自组织网络技术的特点。终端作为网络的实体 和业务的承载体,节点芯片是整个无线传感器网络的基础,网 络及其关键技术的研究应首先搭建网络和业务的承载平台,可 移动终端则成为验证节点芯片移动性、数据传输、覆盖范围 等性能的平台。在实际应用中,基于ARM处理器和嵌入式技 术的无线传感器网络系统在环境监测、医疗监护等领域得到 了广泛的应用。
适用于终端的嵌入式操作系统主要包括Symbian,Windows Mobile,PALM OS48 和 Linux。由于 Linux 具有源代码的开放性和内核的可配置性等特点,因此本设计选择 内核版本2.4的Linux作为终端的操作系统。所设计的移动 终端硬件平台主要由ARM9嵌入式处理器、射频单元(RF)、存储体、音频处理、触摸式液晶屏控制、键盘输入和电源管 理等单元构成,并内置以太网和USB接口。其中,存储体部 分包含CPU片内FLASH、片内SRAM、外置大页面Nand FLASH 以及高速低功耗 PSRAM(Pseudo SRAM)。
BootLoader是终端上电或复位之后先于操作系统内核运 行的引导程序。BootLoader与硬件息息相关,硬件环境不同,BootLoader也不同,要建立一个通用的BootLoader几乎是不 可能的。基于该思路,本文重点阐述了无线传感器网络移动终 端引导程序(BootLoader)的设计实现。
1引导程序设计流程
引导程序设计流程包括系统配置、初始化与参数配置、装载映像文件、内核的引导及系统初始化、Linux内核启动。程序设计采用汇编语言与C语言混合方式:其中,汇编部分 实现CPU的初始化、存储空间初始化等;C语言部分则完成 加载模式的判决、内核映像文件装载等,图1所示是其工作流 程图。引导程序支持加载模式和下载模式两种工作模式,其中,启动加载为默认模式。
1.1 系统配置
系统配置包括终端硬件平台设计、节点芯片驱动程序、大页面Flash的驱动程序设计、系统启动方式选择、Linux内 核和文件系统映像文件的编译、内核加载方式配置、存储空 间配置等工作。编译完成的引导程序和映像文件可烧写至外 部Nand Flash。重新上电后,根据配置管脚的状态,处理器 自动将引导程序的启动代码从Nand Flash前4 KB空间拷贝到 处理器Nand Flash控制器内置SRAM(Steppingstone)中运行, 同时引导完成系统的初始化和镜像文件的加载。
1.2硬件系统初始化与参数配置阶段
该阶段工作是完成系统硬件部分的初始化,包括屏蔽所 有的中断、设置CPU速度和时钟频率、存储体初始化、Nand Flash初始化、GPIO端口和UART初始化、关闭CPU内部指 令/数据Cache(如CPU不具备内部的数据/指令Cache,其 相关的函数返回值为0)、定义程序的入口地址等。
1.3装载映像文件
在PSRAM中分配128 KB的单元作为Ramdisk系统,作为可读写数据段,建立一个内核的运行环境。然后将Flash 中的映像文件装载到内存中,该内存单元作为Romdisk系统 直接运行内核。同时需要将该单元保护起来,避免误操作或 其他非法指令和地址修改内核部分的代码。
操作系统、文件系统和应用程序构成的映像文件有两种 装载模式:Flash-resident Image 和 Flash-based Image。前一 种是引导程序,仅仅把Image文件中的数据段(data + bss)复 制到系统内存中,代码段(text)在Romdisk中直接运行;后一 种则是引导程序把Image完全复制到系统内存中执行,包括 Image中的代码段(text)和数据段(data+bss)。
1.4内核的引导及系统初始化
上述步骤完成之后,程序计数器指针(PC)跳转到内核起 始地址处,完成内核解压、安装及其环境参数配置。设置体 系结构环境,进行命令参数的解析,设置中断和异常向量表, 进行进程调度器、定时器、控制台的配置,Cache初始化、内 存页面初始化、设备初始化等。操作系统的初始化还包含文 件系统的安装,如Ext2文件系统、管理Nand Flash的JFFS2 文件系统。
1.5 Linux内核的启动
引导程序引导完成后释放对硬件系统的控制权,转交给 Linux操作系统,并释放清除使用过的临时内存,然后跳转到 操作系统内核(kernel)的第1条指令地址,启动Linux操作系 统,执行/etc目录下的用户系统配置信息,准备系统应用程序 的使用环境。
2引导程序设计实现
引导程序的实现包括4个关键环节的配置:内存规划, 堆栈分配,中断向量配置及Nand Flash读写操作。
2.1内存规划
内存规划包括两个方面:第一是内核映像所占用的内存 范围;第二是根文件系统所占用的内存范围以及应用程序和程 序申请的缓冲区所占用的内存。对于内核文件,将其拷贝到从 RAM_BASE(MEM_START+0x8000)这个基地址开始的大约 1 MB的内存范围内,以MEM_START为基址的前32 KB内 存需要空出,让Linux内核放置一些全局数据结构,如启动 参数和内核页表等信息。根文件系统映像文件则将其拷贝到以 MEM_START+0x100000为基址的内存中(采用Ramdisk作 为根文件的系统映像,其解压后的大小一般为1 MB)。
2.2堆栈分配
ARM有7种工作执行状态,每一种状态的堆栈配置都 是独立的,所以,对程序中需要用到的每一种模式都要为堆 栈指针SP(Stack Pointer)定义一个堆栈地址,使其指向该运行 模式的栈空间。这样,当程序的运行进入异常模式时,可以 将需要保护的寄存器放入SP所指向的堆栈,而当程序从异常 模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证 异常发生后程序的正常执行。改变程序状态寄存器(CPSR)内 的状态位(低5位)可使处理器切换到不同的工作状态,根据 系统使用中断和异常的情况,可能需要初始化部分或全部堆 栈指针寄存器。本文的堆栈配置包括外部中断模式、快速中 断模式、系统调试模式、未定义指令模式、系统模式和用户 模式。其中,外部中断模式栈配置程序如下:
InitStack
MOV R0,LR
MSR CPSR_c,#0xd2//设置外部中断模式堆栈
LDR SP,StackIrq
MOV PC,R0
StackSvc DCD SvcStackSpace+(SVC_STACK_ LEGTH-1)*4
StackIrq DCD IrqStackSpace+(IRQ_STACK_ LEGTH-1)*4
SvcStackSpace SPACE SVC_STACK_LEGTH*4// 管理模 式堆栈空间
IrqStackSpace SPACE IRQ_STACK_LEGTH*4// 中断模 式堆栈空间
对管理模式堆栈而言,SP的值由SvcStackSpace的地址 加上SVC_STACK_LEGTH的大小而定。系统所有的堆栈均 位于系统运行空间PSRAM中。可通过外部输入命令的方式 切换工作模式,并通过查看特殊寄存器的内容帮助诊断系统 运行状态。
3结语
本文提出无线传感器网络可移动终端引导程序的设计方 法,从实际调试看,Linux版本号、CPU识别信息、时钟配置、内存空间配置以及外设初始化信息等显示全部正确,表明了采 用该方法设计的引导程序能够成功地运行于自主设计的无线 移动终端硬件平台上,完成了映像文件的加载、解压,操作系 统能够开始正常运行。