基于ADSP-BF533的μClinux嵌入式系统移植与开发
U—Boot(Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。也是是嵌入式Linux系统常用的Boot Loader之一。其完成的功能是初始化硬件设备、改变处理器运行模式、重组中断向量和建立内存空间映射图,从而将系统的软硬件带到一个合适的状态或者用户定制的特定状态,以便为最终加载操作系统内核准备好正确的环境。
U—Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持种引导方式;具有功能强大且成熟、稳定等诸多优点,故本文采用U—Boot引导μClinux内核。U—Boot严重依赖于底层硬件,不同的CPU或嵌入式板极设备需要不同的U—Boot,不过因为本文的重点是μClinux的移植,所以这里不再详述U—Boot的具体实现过程。
当系统上电后,U—Boot从地址OxO开始执行,将存储器映射重新配置,如图1所示,并会执行μClinux的固化内核。
U一Boot可以使用ADI的仿真软件Visual DSP++通过仿真器或JTAG口下载到目标板上。
4 μClinux内核的编译和移植
作为操作系统的核心,μClinux内核负责管理系统的进程、内存、设备驱动程序、文件系统和网络系统,决定着系统的各种性能。μClinux内核采用模块化的组织结构,通过增减内核模块的方式来增减系统的功能。
4.1 内核配置
虽然μClinux的内核代码大部分独立于处理器和其体系结构,但是最底层的代码还是基于特定系统的。虽然各个系统存在相同之处,但是它们的中断处理上下文、内存映射的维护、任务上下文和初始化过程是独特的。这些例行程序放置在μClinux代码树的aroh/目录下。这里需要根据自己的硬件平台来配置内核代码。配置过程如下:
可以从官方网站http://blackfin.μClinux.org处下载μClinux—list的内核源代码。运行解压命令:将tar— xvfμClinux—dist.tar.gz解压完毕后,就会生成/μClinux—dist目录,加入该目录后按如下顺序编译内核:
(1)make menuconfig;进入菜单方式配置指令;
(2)选择所使用的平台类型和所使用的库
本文设计的目标板选择:AnalogDevices/BF533一EZ—KIT和μC—libc库。在配置栏中,选择Load an AlternateConfiguration File,按确认,退出配置栏;
(3)make dep;寻找依存关系;
(4)make clean;清除以前构造内核时生成的所有目标文件、模块文件和一些临时文件;
(5)make lib_only;编译库文件;
(6)make user_only;编译用户应用程序文件;
(7)make tomfs;生成romfs文件系统;
(8)make image;生成镜像文件然后通过Jtag口输入到目标板;
(9)make;通过各个目录的makefile文件进行,会在各目录下生成一大堆目标文件。
在上述步骤完成后,就完成了对μClinux源码的编译工作。最后会在/μClinux—dist/images目录下看到3个内核文件:linux.dxe,linux.bin和zlmage.bin。如果编译不成功,需要根据编译过程的提示信息找到错误并重新编译,直到成功为止。
4.2 修改配置内核代码
直接由源代码编译生成的内核映像文件一般不会启动成功,需要根据自己的目标板进行配置。需要修改系统启动初始化文件crt0_ram.s,sysinit.c和ram.1d。
在crt0_ram.s中需要根据自己的目标板修改基地址、存储器大小和起始地址。在sysinit.c中需要修改片选设置,分别对FLASH和 SDRAM进行片选设置。在ram.1d中修改内核连接加载地址。做完上面的修改,重新编译生成linux.dxe等文件。
4.3 μClinux内核的下载与执行
μClinux内核有2种可选的运行方式:一种是在FLASH上直接运行;另一种是加载到内存中运行,系统启动时从FLASH中读取压缩的内核代码(存储器空间有限,所以一般需要压缩内核代码)到内存中解压,然后开始执行,这种方法比第一种的速度更快(RAM的存取速度比FLASH的快)。所以选取第二种方法。
编译好的内核文件可以由Visual DSP++开发装置,通过网口或串口把linux.dxe下载到目标板的FLASH中,从设定的入口地址(一般为Oxl000)执行即可启动内核。
启动μClinux就可以在超级终端看到μClinux的欢迎信息和简单的shell提示符,界面如图3所示。
评论