图8 Linux系统软件组织示意图
2.1 S5PC100存储系统设计
设计的目标平台中需要扩展三种类型的存储介质,分 别为DDR2 SDRAM、NAND FLASH以及SD卡电路。下面按 照三种存储介质在系统中的功能分别进行阐述。
(1)DDR2 SDRAM电路
S5PC100 SDRAM控制器通过向外部16位或32位SDRAM
提供接口来扩展芯片存储能力。本平台采用2片K4T1G164
16位宽度DD2 SDRAM组成32位内存,容量256MB,如图3。
(2)NANDFLASH电路与SD卡存储电路 由于系统需要运行Linux系统,系统代码较为复杂,需要一定容量的存储器存放Linux操作系统源代码以及应用程 序,由于S5PC100内置了NAND FL ASH控制器,因此平台 采用K9F2G08 256MB NAND FLASH直接与S5PC100 NAND FLASH控制器接口连接。SD卡可通过S5PC100内置SDIO1总 线直接连接。其NAND FLASH电路原理图如图4所示、SD卡 的原理图如图5所示。
2.2 温度传感器接口
平台设计了采用DS18B20一线制温度传感器接口。采用 S5PC100处理器GPIO引脚接口控制温度传感器DS18B20的温 度测量,LCD屏输出测量温度,原理图如图6所示。
2.3 温度报警电路
本 设 计 采 用 软 件 处 理 报 警 , 利 用 无 源 蜂 鸣 器 进 行 报 警,当所测温度超限后输出PWM信号,驱动蜂鸣器报警, 其电路原理图如图7所示。
3 系统软件设计
3.1 Linux操作系统移植
完整的嵌入式linux系统由bootloader、kernel、rootfs等
3个基本部分组成。其中bootloader用于引导和装载操作系统、kernel为linux内核程序、rootfs为文件系统,如图8。
3.1.1 交叉编译环境
嵌入式开发系统受到自身硬件以及软件资源的限制, 无法完成代码的本地编译,其开发需要在宿主机上建立交叉 开发环境。
交叉开发环境是包含了编辑器、编译器、连接器、调 试器和libc库等的程序环境。在开发嵌入式Linux相关软件 时,常用的交叉开发工具是GNU工具链。系统中宿主机使 用的开发环境为ubuntu12.04操作系统,目标板内核版本号为 标准linux-2.6.35,使用到的交叉编译器是arm-linux-gcc-4.5.1。
3.1.2 Bootloader程序设计
Bootloader是在操作系统运行前运行的一段专用程序, 可以完成平台硬件设备的初始化,并能完成引导和调试操作 系统。 Bootloader依赖CPU体系结构,一般将Bootloader按功 能划分为两个阶段,其中第1阶段实现基本硬件电路的初始 化,为操作系统的运行准备环境。在平台中,由于使用的是 ARM微控制器,因此第一阶段需要实现设置处理器进入管 理模式、关闭处理器中断与快中断、设置处理器主频、高速 总线主频与告诉外设主频、CPU关闭MMU与数据Cache,初 始化内存控制器,代码由存储器自搬运至内存,设置运行程 序需要的临时堆栈、BSS段清零等工作。第2阶段主要实现 进入交互模式或者自引导模式,实现操作系统的加载,一般 要根据操作系统与硬件平台的需要实现相关硬件的初始化工 作, 如初始化GPIO、串口、网口等外部设备,完成向内核 传递启动参数等功能。
3.1.3 Linux内核的定制
Linux目前已经支持了x86、ARM、MIPS等多种处理器 架构,支持的平台类型多达3000多种。各种ARM处理器的 设计厂商为了更好地推广处理器的使用,都会Linux中添加补丁, 使得该处理器能够在L i nu x 行正常运行。 平台选用Linux-2.6.35版本,面对大规模的Linux源代码,我们需要对Linux进行剪裁移植。
Linux源代码采用模块化的组织方式,可以通过条件编 译的方式对Linux源码的功能进行剪裁,但是条件编译法裁 剪的是功能模块,对于具体的硬件驱动和优化就需要对源代 码进行细微的修改了。