3.1 硬件平台的选择
基于嵌入式微处理器在嵌入式系统中的核心地位,选择一款恰当的处理器非常重要。目前市场主流的32位微处理器主要有Power PC、68K、MIPS 和ARM 等。通常在选择微处理器时, 需要考虑很多因素, 如性能、功耗、价格、配套的开发工具以及市场的供货情况, 而ARM 在这些方面都具有优势。同时ARM 还具有业界领先的RISC 体系架构, 所以, 选择基于ARM 核的处理器是最理想的。
本设计采用S3C2410 开发板为硬件平台。该平台在尽可能小的电路板面积上集成了64 M SDRAM、64 MNand Flash 、1 M Nor Flash 、RJ -45 网卡、音频输入与输出、USB Host 、USB Slave 、标准串口、SD 卡插座、, 用户按键和一些用户灯等设备接口, 并且引出CPU 的大部分信号引脚。通过这个平台可以针对S3C2410 进行系统级的硬件和软件设计, 并且能够很方便地在该平台上进行相关的功能扩展, 并进行所需的产品设计。
3.2 系统的软件实现
3.2.1 开发平台宿主机的配置
本系统的开发平台选择ubuntu 8.04 LTS 。首先从网络上下载vmware workstation 的体验版, 在Windows XP环境下安装配置好。从网络下载ubuntu 8.04 LTS 版本的ISO 镜像文件, 在vmware workstation 虚拟机环境下安装配置好ubuntu 8.04 LTS 系统, 设置虚拟机中ubuntu 系统的网络连接方式为Bridged , 通过apt 软件包管理程序可以方便地安装配置虚拟机中的ubuntu 开发环境, 安装系统开发所必须的程序库, 如build-essential,samba 以及openssh-server 等。
3.2.2 开发过程
(1) 搭建交叉编译环境
当开发嵌入式Linux 软件时, 一般都要经过交叉编译。如果是开发PC 机上的软件, 只要用Linux 本身提供的强大的编译器(如GCC) 直接编译即可。而一般的嵌入式设备所用的CPU 和PC 机上的CPU 有着不同的架构,这样就要求在PC 机上编译出适用于嵌入式设备CPU 架构的软件,这就是交叉编译的概念。图2 是交叉编译环境图示。
(2)U-boot 的移植
嵌入式的软件系统主要由Bootloader 、Kernel 、嵌入式文件系统以及应用程序等组成。其中,Bootloader 是介于硬件和操作系统之间的一层, 其作用就好像PC 机中的BIOS 。系统加电运行后, 由系统自动加载, 通过这段程序, 可以初始化硬件设备, 建立内存空间的映射图, 从而将系统的硬件环境引导到一个合适的状态, 以便为最终调用操作系统内核准备好环境。本系统对于bootloader的选择采用Das U-boot, 由于U-boot 的使用范围相当广, 因此很容易找到关于U-boot 移植的相关资料。Uboot引导程序分为stage1 和stage 2 两大部分,stage1 中主要包括设备初始化、中断设置、时钟的设置以及存储器初始化等工作, 并且采用汇编语言实现, 而一些通用功能大多采用C 语言实现, 放在stage 2 阶段执行。
修改cpu/arm920t/start.s 文件,start.s 文件是采用汇编语言编写的U-boot 程序入口代码, 完成对底层硬件的初始化。
修改board/SMDk2410/nand_read.c 中的nand_read_11函数将stage 2 阶段的代码复制到ram 中。
修改U-boot 根目录下的makefile 文件完成以后, 依次在终端中执行:
Make distclean // 清除生成的链接
Make smdk2410_config
Make CROSS -COMPILE=arm-linux - 编译成功后, 将生成三个文件, 其中需要烧到开发板中的文件是二进制的u-boot.bin 文件。
(3) 裁剪Linux 内核
修改根目录下的makefile 文件, 指定目标平台为ARM,ARCH:=arm, 指定交叉编译器,CROSS_COMPILE=/usr/LOCal/3.3.2/bin/arm-linux-gcc 内核移植完成后, 可以对内核进行配置, 一般用“make menuconfig ” 命令即可,具体的配置要根据自己的软件平台以及应用程序的使用情况来确定, 内核要尽可能小, 以满足嵌入式系统资源少的特点。