嵌入式开发 > 详情

利用U-Boot实现uClinux向S3C44B0的移植

发布时间:2020-07-07 发布时间:
|

1 引言

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机的并口连接支持在线调试与程序烧写。

硬件平台框图

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 (通用公共许可) 公约,完全开放源代码。可以从/zixunimg/eepwimg/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等文件,则说明前面的过程无误,如果出现错误,则需要根据错误信息进行相关修改;

(6) 修改硬件相关的文件,在cpu/中有S3C44B0的目录,说明U-Boot已经提供了对S3C44B0的支持,我们只是需要修改部分文件使其适合我们的目标平台,主要修改的是cpu/下start.S 和serial.c,include/configs/下的lanlan.h中关于cpu的频率、串口波特率、PLLCON寄存器、flash和 sdram的大小、基地址和网络控制芯片的基地址等内容,确定修改正确后运行make lanlan_config;make命令,编译生成的u-boot.bin就是我们需要的引导程序;

(7) 通过JTAG将生成的u-boot.bin烧写到目标平台的0x0地址,配置Linux下的minicom或者Windows下的超级终端,注意配置的串口及串口波特率要与U-Boot中设置的一样,按复位键或上电重启目标平台后可以从minicom或超级终端看到U-Boot在系统中运行了。

通过以上步骤,完成了U-Boot移植的主要工作。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
定时器CTC模式的测试