arm下linux程序,ARM的Linux移植过程

引言

面向A R M 微处理器构架的嵌入式操作系统的使用量将在今后五

年持续增长,在各种嵌入式操作系

统中,Linux是获得支 持最多的第三

大力量。

目前,ARM Linux 支持包括

A R M 6 1 0 、A R M 7 1 0、A R M 7 2 0 T

cores、ARM920T cores、StrongARM

110、StrongARM 1100、XScale 等

系 列的ARM 处理器。这些处理器

都具有M M U 单元,与之相对应是

NOMMU 的mClinux,主要是支持

ARM7TDMI 系列的微处理器。在

ARM Linux 的基础上,很多开发者

将其移植到了自己的硬件平台上,

并提交相应的Machine Type。本文

以实例分析完整地介绍了移植的过

程,对于准备在ARM Linux 上做

应用开发的技术人员有一定的借鉴

作 用。

ARM Linux 的移植过程

将ARM Linux 移植到特定的硬

件平台上,大致需要分成四个步骤:

首先是准备 工作,包括下载源码、建

立交叉编译环境等;然后是配置和

编译内核,必要时还要对源码做一

定的修改;另外还需要制作RAM

disk 来挂接根文件系统;最后是下

载、调试内核并在RAM disk中添加

自己的应用程序。本文以

StrongARM 为例,说明如何将ARM

Linux 移植到SA1110 微处理器上。

下面分四个部分介绍移植工作。

内核源码及交叉编译环境的准

内 核源码下载

标准Linux 的内核源码可以从

ftp://ftp.kernel.org 下载,在很多的

镜像ftp 站点上也可以方便地获得,

建议使用2.4 版本的内核。ARM

Linux 是基于标准Linux、内核为

A R M 做的补丁,在f t p : / /

ftp.arm.linux.org.uk 上可以下载。当

然也 可以直接下载已经针对标准内

核打好补丁的ARM Linux 源码包,

例如SkyEye 上提供的linux-2.4.18-

rmk7.tar.bz2, 就是基于2.4.18内核

和rmk7 补丁,可以直接解压之后进

行编译。

交叉编译环境的建立

移植前需要在宿主机上建立

ARM 的交叉编译环境,主要用到的

开发工具包括三个部分:binutils、

gcc、glibc。其中,binutils 是二进制

文 件的处理工具;gcc 是编译工具;

glibc 是链接和运行库。所有需要用

到的工具既可以下载源码自行编

译,也可以直接下载已 经编译好的

二进制工具。本文介绍的安装方法

就是基于SkyEye 开发环境下的安

装包文件。

a. binutils 的安装

binutils 主要包含了一些辅助开

发工具,例如objdump 显示反汇编

码、nm列出符号表、readelf 显示elf

文件信息及段信息、strip 将不必要

的代码去掉以减少可执行文件大小

等。这些工具在嵌入式开发初期,尤

其 是移植调试操作系统时非常有用。

安装的步骤:

1) 下载安装包文件: binutils-

2.11.2.tar.gz ;

2) 解开安装包到当前目录下:

tarzxfbinutils-2.11.2.tar.gz,此时在

当前目录下生成一个binutils- 2.11.2

目录。

■ 清华大学智能技术与系统国家重点实验室李明

ARM Linux 的移植过程及分析

摘要:本文结合 实例说明了移植ARM Linux 到特定硬件平台上的实现过程,并对ARM Linux 的启动

代码做了分析。

关键词:ARM Linux;移植;RAM disk;交叉编译

2003.7 电子设计应用www.eaw.com.cn 56

嵌入式系统嵌入式系统

3) 配置安装包: ./configure --

target=arm-linux --prefix=/usr/local,

target 选项表示选定的目标代码格

式,一般是arm-linux,prefix 表示

在 执行make install 时的安装根路径。

4) 编译和安装:make、make

install。注意安装时可能需要root 权

限, 在prefix 目录下当前用户有写

权限,安装成功后,binutils工具将

安装在/usr/local/arm-linux 目录下。

b. gcc 交叉编译器

gcc 是用来编译内核代码的工

具,使用它可以编译汇编语言和C语

言的程序,生成 ARM 的代码。建议

使用gcc 2.95 以上的版本来创建ARM

开发环境,本文使用2.95.3 版本。

安装的步骤:

1) 下载安装包文件和补丁程

序: gcc-2.95.3.tar.gz ;gcc-

2.95.3.diff.bz2。

2) 解开安装包到当前目录下:

tar zxf gcc-2.95.3.tar.gz,此时在当

