1 引言
uCLinux支持多任务,支持多种文件系统,提供了对网络的强大支持,具有完整的TCP/IP协议栈,以及标准丰富的API。由于它的很多核心代码都为没有被MMU的处理器重新编写过,对标准Linux庞大的应用程序库和驱动程序库作了删改,所以它的内核要比常规的Linux 内核小很多;uCLinux包含Linux常用的API和小于512k的内核及相关的工具,总代码只有900k左右,但同时保留了常规Linux 操作系统绝大多数的优点。
2 基于ARM的硬件平台
嵌入式领域32位处理器以ARM公司的ARM核最为流行CONTROL ENGINEERING China版权所有,本文以Samsung公司的ARM7TDMI芯片S3C4510为处理器开发板为硬件平台www.cechina.cn,开发板上与S3C4510相关的部分主要集成了如下器件:
(2M+512k)B 的Flash,其中AT29C010A为512B作为BootLoader,一片SST49VF160为1M×16bitFlash;
16MB 的DRAM,由两片4M×16bits的HY57V641620提供 ;
16MB 的SRAM,由M-systems的新一代闪存盘D
Ethernet接口;
ARM JTAG 接口。
开发板上与S3C4510相关部分功能框图如图1 所示。
IO
UART
S3C4510
JTAG
Ethernet
FLASH
F
DOC2000
232串口
JTAG接口
LED
以太网接口
用户自定义逻辑
DRAM
3 uCLinux内核移植
嵌入式 Linux 开发大致涉及三个层次:引导装载程序、Linux 内核和驱动及应用程序。我们将讨论涉及这三层的一些基本概念;深入了解引导装载程序、内核和文件系统是如何交互的。
引导程序BootLoader的主要作用包括初始化处理器;初始化必备的设备;下载系统映象;初始化操作系统系统并准备执行。
引导装载程序有两种方法:专用软件和微小的引导代码。专用软件可以直接与远程系统上的闪存设备进行交互并将引导装载程序安装在闪存的给定位置中。而某些种类的嵌入式设备具有微小的引导代码:根据几个字节的指令CONTROL ENGINEERING China版权所有,它将初始化一些 DRAM 设置并启用目标上的一个串行(或者 USB控制工程网版权所有,或者以太网)端口与主机程序通信;然后,主机程序或装入程序可以使用这个连接将引导装载程序传送到目标上,并将它写入闪存。
嵌入式设备上一些流行的并可免费使用的 Linux 引导装载程序有 Blob、Redboot 和 Bootldr。所有这些引导装载程序都用于基于 ARM 设备上的 Linux,并需要Jflash-linux 工具用于安装。一旦将引导装载程序安装到目标的闪存中,它就会执行我们上面提到的所有初始化工作。然后,它准备接收来自主机的内核和文件系统。一旦装入了内核,引导装载程序就将控制转给内核。
Linux内核移植首先需要配置内核,可以用make menuconfig进行www.cechina.cn,根据板卡选择必要的选项。主要包括系统类型选定(ARM system type),配置SDRAM/Flash地址;对块设备、字符设备进行选择和配置;配置文件系统;是否配置图形用户界面(GUI)。修改内核,我们选用www.lomx.net上的uClinux-2.4.26-uc0.diff,已经为S3C4510移植好的内核,需要修改的地方很少。编译内核,首先要在宿主机(安装有Linux)上建立交*编译环境,下载arm-elf-tools安装在Linux 宿主机上的/usr/local/bin 目录下。现在的BLOB 和将来的uClinux 都要在这个