引言
目前,Linux作为仅次于微软Windows的操作系统已经在PC和嵌入式领域得到了广泛的应用,尤其是在嵌入式开发领域,由于Linux操作系统具有成本低,可靠性高,源码方法等显著的优点,已经成为受众多嵌入式开发者青睐的操作系统之一。目前,Linux操作系统所支持的包括X86、ARM、MIPS、MIPS64、Sun SPARC、POWER PC、Motorola 68K、IBM S/390、Alpha、IA64、cris、parisc、sh等主要的体系结构。本文以实际项目中一个MIPS32架构的CPU和板级系统为例,阐述了如何将Linux操作系统移植到目标平台上。
1 目标平台概述
本文所讨论的开发平台采用的CPU是同济大学微电子中心自主开发的BC320处理器,采用MIPS 4KC的体系结构,带MMU、无浮点协处理器、标准5段流水线,指令及数据Cache的大小各为4KB,寻址空间为4GB,其中0x00000000-0x7fffffff为用户空间,0x80000000-0xffffffff为核心空间,板级系统采用了PMC的PM8172芯片组,支持最高128MB的SDRAM,BOOT ROM的地址空间是0x1fc00000-0x1fffffff。
2 Linux交叉编译环境的建立及内核配置和编译
在进行实际的Linux操作系统移植之前,需要在宿主机上建立图1所示的MIPS的交叉编译环境,以便能在普通PC机上通过交叉编译工具来调试运行在目标开发板上的程序。
建立MIPS交叉编译环境的主要工具有binutils、GCC、glibc以及作为调试器的gdb等,其中binutils为二进制文件的处理工具,它主要包括一些辅助开发工具,例如:readelf可显示elf文件信息及段信息;nm可列出程序的符号表;strip将不必要的代码去掉以减小可执行文件,objdump可用来显示返汇编代码等,GCC是GNU提供的支持多种输入高级语言与多种输出机器码的编译器,是Linux操作系统的配套编译器,支持Linux所采用的扩展C语言。glibc是连接和运行库,由于此链接和运行库须运行在目标开发板上,所以必须用先前建立的交叉编译器对其进行编译,如图内核大小要求较为苛刻。还可以使用uclibc等其他链接和运行库作为glibc的替代品,此外,若不是从硬盘启动,则还须为Linux制作ramdisk。在ramdisk上,除了要安放/dev(放置Linux操作系统所需要的设备文件)、/etc(放置Linux系统配置文件)、/lib(放置交叉编译后生成的库文件)等目录及其下的文件外,还需要在/bin和/sbin下放置各种系统必需的命令程序,如shell、init、vi等,为此需要busybox或者tinylogin等专为Linux操作系统提供的标准工具程序。凡此种种,都可以在GNU旗下的网站下载并自由修改其源代码。