前目录下生成一个gcc-2.95.3 目录,

进 入该目录。

3) 对当前的安装包打补丁:

bzcat ../gcc-2.95.3.diff.bz2 | patch -

p1。

4) 修改gcc/config/arm/t-linux 文

件,在文件最后加上如下条件编译

选项:

T_CFLAGS=-Dinhibit_libc -

D__gthr_posix_h。

5) 配置安装包:./configure --

target=arm-linux--prefix=/usr/local -

-with-headers=arm linux源码目录下

的include 目录。这里前两个选项和

上面binutils 的安装类似,--withheaders

是用来指定内核头文件的目

录,一般就可以使用上面A R M

linux 的include 目录。需要注意的

是这里的路径需要用全路径名,而

不能使用相对路径。

6 ) 编译源码: m a k e

LANGUAGE=“C ”。这里因为还没

有一个ARM 可用的glibc,所以只

能编译C 语言的交叉编译工具。如

果在编译好glibc 之后,就可以回

来重新编译gcc,以支持其他语言。

7) 安装编译好的工具: make

install LANGUAGE=“C”。安装成

功以后,arm-elf-gcc 将安装在/usr/

local/arm-linux 目录下。

有 了安装好的binutils 和gcc 工

具,就可以用来编译ARM Linux 内

核了。如果需要在ARM Linux 做应

用 程序的开发,就还需要一个glibc

库的支持。

c. glibc 库

glibc 的编译需要为刚才做好的

ARM 交叉编译器指定编译器;否则

编译出的glibc 代码将会是同时有

ARM 和x86 代码的混和体。

1) 解开安装包: tar zxf glibc-

2.2.3.tar.gz。此时在当前目录下生

成一个glibc-2.2.3 目录,进入该目

录。

2) 解开glibc-linuxthreads安装

包: tar zxvf ../glibc-linuxthreads-

2.2.3.tar.gz。

3) 设置编译器: CC=arm-linuxgcc

4) 配置安装包: ./configure armlinux--

build=i586-linux--prefix=/usr/

local/arm-linux -enable-add-ons。

arm-linux 表示选ELF 格式的可执

行格式,--build=i586-linux 表示用

来制作交叉开发环境的宿主机的机

器类型,--prefix=/usr/local/armlinux

表示安装的路径,这里 不能指

定为/usr/local,否则会把/usr/local

下的库覆盖掉,需要非常留意。

5) 编译和安装: make; make

install。安装成功后,glibc 库将安装

在/usr/local/arm-linux 目录下。

ARM Linux 的内核配置与编译

内核配置选项

在安装完内核源码和所需的开

发工具之后,需要对内核进行配

置,主要包括:

a . 选择处理器类型:选择

SA1100-based

System Type

(SA1100-based) ARM system

type

b. 选择板级支持: 选择Assabet 板

SA11x0 Implementations --->

[*] Assabet

c. 选择对RAM disk 支持: 选择

RAM disk 支持,大小为512k 字节

Block devices --->

[*] RAM disk support

(512) Default RAM disk size

[*] Initial RAM disk (initrd)

support

d. 选择设备驱动支持: 选择串

口设备驱动,这样在内核启动时就

可以从串口打印出启动信息。

Character devices --->

Serialdrivers --->

[*] SA1100 serial port support

[*] Console on SA1100 serial

port

(9600) Default SA1100 serial

baudrate

e. 选择文件系统支持:选择

Ext2

[*] Second extended fs support

编译内核

根据最后生成 的内核是直接在

RAM 中运行还是从ROM 中启动,

www.eaw.com.cn 电子设计应用2003.7 57

嵌入式系统嵌入式系统

69

www.eaw.com.cn 电子设计应用2003.7 69 电源技术电源技术 时,会切断内部电源。通常情况下, 开关由电池通过13 引脚供电,低电 压 肖特基二极管阻止非充电电池被 外部电源充电。V CC 由第10 引脚的 开关取出,大多数应用中,这个电 压还要由后面的电压调节 器进行调 理。一旦检测到外部电源电压,微 控制器接通开关1和4,断开开关3。 输出电容C 在VCC 由开关3 切向开关 4 的过程中为系统提供电源。为了 保护电池,当开关4 闭合时,必须始 终保持开关3 处于断开状态。外部 电源移走后,开关4和1断 开而开关 3 闭合。当外部电源电压高于电池 电压,或电池已深度放电时接入外 部电源,或C 已充电而电池被移走 时,故障保 护特性可以保证开关正 确、安全地工作。■

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值