S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于arm7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系统,其具有支持多任务、内核精简、高效稳定和源代码开放的优点。系统移植的基本过程包括:获取较新版本的linux-2.6.9内核源码,根据目标平台对源码中与硬件平台相关部分进行修改,添加必要的外设驱动程序,对系统进行针对目标平台的交叉编译,生成的内核映像文件的下载调试等。 2 硬件环境介绍 硬件平台以S3C44B0为核心,采用的外部晶振频率为6MHZ,内核主频最高可达到66MHZ,平台以2MB的AMD29LV160DB做 rom,其地址空间为0~1fffff,以HY57V1620HG sdram做内存,地址空间为0c000000~0c7fffff,共8MB,以RTL8019as作为网络控制芯片,接在S3C44B0的Bank5 上,通过JTAG与PC机的并口连接支持在线调试与程序烧写。 ![](http://embed.chinaitlab.com/UploadFiles_4615/201205/20120531100540594.jpg)
图1 硬件平台框图
3 uClinux的移植 3.1 交叉编译环境的建立 交叉编译是利用运行在某机器(宿主机)上的编译器编译某个源程序生成在另一台机器(目标机)上运行的目标代码的过程。本文的交叉编译环境建立如下:在PC机上安装Linux操作系统做为我们的宿主机,版本为Fedore Core 5,从http : // www. uClinux .org/上下载交叉编译工具链arm-elf-tools20040427并安装在Linux 宿主机上,这样就建立了uClinux-arm的交叉编译环境。 3.2 U-Boot-1.1.2的移植 Bootloader是系统加电后运行的第一段代码,在一个基于arm的嵌入式系统中,系统上电或复位时通常都从地址0X00000000处开始执行,而这个地址处通常就是系统的bootloader,通过这段程序可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境调整到一个合适的状态,以便为最终的调用操作系统内核准备好正确的环境。 本文中bootloader采用对U-Boot进行移植来实现的。U-Boot的全称是Universal Boot Loader,是德国DENX小组开发的用于多种嵌入式CPU的Bootloader引导程序, 支持PowPC、arm、MIPS、M68K等多种处理器平台,支持Linux、VxWorks、NetBSD等多种嵌入式操作系统,主要用来开发嵌入式系统初始化代码bootloader,其易于裁剪和调试,尊循GPL (通用公共许可) 公约,完全开放源代码。可以从http://sourceforge.net/projects/u-boot得到它多个版本的源码,本文是以u- boot-1.1.2为例进行移植的。 在移植前可以通过查看doc文档了解U-Boot源码的主要结构,在众多的目录中与移植相关的主要是board、cpu、drivers等几个目录。移植的基本过程如下: (1) 查找以S3C44B0处理器为核心的硬件平台,此目的是为了简化移植难度; 在board/下运行 find -exec grep -l 44B0 {} 找到/dave/B2/B2.c,由此我们知道dave公司的B2平台是以S3C44B0处理器为核心的,所以移植可以参考B2平台进行; (2) 建立我们目标平台的目录lanlan,把B2板的文件拷到建立的目录中,但需要修改文件的名称; (3) 修改新建目录中的文件的名称,将文件中所有的B2都改成lanlan; (4) 在include/configs/添加目标平台的配置文件lanlan.h;此文件可以参考B2.h建立; (5) 修改总目录下的Makefile文件,添加目标板的编译信息; 这个过程完成后可以在u-boot/目录下依次运行make lanlan_config ; make进行编译,编译完成后如果能生成u-boot.bin等文件,则说明前面的过程无误,如果出现错误,则需要根据错误信息进行相关修改; |