基于ARM的Linux系统移植研究与实现

欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入

  0 引言

  +嵌入式系统是一个专用的计算机系统。该系统以计算机技术为基础,软硬件可裁减,但对功能、可靠性、成本等都有严格的要求。今天,一些专用系统需要处理大量的信息,由于传统的计算机系统很难实现硬件可裁减,因而已经不能满足专用系统的需要。伴随着我国汽车、家电等产业的快速发展,嵌入式系统的应用与开发已成为目前IT产业的一个新的热点。基于ARM的嵌入式系统的开发,首先要解决的问题是嵌入式操作系统的移植。Linux操作系统作为一种源代码开放、同时可支持多种处理器结构的多任务操作系统,具有内核小、易裁剪、可移植性好等优点,是目前嵌入式系统应用与开发的主流操作系统。本文主要研究在arm9平台上搭建嵌入式Linux系统的实现方法。

  1 嵌入式Linux操作系统及特点

  目前,在嵌入式系统开发中,52%的项目选择Linux作为嵌入式操作系统,这与Linux自身的优良特性有不可分割的关系。

  Linux操作系统内核源代码开放,并具有丰富的软件资源。不同的应用领域可以根据需要对内核进行修改,每一种通用程序在Linux都能找到。在Linux上开发程序不需要从头做起,可以选择一个类似的软件进行二次开发,因而能够低成本地开发出满足自己需要的嵌入式系统。

  另外,Linux系统能支持多种硬件设备,而且驱动丰富,能支持多种主流硬件设备和最新硬件技术。随着Linux的广泛应用,许多芯片生产厂家也已经开始为Linux提供驱动,这为Linux在各种硬件平台上的应用奠定了基础。

  Linux可支持多种体系结构,具有较好的可移植性。目前,Linux已经移植到绝大多数硬件平台上,能够支持arm、MIPS、LPHA、SPARC等多种体系,Linux支持几乎所有流行的CPU.Linux具备一整套工具链,容易建立嵌入式系统的开发环境和交叉运行环境,可跨越嵌入式系统开发中仿真工具的障碍。由于其符合IEEE POSIX.1标准,因而应用程序具有较好的可移植性。

  Linux具有完善的网络通信和文件管理机制。实际上,Linux从一开始就与网络密不可分,网络是Linux的最为显着的特征。Linux具有arm9上的嵌入式Linux系统移植的特性,从而保证了它支持所有标准因特网协议,可以利用Linux的网络协议栈开发嵌入式TCP/IP网络协议栈。同时,Linux支持ext2、fat16、fat32、romfs等文件系统,从而为嵌入式系统应用开发打下了很好的基础。

  2 Linux在arm平台上的移植

  2.1 SBC2410硬件平台介绍

  SBC2410硬件平台是具有基于ARM9处理器SBC2410A,可支持arm-Linux、WindowsCE等操作系统的嵌入式硬件平台。主要硬件资源有一片64 MB SDRAM,一片64 MBNandFlash,一片1 MB Nor Flash,一个串口COM0,一个USB Host A型接口,一个USB Slave B型接口,以及一个标准的JTAG接口等。

  2.2 Linux在arm平台上的移植准备

  首先是要建立交叉编译环境。交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括编译器gcc,二进制工具binutils,目标系统的标准c库glibc和目标系统的Linux内核头文件。宿主机要选好做嵌入式开发的Linux操作系统,配置好网络、NFS服务等。因为目标机没有足够的资源运行开发工具和调试工具,所以要在宿主机上建立交叉编译环境,然后由交叉编译工具生成可执行二进制代码(并不能在宿主机上运行),再下载到目标板上调试和运行。交叉编译标准c环境的生成步骤包括以下四步:

  (1)获得binutils、gcc、glibc的源码;

  (2)配置编译binutils,得到汇编器和连接器;

  (3)配置编译gcc源码,生成gcc编译器;

  (4)配置glibc编译生成glibc的c库函数。

  2.3 引导程序移植bootloader

  引导程序bootloader是与体系结构紧密相关的部分,是操作系统内核和应用程序运行之前运行的一小段程序,用于完成系统的启动和加载。它类似于PC机中的BIOS程序。bootloade严重依赖于硬件实现,一般在嵌入式系统中建立一个通用的bootloader是不可能的。用户必须自己编写这一小段程序,从而完成硬件设备的初始化,建立内存空间的映射图,将系统的软硬件带到一个合适的状态,为操作系统内核的运行做准备。

  通常bootloader移植分为两步:

  第一步常用汇编语言实现依赖于CPU体系结构的代码。主要包括硬件设备初始化;为加载bootloader准备RAM空间;拷贝bootloader到RAM空间中;设置好堆栈。

  第二步常用C语言来实现。即:初始化本阶段要使用到的硬件设备;检测系统内存映射(memory map);将kernel映像和根文件系统映像从flash上读到ram空间中;为内核设置启动参数;调用内核。图1所示是bootloader的工作流程图。

  2.4 内核移植

  内核移植首先应当启动操作系统,完成内存管理、任务调度、进程管理、加载驱动程序、网络等功能,然后执行应用程序或等待用户命令。虽然各功能之间存在复杂的调度关系,但由于Linux分层结构的特点,已将其中硬件相关的代码独立了出来,因此,移植过程中只需要改动进程管理、内存管理和设备管理中与硬件相关的那部分代码。

[1][2]

在你生活出现失意和疲惫时能给你一点儿力量和希冀,只愿你幸福快乐。

基于ARM的Linux系统移植研究与实现

相关文章:

你感兴趣的文章:

标签云: