分类:
2008-04-25 19:19:55
本文对 uClinux 在 S3C4510B 嵌入式开发板上的移植、网络服务设置、驱动以及用户程序开发等问题进行了较为详细的介绍。本文中所总结的经验可供在上述嵌入式环境下工作的开发人员借鉴,也能为其他嵌入式平台的开发提供一定的启发。
嵌入式系统的特点在于:针对特定的应用,使用“量体裁衣”的方式将所需的功能嵌入到各种应用系统当中。其早期主要应用于军事及航空、航天领域,之后逐步被工业控制、汽车电子、通信和消费电子领域广泛使用。与此同时,各种新兴的应用也对嵌入式系统的处理能力、通信能力等方面提出了更高的要求。
S3C4510B 正是 Samsung 公司针对新兴网络应用而开发的一款性价比很高的 ARM 核 16/32 位RISC 微处理器。它内含一个由 ARM 公司设计的高性能、低功耗的 ARM7TDMI 内核,内置 10/100M Ethernet 控制器、HDLC 控制器等一系列网络通信控制器,特别适合对价格和功耗均比较敏感的嵌入式网络应用。
uClinux 是针对通信和控制领域的嵌入式操作系统,其主要的优势在于开放源代码、稳定、强大的网络通信功能以及其精简性。其内核功能与 Linux 基本相同,只是对内存管理和进程管理进行了改写,主要应用于没有 MMU 的微处理器平台,如 S3C4510B 处理器。
本文根据笔者在实际工作中积累的经验,对 uClinux 在S3C4510B上的移植和开发进行了较为详细的介绍。本文首先介绍了如何将 uClinux 移植到 S3C4510B 嵌入式平台,接下来将分别对 uClinux 在 S3C4510B 平台上的各种网络服务设置、驱动及用户程序开发进行详细的论述。
Uclinux 的内核现已发展至 2.6 版本。然而,考虑到嵌入式应用大多针对特定需求,开发者往往更关注诸如能耗、空间占用、开发速度、向后兼容等问题,因而在实际开发中 2.4 和 2.6 版本的 uClinux 都会根据项目情况被采用。根据笔者在实际工作中的经验,本文下面将对 2.4 和 2.6 版本的 uClinux 移植到 S3C4510B 嵌入式平台的方法分别进行介绍。
Step 1:下载内核压缩包和交叉编译工具包
笔者使用的是分别是:uClinux-dist-20030522.tar.gz 和 arm-elf-tools-20030314.sh。将内核压缩包解压至开发主机,然后安装 arm-linux 交叉编译工具,为后续的编译做好准备。
Step 2:修改 Makefile 文件
在# normal make targets
下面的Section加入:
.PHONY: images images: $(MAKE) -C $(VENDDIR) images all: subdirs romfs modules modules_install image |
上述语句将在make image
的时候生成压缩的映像文件(image)。
首先,找到语句
genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR) |
在其下方加入:
arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o \ -b binary $(ROMFSIMG) |
此语句的作用是产生 romfs.o 供后续生成整体的映像文件使用。
同时,在此 Makefile 的最后加入:
images: arm-elf-objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/linux \ $(IMAGEDIR)/uclinux_ram.bin cp $(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage \ $(IMAGEDIR)/uclinux_rom.bin |
上述语句将在交叉编译的最后将所有生成的目标文件 Dump 到可以下载到开发板中的映像文件中(注意,这里提供两种形式:ROM