当前位置:首页 >> 信息与通信 >>

基于S3C2440的嵌入式Linux操作系统移植


基于 S3C2440 的嵌入式 Linux 操作系统移植
Embedded Linux system migrating based on S3C2440

基于 S3C2440 的嵌入式 Linux 操作系统移植

【摘要】 主要研究基于友善之臂公司的QQ2440V3开发板平台,它的内核模块是采用 ARM920T核的CPU,外

部有64M的SDRAM、64M的Nand Flash以及2M的Nor Flash。基板 模块集成了串口、网卡、鼠标、键盘、LCD、声卡等多种接口,该平台是目前国内性价比 比较高的一款开发板,适合研究学习网络,智能终端等技术。 本文主要是在Vmware虚拟环境下安装Linux操作系统,并构建交叉编译开发平台,从 而探讨和分析了Linux交叉开发环境及内核的移植过程。论文首先提出了在QQ2440V3平台 上移植Linux2.6内核的主要任务,针对此任务,对嵌入式软件平台的构建进行了详尽的剖 析,包括:安装交叉编译工具、配置串口控制台工具、配置主机TFTP和NFS服务等。深入 探讨了Boot Loader的启动方式和启动过程,并给出了vivi和U-Boot两种启动引导代码Boot Loader的编译移植方案。分析了嵌入式Linux的体系结构、设备驱动的配置以及如何定制 Linux内核,然后对根目录进行定制,最后,在此基础上,对Linux系统和设备驱动进行了 配置和移植,为QQ2440V3平台提供了操作系统的支持,从而达到了学习和研究的目的。

【关键词】

嵌入式系统;

Linux; QQ2440V3; ARM;

内核;

驱动;

移植

Embedded Linux system migrating based on S3C2440
【Abstract】The research and development is mainly based on QQ2440V3 platform of the Friendlyarm
Company. It’s core module adopt ARM920T’s CPU, has 64M SDRAM, 64M Nand Flash and 2M Nor Flash. it The Baseboard integrated many devices,such as serial port, network card, LCD, keyboard, mouse and audio card interface etc. This platform is substantial for domestic ARM lovers to study and research. Here we mainly install a Linux system on VMware. Then the cross compile environment was constructed on it to analyze the porting and development environment of the Linux kernel. Firstly the migrating Linux2.6 to QQ2440 platform is given out, then the organization of the embedded software is analyzed, including installing of cross compile tools、configuration of serial terminal、configuration of TFTP and NFS services. Also two kinds of Boot Loader porting method are given out. Then the booting mode and course are deeply analyzed. After that The Architecture of embedded Linux and device drivers are expounded, and the root file system was made. At the end, we complete our task, providing the QQ2440 a embedded Linux operating system.

【keywords】Embedded operating system; Linux; QQ2440V3; ARM; kernel; drivers; migrating

目录
引言 ...................................................................................................................................................................... 1 第一章 绪论 ........................................................................................................................................................ 2 1.1 嵌入式操作系统概述 ........................................................................................................................... 2 1.2 嵌入式操作系统的特点 ....................................................................................................................... 2 1.3 嵌入式 Linux ........................................................................................................................................ 2 1.4 嵌入式微处理器 ................................................................................................................................... 3 1.5 ARM 与 Linux ....................................................................................................................................... 4 第二章 目标平台 ................................................................................................................................................ 5 2.1 目标硬件平台结构 ............................................................................................................................... 5 2.1.1 QQ2440V3 开发板硬件资源 ..................................................................................................... 6 2.1.2 开发板设置及连接 .................................................................................................................... 7 2.2 ARM 微处理器 ...................................................................................................................................... 7 2.2.1 ARM 体系结构的发展 ............................................................................................................... 7 2.2.1 ARM 的体系结构的特征 ........................................................................................................... 8 2.3 ARM9 系列特性 .................................................................................................................................... 8 2.3.1ARM920T 体系结构 ................................................................................................................... 8 2.3.2 ARM920T 的主要特点 ............................................................................................................... 9 2.3.3 ARM920T 内核编程模式 ........................................................................................................... 9 2.4 S3C2440A 微处理器 ............................................................................................................................. 9 第三章 嵌入式 Linux 系统的软件开发环境 ...................................................................................................11 3.1 交叉开发环境 ......................................................................................................................................11 3.1.1 目标板与主机之间的连接 ........................................................................................................11 3.1.2 文件传输 ....................................................................................................................................11 3.1.3 网络文件系统 .......................................................................................................................... 12 3.2 建立交叉开发平台的几种方案 ......................................................................................................... 12 3.3 安装 Linux 操作系统 ......................................................................................................................... 13 3.4 交叉编译工具 ..................................................................................................................................... 13 3.5 主机交叉环境配置 .............................................................................................................................. 14 3.5.1 串口控制台工具 ...................................................................................................................... 14 3.5.2 配置主机的 TFTP 服务 ........................................................................................................... 15 3.5.3 配置主机的 NFS 服务 ............................................................................................................. 16 第四章 Boot Loader 及移植 ............................................................................................................................. 17 4.1 Boot Loader .......................................................................................................................................... 17 4.2 Boot Loader 的种类 ............................................................................................................................. 17 4.3 Boot Loader 的操作模式 ..................................................................................................................... 18 4.3.1 启动加载(Boot loading)模式 .............................................................................................. 18 4.3.2 下载(Downloading)模式 ..................................................................................................... 18 4.4 Boot Loader 的启动方式 ..................................................................................................................... 18 4.4.1 网络启动方式 ........................................................................................................................... 18 4.4.2 磁盘启动方式 .......................................................................................................................... 19 4.4.3 Flash 启动方式 ......................................................................................................................... 19 4.4 Boot Loader 的启动过程 ..................................................................................................................... 20 4.4.1 Boot Loader 的 stage1............................................................................................................... 20

4.4.2 Boot Loader 的 stage2............................................................................................................... 21 4.5 Boot Loader 编译与移植 ..................................................................................................................... 21 4.5.1 Boot Loader 之 vivi ................................................................................................................... 21 4.5.2 Boot Loader 之 U-Boot ............................................................................................................. 22 4.6 安装 Boot Loader 到开发板 ............................................................................................................... 25 第五章 Linux 内核移植及根文件系统 ........................................................................................................... 26 5.1 Linux2.6 内核新特性 .......................................................................................................................... 26 5.2 Linux 内核源码结构 ........................................................................................................................... 26 5.3 Linux 内核启动流程 ........................................................................................................................... 27 5.4 内核配置系统 ...................................................................................................................................... 27 5.5 Makefile 的组织结构 .......................................................................................................................... 28 5.6 配置编译内核 ..................................................................................................................................... 29 5.6.1 移植前的准备工作 ................................................................................................................... 29 5.6.2 使用默认配置文件编译内核 ................................................................................................... 29 5.6.3 定制 Linux 内核 ...................................................................................................................... 31 5.7 Linux 根文件系统 ............................................................................................................................... 34 5.7.1 Linux 根文件系统目录结构 .................................................................................................... 34 5.7.2 嵌入式文件系统 ...................................................................................................................... 34 5.7.3 YAFFS 文件系统映像制作...................................................................................................... 35 5.8 安装 Linux 及根文件系统到开发板.................................................................................................. 36 第六章 总结与展望 .......................................................................................................................................... 37 6.1 总结 ..................................................................................................................................................... 37 6.2 不足与展望 ......................................................................................................................................... 37 致谢语 ................................................................................................................................................................ 38 参考文献 ............................................................................................................................................................ 39 附录 .................................................................................................................................................................... 40

引言
嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应于应用系 统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它是计算机技术、 通信技术、半导体技术、微电子技术、语音图像数据传输技术等先进技术相结合后的产品。 嵌入式系统一般包括嵌入式微处理器,外围硬件设备,嵌入式操作系统,和应用程序等几 个部分。 数字时代的特征越来越明显,手持智能终端蓬勃发展。这些都给予了嵌入式操作系统 以新的契机,尤其是Linux操作系统的发展。随着Linux 2.6内核的迅速发展,嵌入式Linux 在嵌入式领域的应用越来越广泛。Linux具有源代码开放、内核稳定高效、软件丰富、支持 处理器结构和硬件平台类型多、可定制性好,可移植性高等特点。本课题主要研究在以高 性能的32位ARM9处理器为核心的QQ2440V3硬件开发平台上移植嵌入式Linux操作系统与 文件系统以及相关的设备驱动等。在嵌入式移植过程中,还需要移植合适的引导装载程序 (Boot Loader) ,引导装载程序和系统硬件紧密相关,它们不仅与处理器的体系结构有关, 而且还需要根据系统的硬件配置对引导装载程序进行配置,主要是设置处理器参数、内存 地址分配、内存空间的映射、加载操作系统内核等。Linux内核的配置、移植,将主要是修 改内核源代码树中各个文件夹下的配置文件,合理组织新的驱动程序,根据配置进行条件 编译、连接,最终生成内核映像文件。根文件系统负责以文件的方式管理系统的各种资源。

1

山东工商学院 2008 届毕业论文

第一章 绪论
1.1 嵌入式操作系统概述
嵌入式操作系统的发展经历了几个比较明显的阶段, 最先是无操作系统的嵌入算法阶 段,是以单芯片为核心的可编程控制器形式的系统;然后发展为以嵌入式CPU为基础、以 简单操作系统为核心的嵌入式系统;之后便是通用的嵌入式实时操作系统阶段,是以嵌入 式操作系统为核心的嵌入式系统。这一阶段嵌入式操作系统的主要特点是:兼容性好、内 核精小、效率高,并且具有高度的模块化和扩展性;现在正在迅速发展的基于 Internet 为 标志的嵌入式系统,是嵌入式系统的趋势。随着 Internet 的发展以及 Internet 技术与信息 家电、工业控制技术等结合日益密切,嵌入式设备与Internet的结合将代表着嵌入式技术的 真正未来。

1.2 嵌入式操作系统的特点
目前,就普遍的定义认为,嵌入式操作系统具有以下的主要特征: (1)嵌入式系统是面向特定应用的。嵌入式处理器大多数都是专门为特定应用设计 的,具有低功耗,体积小,集成度高等特点。 (2)嵌入式系统的硬件和软件都是可定制的。 (3)实时性,即在确定的时间内响应某个事件的特性。 (4)嵌入式系统不比与一般的应用软件它具有相当长的生命周期。 (5)嵌入式系统软件一般都固化在存储器芯片或单片机中, 而非磁盘等存储载体上。 (6)嵌入式系统本身不具备开发承载能力。在设计完成以后,如果需要对其进行修 改、升级换代等,也必须借助于开发工具和环境。 据调查,目前已有的嵌入式操作系统有两百多种,并且随着嵌入式领域的不断发展, 各种各样的嵌入式操作系统还在不断的相继问世,其中比较著名的嵌入式操作系统有 ?C/OS、VxWorks、Neculeus、Linux和Windows。

1.3 嵌入式 Linux
所谓嵌入式Linux,是指Linux在嵌入式系统中的应用。在所有的操作系统中,Linux 操作系统是一个发展最快,应用最广泛的操作系统,由于Linux系统的优良特性,使得其成 为嵌入式开发中的首选。 随着嵌入式Linux的不断成熟, 以及其对更小尺寸和更多类型的处 理器支持,使得嵌入式Linux操作系统迈入了嵌入式系统的主流。 在嵌入式领域,Linux表现出强大而完备的性能,其优势主要体现在以下几点: (1)Linux 是开放源代码的,不在存黑箱技术。系统升级、软件移植方便。只要遵循 GPL 的相关规定就可以免费得到 Linux 内核的完整源代码,不用支付版权税,可以根据具 体的系统进行裁减和优化,这对于构建嵌入式系统具有重要的意义。
2

山东工商学院 2008 届毕业论文

(2)由于 Linux 是开放的操作系统,比较容易实现产品定制。内核可裁剪,功能可定 制。Linux 的内核采用模块化设计,模块可以根据需要加载和卸除。这就使得开发人员可 以针对自己的系统来编译自己的内核,运行所需资源少,十分适合嵌入式应用。 (3)Linux 的源代码随处可得,注释丰富,文档齐全,易于解决各种问题,由全世界 的自由软件开发者为嵌入式 Linux 提供技术支持,网络资源得天独厚。 (4)Linux 的内核非常稳定,性能高效、多任务。 (5)Linux 是一个跨平台的系统,支持多种 CPU。最新的 Linux 内核支持 Intelx86、 Motorola/IBM、PowerPC、ARM(Advanced RISC Machines) 、Compaq(DEC)Alpha IA 64、 S/390SuperH 等微处理器体系结构。 Linux 还可以在没有 MMU (Memory Management Unit) 的处理器上运行,这就使得在嵌入式领域没有 MMU 的处理器得到相当广泛的应用。 当下主流的嵌入式 Linux 系统有 ?Clinux,RTlinux 和 RTAI,MontaVistaLinux,以及 LynxOS 操作系统。 ?Clinux 设计的目标平台是那些不具有内存管理单元(MMU)的微处理芯片,为了达 到嵌入式系统的要求, ?Clinux 还改写和裁剪了大量 Linux 内核代码以缩小内核体积, 使得 其内核远远小于标准 Linux 的内核,但是它仍然保持了 Linux 操作系统几乎所有的优秀特 性,包括稳定,强大的网络功能,出色的文件系统支持。 RTlinux 并没有对 Linux 内核作大的改动,而是利用 Linux 内核模块机制,采用插入 模块的方式,通过一个独立的内核来管理实时任务,在加载了 RTlinux 内核之后,原来的 Linux 内核就作为实时操作系统的一个空闲任务, 仅当没有实时任务要运行时才执行, Linux 任务从不阻塞中断,也不阻止其他进程从自己的手中抢占处理机资源 RTLinux 使用的关键 技术是中断控制硬件的软件模仿, Linux 使硬件中断无效时, 当 实时系统将阻止这个请求, 记录它,然后返回 Linux。 MontaVista Linux 是全球三大嵌入式 Linux 操作系统及解决方案供应商之一的 Monta Vista Software 公司于 1999 年推出的,其重点考虑的是小内存,确保响应,高可用性等。 Monta Vista Linux 的最新版本 Monta Vista 2.0,它采用标准 Linux 内核 2.4.2,并进行了高 度的裁剪和配置, 使其成为高稳定性,性能突出的一款出色的嵌入式操作系统。 LynxOS 是一个针对有强实时性要求的嵌入式应用的实时操作系统(RTOS) ,它是一 个结合了性能,可靠性,开放性与可扩展性的硬实时 RTOS,LynxOS 体系结构的高度模块 化使它具有很强的可扩展性并且易于配置。

1.4 嵌入式微处理器
嵌入式微处理器(Microprocessor Unit,MPU)由通用计算机中的 CPU 演变而来。与通 用计算机中的 CPU 不同的是,在嵌入式应用中,将微处理器装在专门设计的电路板上,只 保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗 和资源实现嵌入式应用的特殊要求。此外,嵌入式微处理器在工作温度、抗电磁干扰、可 靠性等方面相对通用计算机中的 CPU 都做了各种增强。
3

山东工商学院 2008 届毕业论文

目前主要的嵌入式微处理器有 X86、ARM、MIPS、PowerPC 等系列。

1.5 ARM 与 Linux
在 32 位 RISC 处理器的领域, 基于 ARM 的结构体系在嵌入式系统中发挥了重要的作 用, ARM 处理器和嵌入式 Linux 的结合也越来越紧密, 并在嵌入式领域得到了广泛的应用, 早在 1994 年,Linux 就可在 ARM 架构上运行,时至今日,在各式各样的便携式消费类电 子产品,网络,无线设备,汽车,医疗和存储产品内,都可以看到 ARM 与 Linux 相结合 的身影。 ARM 结构体系历经多年的发展产生出很多版本, 目前 Linux 几乎对 ARM 不同系列的 处理器都有了相应的支持,此外 Linux 对于自己在 ARM 规划蓝图中获得定义的新特征也 有相应的支持。

4

山东工商学院 2008 届毕业论文

第二章 目标平台
在进行嵌入式开发时,选择合适的开发平台是一个很重要的环节,开发板可以为用户 提供基本的底层硬件,系统和驱动等资源。考虑到诸如开发成本,资源特性要求,周期, 技术支持程度等的不同,即使是基于同一款处理器的开发板也会因为开发的目的不同而不 同。 本论文的研究课题是基于 ARM9 的嵌入式 Linux 系统移植。选择广州友善之臂计算机 有限公司的 QQ2440V3 作为我们的研究平台,该开发板是基于 Samsung 2440 处理器的开 发平台,具有完备的硬件资源和丰富的软件资源包,为我们进行嵌入式开发技术研究提供 了一个较理想的平台。

2.1 目标硬件平台结构
QQ2440V3 是一款低价实用的 ARM9 开发板, 是目前国内性价比最高的一款学习板。 它采用 Samsung S3C2440 为微处理器,并采用专业稳定的 CPU 内核电源芯片和复位芯片来保证系统运行时的稳定性。 QQ2440 的 PCB 采用沉金工艺的四层板设计,专业等长布线,保证关键信号线的信号完整性。

图 2.1 QQ244 0V3 开发板

5

山东工商学院 2008 届毕业论文

2.1.1 QQ2440V3 开发板硬件资源
(1) CPU 处理器 — Samsung S3C2440A,主频 400MHZ,最高 533MHZ (2) SDRAM 内存 — 在板 64M SDRAM — 32bit 数据总线 — SDRAM 时钟频率高达 100MHZ (3) FLASH 存储 — 在板 64M Nand Flash, (4) LCD 显示 — 板上集成 4 线电阻式触摸屏接口,可以直接连接四线电阻触摸屏 — 支持黑白、4 级灰度、16 级灰度、256 色、4096 色 STN 液晶屏,尺寸从 3.5 寸到 12.1 寸,屏幕分辨率可以达到 1024x768 象素; — 支持黑白、4 级灰度、16 级灰度、256 色、64K 色、真彩色 TFT 液晶屏,尺寸从 3.5 寸 到 12.1 寸,屏幕分辨率可以达到 1024x768 象素; — 标准配置为 NEC 256K 色 240x320/3.5 英寸 TFT 真彩液晶屏,带触摸屏; — 板上引出一个 12V 电源接口,可以为大尺寸 TFT 液晶的 12V CCFL 背光模块 (Inverting)供电。 (5) 接口和资源 — 1 个 10M 以太网 RJ—45 接口(采用 CS8900 网络芯片) — 3 个串行口 — 1 个 USB Host — 1 个 USB Slave B 型接口 — 1 个 SD 卡存储接口 — 1 路立体声音频输出接口,一路麦克风接口; — 1 个 2.0mm 间距 20 针标准 JTAG 接口 — 4 USER Leds — 4 USER buttons — 1 个 PWM 控制蜂鸣器 — 1 个可调电阻,用于 AD 模数转换测试 — 1 个 I2C 总线 AT24C08 芯片,用于 I2C 总线测试 — 1 个 20pin 摄像头接口
6

掉电非易失

— 在板 2M Nor Flash,掉电非易失,已经安装 BIOS

山东工商学院 2008 届毕业论文

— 板载实时时钟电池 — 电源接口(12V),带电源开关和指示灯 (6) 系统时钟源 — 12M 无源晶振 (7) 实时时钟 — 内部实时时钟(带后备锂电池) (8) 扩展接口 — 1 个 34 pin 2.0mmGPIO 接口 — 1 个 44 pin 2.0mm 系统总线接口 (9) 操作系统支持 — Linux2.6.13 — WindowsCE.NET 4.2

2.1.2 开发板设置及连接
● 跳线说明。QQ2440V3 开饭板上有两个跳线,分别为 J1 和 J6。J1 为启动模式选择跳 线。当 J1 接到 Nor Flash 一侧时,系统从 Nor Flash 启动,接到另一侧是则从 Nand Flash 启 动。 NAND Flash 启动模式下, 内部的 4K Bytes BootSram 被映射到 nGCS0 片选的空间; 在 在 Nor Flash 启动模式下与 nGCS0 相连的外部存储器 Nor Flash 就被映射到 nGCS0 片选 的空间。J6 为 LCD 模块电源选择跳线,当选择 5V 一侧的两针时,为 LCD 模块提供 5V 电压,当选择另一侧时,则提供 3V 电压。 ● 外部接口连接。使用开发板自带的直连串口线连接 QQ2440V3 的串口 0 和 PC 机 的串口;交叉网线将 QQ2440V3 的网络接口与 PC 相连;将 12V 电源适配器连接到板上的 12V 输入插座;把音箱或者耳机的插头接入板上的音频输出口;液晶屏与 QQ2440V3 的 LCD 接口相连;并用 USB 电缆连接 QQ2440V3 和 PC。

2.2 ARM 微处理器 2.2.1 ARM 体系结构的发展
ARM(Advanced RISC Machines)是一种低功耗高性能的 32 位处理器,它以其体积 小,低功耗,低成本,高性能等诸多优异性能获得了众多处理器厂商的支持,从而得到了 非常广泛的应用。目前为止,ARM 体系结构共定义了 6 个版本,每一次 ARM 体系结构的 重大修改,都会添加一些非常关键的技术。 ARM 处理器从 V3 结构开始,实现了 32 位的地址空间,指令结构更完善,V4 结构增 加了半字节指令的读取和写入操作和处理器系统模式,V5 结构则提升了 ARM 和 Thumb 两种指令的交互工作能力,同时对 DSP 和 Java 指令也有了相应的支持,最新的 V6 结构增 加了媒体指令。其中比较典型的 ARM 处理器如:ARM7 采用 3 级流水线结构,采用冯· 诺
7

山东工商学院 2008 届毕业论文

依曼体系结构;ARM9 采用 5 级流水线,采用哈佛体系结构;ARM10 采用 6 级流水线。

2.2.1 ARM 的体系结构的特征
ARM 处理器采用了 RISC 体系结构,因此秉承了大部分早期 RISC 体系结构的特征, 如 32 位指令、Load/Store 体系结构等。 (1) 指令周期 ARM 被设计为使用最少的时钟周期来访问存储器, 但并不是所有指令都单周期执行。 如在低成本领域中普遍使用的 ARM7TDMI,数据和指令占有同一总线,使用同一存储器 时,即使最简单的 Load 和 Store 指令也最少需要访问 2 次存储器(1 次取指令,1 次数据 读/写)。因此,并不是所有 ARM 指令都在单一时钟周期内执行的,少数指令需要多个时 钟周期。高性能的 ARM9TDMI 使用分开的数据和指令寄存器,能够实现指令的单周期执 行。 (2)Load/Store 指令结构 ARM 微处理器采用加载/存储指令用于在寄存器和存储器之间传送数据, 加载指令用 于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。面向运算的所有操作都 在寄存器中执行,加快运算速度。

2.3 ARM9 系列特性
ARM9 能够运行在比 ARM7 更高的时钟频率上,处理器的整体性能也得到改善,存储 器系统也根据哈佛体系结构重新设计,区分了指令总线和数据总线。增加的流水线设计提 高了时钟频率和并行处理能力。ARM9 采用了 5 级指令流水线,能够将每一个指令处理分 配到 5 个时钟周期内,也就是说在每一个时钟周期内同时有 5 个指令在执行。

2.3.1ARM920T 体系结构
ARM920T 是 ARM9 系列的第一个处理器,它采用五级流水线,如下图:
取指令 取指 译码 Reg读 译码 移位/ALU 执行 数据存储器访问 存储器 Reg写 写

图2.2 ARM920T的五级流水线

(1)取指:从存储器中取出指令,并将其放过指令流水线。 (2)译码:对指令进行译码。 (3)执行:把一个操作数移位,产生 ALU 的结果。 (4)缓冲/数据:如果需要,则访问数据存储器;否则 ALU 的结果只是简单缓冲 1 个始终周期,以便所有的指令具有同样的流水线流程。 (5)回写:将指令产生的结果回写到寄存器,包括任何从存储器中读取的数据。
8

山东工商学院 2008 届毕业论文

2.3.2 ARM920T 的主要特点
(1)改进型 ARM/Thumb 代码交织,增强性乘法器设计。 (2)片内指令和数据 SRAM,而且指令和数据的存储器容量可调。 (3)片内指令和数据高速缓冲器(cache)容量从 4K 字节到 1M 字节。 (4)设置保护单元(protection unit) ,适合嵌入式应用中对存储器进行分段和保护。 (5)采用 AMBA AHB 总线接口,为外设提供统一的地址和数据总线。 (6)支持外部协处理器,指令和数据总线有简单的握手信令支持。 (7)支持实时(real-time)调试。 (8)支持嵌入式跟踪宏单元,支持实时跟踪指令和数据。

2.3.3 ARM920T 内核编程模式
(1)ARM 处理器的工作状态 ARM 微处理器的工作状态一般有 ARM 状态和 Thumb 状态两种,并可在两种状态之 间切换,当 ARM 微处理器执行 32 位的 ARM 指令集时,工作在 ARM 状态;当 ARM 微 处理器执行 16 位的 Thumb 指令集时,工作在 Thumb 状态。处理器工作状态的转变并不影 响处理器的工作模式和相应寄存器中的内容。 (2)ARM 体系结构的存储器格式 ARM 体系结构将存储器空间从零地址开始, ARM 体系结构所支持的最大寻址空间为 4GB。 (3)指令长度及数据类型 ARM 微处理器的指令长度可以是 32 位, 也可以为 16 位, ARM 微处理器支持字节 (8 位)、半字(16 位)、字(32 位)三种数据类型,其中,字需要 4 字节对齐,半字需要 2 字节对齐。 (4)处理器模式 ARM 微处理器支持 7 种运行模式,分别为: ─ 用户模式(usr):ARM 处理器正常的程序执行状态 ─ 快速中断模式(fiq):用于高速数据传输或通道处理 ─ 外部中断模式(irq):用于通用的中断处理 ─ 管理模式(svc):操作系统使用的保护模式 ─ 数据访问终止模式(abt):当数据或指令预取终止时进入该模式 ─ 系统模式(sys):运行具有特权的操作系统任务 ─ 未定义指令中止模式(und):当未定义的指令执行时进入该模式

2.4 S3C2440A 微处理器
(1) 内部高级微控制总线(AMBA)体系结构,特别加强的 ARM 体系结构 MMU 用
9

山东工商学院 2008 届毕业论文

于支持 WinCE 和 Linux。 (2) 系统管理器支持大/小端方式,支持高速总线模式和异步总线模式,其寻址空 间每 bank 128M 字节,总共有 8 个 bank。其中 6 个适用于 ROM,SRAM,另外 2 个适用于 ROM/SRAM 和同步 DRAM,所有的存储器 bank 都具有可编程的操作周期。 (3) 支持 NAND Flash 存储器的启动,采用 4KB 内部缓冲器进行启动引导,并且 能够在启动之后把 NAND 存储器仍然作为外部存储器使用。 (4) Cache 存储器采用 I—Cache(16KB)和 D—Cache(16KB),同时使用伪随机数或 轮转循环替换算法位以及写穿式或写回式缓存操作来更新主存储器。 (5) 时钟采用片上 MPLL 和 UPLL 芯片时钟, 可以通过软件有选择性的为每个功能 模块提供时钟。 (6) S3C2440 有以下几种模式: — 电源模式:正常,慢速,空闲和掉电模式 — 正常模式:正常运行模式 — 慢速模式:不加 PLL 的低时钟频率模式 — 空闲模式:只停止 CPU 的时钟 — 掉电模式:所有外设和内核的电源都切断了。

10

山东工商学院 2008 届毕业论文

第三章 嵌入式 Linux 系统的软件开发环境
软件开发平台是嵌入式开发的关键,由于嵌入式硬件平台的存储空间有限、处理器频 率较低,很难直接在嵌入式硬件式平台上建立 Linux 系统、安装嵌入式开发软件,因此只 能采用嵌入式交叉开发环境来解决这个问题。通过建立开发环境我们才能更方便的进行 Boot Loader 移植、Linux 内核移植以及 GUI 系统开发等。

3.1 交叉开发环境
由于嵌入式系统的硬件资源的局限性,在嵌入式系统的开发过程,通常都要借助于交 叉开发环境,这样我们可以在开发主机上安装开发工具,编辑,编译目标的引导程序,内 核和文件系统,然后在目标板上调试运行。 交叉开发方式的好处是:一方面开发者可以在熟悉的主机环境下进行程序开发;另外 一方面可以真实地在目标板上调试运行程序,可以避免受到目标板硬件的限制。

3.1.1 目标板与主机之间的连接
目标板与主机之间的连接有串口, 以太网接口, USB 接口以及 JTAG 几口等连接方式。 (1)串行通讯接口。常用 9 针串口和 25 针串口。通过串口可以作为控制台,向目标 板发送命令,显示信息;也可以通过串口传送文件以及调试内核及程序。通常串口设备的 驱动实现比较简单, 缺点是通讯网络速率慢,不适合大数据量传输。 (2) 以太网接口。以太网高度灵活,相对简单,易于实现等特点,是当今最重要的 一种局域网组网技术。网络接口一般采用 RJ-45 标准插头,PC 机上一般都配置 10M/100M 以太网卡,通过以太网连接和网络协议,可以实现快速的数据通讯和文件传输。 缺点是驱动程序实现比较麻烦。 (3) USB 接口。USB(Universal Serial Bus)接口,支持热拔插,具有即插即用的 优点,支持热拔插,通讯速率也很快。 缺点是 USB 设备分主从端,两端分别要有不同的驱动程序支持。 (4) JTAG 等接口。JTAG 是一种嵌入式调试技术,它在芯片内部封装了专门的测 试电路测试接口,通过 JTAG 测试工具对芯片的核进行测试。 目前大多数比较复杂的器件都支持 JTAG 协议,如 ARM,DSP,FPGA 器件等,标准 的 JTAG 接口是四线,TMS,TCK,TDI,TDO,分别为测试模式选择,测试时钟,测试 数据输入和测试数据输出等。

3.1.2 文件传输
主机端编译的 Linux 内核映像必须下载到目标板上执行,通常是由目标板的引导程序
11

山东工商学院 2008 届毕业论文

负责把主机端的映像文件下载到内存中。 根据不同的连接方式, 可以有多种文件传输方式。 (1) 串口传输方式。主机端通过 kermit、minicom、或者 Windows 超级终端等工具 通过串口发送文件,在发送之前需要配置数据传输率和传输协议,目标板端也要做好接受 准备。 (2) 网络传输方式。网络传输方式一般采用 TFTP(Trivial File Transport Protocol) 协议。TFTP 协议是一种简单的网络传输协议,基于 UDP 传输,没有传输控制,是一种不 可靠的传输协议。但是其协议简单,容易实现。在使用 TFTP 传输之前,需要驱动目标板 以太网接口并且配置 IP 地址。 (3) USB 接口传输方式。USB 接口方式需要在主机端安装驱动程序,识别目标板 设备后,可以传输数据。 (4) JTAG 接口传输方式。JTAG 仿真器与主机之间的连接通常都是串口、并口、 以太网接口或者 USB 接口。传输速率会受到主机连接方式的限制。 (5) 移动存储设备。如果目标板上有软盘、CDROM、USB 盘等移动存储介质,就 可以制作启动盘或者复制到目标板,从而引导系统。

3.1.3 网络文件系统
NFS 允许一个系统在网络上共享目录和文件。通过使用 NFS,用户和程序可以像访问 本地文件一样访问远端系统上的文件。NFS 文件系统具有很多优点:例如,数据可以存放 在一台机器上,其他机器可以通过网络访问,这样本地工作站可以使用更少的磁盘空间; 用户通过网络共享目录,而不必再计算机上为每个用户都创建目录;软驱,CDROM 等存 储设备也可以在网络上共享使用,这样可以减少网络的移动介质设备数量。

3.2 建立交叉开发平台的几种方案
要进行嵌入式 Linux 系统开发,我们需要在一台装有 Linux 操作系统的 PC 机,在此 PC 机上运行交叉编译工具,Linux 采用 RedHat9.0,具体有以下几种方案: (1)采用 VMWare。VMWare 是一个可运行在 Windows 平台的“虚拟 PC”软件,它可 以在一台机器上同时运行二个或更多个 Windows、DOS、Linux 系统。而且每个操作系统 你都可以进行虚拟的分区、配置而不影响真实硬盘的数据。 VMWare 主要的功能有: 不需要分区或重开机就能在同一台 PC 上使用两种以上的操 作系统;完全隔离并且保护不同 OS 的操作环境以及所有安装在 OS 上面的应用软件和资 料;不同的 OS 之间还能互动操作,包括网络、周边、文件分享以及复制贴上功能;有复 原(Undo)功能;能够设定并且随时修改操作系统的操作环境,如:内存、磁碟空间、周 边设备等等。 (2) 使用 Cygwin。 Cygwin 是一个在 Windows 平台上运行的 Unix 模拟环境, Cygnus 是 solutions 公司开发的自由软件。 它对于学习 Unix/Linux 操作环境, 或者从 Unix 到 Windows 的应用程序移植,或者进行某些特殊的开发工作,尤其是使用 GNU 具集在 Windows 上进
12

山东工商学院 2008 届毕业论文

行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者 对 cygwin 产生了兴趣。 (3)在硬盘上的独立分区上安装 Linux 操作系统。

3.3 安装 Linux 操作系统
为了开发方便,我们选择了其中较为熟悉的的第一种和第三种方案,对于内存不小于 512M 和主频较高的 PC 机适合使用 VMWare,VMWare 默认使用 PC 机一半的内存,内存 较小 PC 机将会运行很慢, 所以配置相对较低的 PC 机不适合采用此方案。 因为我们所在的 网络问题,我们这里主要采用第一种方案进行平台研究。 在 VMVare 上安装 Linux 与普通装机大同小异,即可以设定从物理光盘安装,也可以 采用使用映像 ISO 文件安装, 这里我们使用 ISO 映像文件进行安装, 安装光盘为 RedHat9.0。 下图为 CD-ROM 设置界面 设置好 ISO 映像文件后,点击开始按钮,就可以安装了,如果对 Linux 系统不是很熟 悉,最好选择完全安装,否则在交叉编译过程中,可能会提示缺少文件。完全安装会需要 较长时间,所以这里我们自定义安装,大概二十分钟即可安装完成。 安装完操作系统后,我们需要安装 VMware Tools,把 CD-ROM 设置为 VMware 的安 装路径(默认为“C:\Program Files\VMware\VMware Workstation”)下的 Linux.iso 文件,进 入 Linux 操作系统,运行以下命令

我们可以看到有两种格式的安装包,我们选择 rpm 格式,安装过程如下

如果系统不支持 rpm 格式安装,可以使用 tar 格式,由于我们挂载的 ISO 文件是只读 的,所以需要把安装包复制到工作目录,然后解压安装。 安装 VMware Tools 有助于我们在 windows 和 Linux 系统下共享文件,打开 VMware 下新安装的 Linux 操作系统的设置菜单, 点击 option 选项, Shared Folders 中设置共享目 在 录,进入 linux 系统的/mnt/hgfs 目录下,看有没有我们共享的文件,如果有,说明设置成 功了。

3.4 交叉编译工具
由于我么的开发平台是 X86 体系结构,开发平台上运行的程序不能在 ARM 体系的处 理器平台上运行,所以我们必须使用交叉编译工具链来编译程序。 ARM-Linux 交叉编译工具链有不同的包装格式,RPM 格式是比较常用的格式,可以
13

山东工商学院 2008 届毕业论文

通过 rpm 命令很方便的进行安装,rpm 是 Redhat Linux 上的常用命令。我们以 tar 格式的 安装包来进行安装,tar 格式的安装包可以在如下地址下载。 http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/ 这里我们把下载的 cross-3.2.tar.bz2d 安装包存放在/home/yao/arm-linux 目录下, 首先进 行解压,命令如下:

但是因为 GCC 编译器的运行要依赖于其他工具和库,通常不能把这些工具放在任意 目录下,一般通过相关的 README 或者说明文档可以得到具体的安装路径。这里我们可 以通过 GCC 命令来获取安装路径。

从上面的打印信息中,我们可以看到“—prefix=/usr/local/arm/”,这便是 GCC 的安装路 径。它是在 GCC 编译前通过 prefix 选项配置的、 所以我们应该把工具链安装在/usr/local/arm 目录下。

然后,在环境变量 PATH 中添加路径

然后我们直接在命令行中输入 GCC 编译工具

我们看到 arm-linux-gcc 工具链已经安装,并且可以正常使用了。但是我们前边设置的 环境变量是临时的,在下次启动机器,就会丢失。我们可以在 etc 目录下的 profile 文件中, 添加如下语句 Export PATH=$PATH:/usr/local/arm/3.4.1/bin 这样我们不必在每次重启机器后再重设 PATH 变量了。

3.5 主机交叉环境配置 3.5.1 串口控制台工具
Windows 操作系统下有功能非常强大超级终端(Hyperterminal)工具, 而对于 Linux 操作 系统下可以使用 minicom 工具。minicom 不是图形窗口的界面,相较于 windows 下的超级
14

山东工商学院 2008 届毕业论文

终端配置比较麻烦,配置过程如下。 在 Shell 下执行“minicom -s”命令。出现如图 3.2 所示的配置菜单

图 3.2 minicom 配置菜单 选择 Serial port setup 进入串行口设置,我们把其中的 Serial Device 选项更改为 /dev/ttyS0 把 Bps/Par/Bits 更改为 115200 8N1 如下图 3.3 所示,其中 ttyS0 表示使用串口 1,115200 是波特率,8 表示数据为是八位, N 表示不使用奇偶校验,1 表示停止位。

图 3.3 minicom 串行口配置

3.5.2 配置主机的 TFTP 服务
TFTP 全称为 Trivial File Transfer Protoeol 及简单文件传输协议。它具有实现起来比较 简单的优点。现在我们配置 TFTP 服务,在 SHELL 执行
15

山东工商学院 2008 届毕业论文

#vi /etc/xinetd.d/tftp 这里我们把 tftpboot 目录作为输出目录,其具体配置如下

配置完成后需要执行#/etc/init.d/xinetd restart 重启 tftp 服务。

3.5.3 配置主机的 NFS 服务
NFS 服务主要提供文件共享服务,它可以把目录共享到网络上以供其他设备挂载访 问。可以通过对/etc/exports 的配置来对输出目录进行设置,这里我们采用的配置如下: export/home/QQ2440 *(rw,sync,no_root_squash) /home/QQ2440 表示 nfs 共享目录,我们这里把它作为开发板的根文件系统,可以通 过 nfs 挂接; * 表示所有的客户机都可以挂接此目录 rw 表示挂接此目录的客户机对该目录有读写的权力 no_root_squash 表示允许挂接此目录的客户机享有该主机的 root 身份 接下来我们要启动服务

或者我们也可以使用如下命令来启动 NFS 服务, 但是我们要注意, 应该先启动 portmap 服务,否则会提示无法注册服务

启动 nfs 服务以后,可以可以输入以下命令检验 nfs 该服务是否启动。

我们可以看到/mnt/cdrom 目录中的内容和/home/QQ2440 的内容是一致的,这说明我 们的 nfs 服务已经正确启动。
16

山东工商学院 2008 届毕业论文

第四章 Boot Loader 及移植
Boot Loader负责硬件平台的最基本的初始化,并引导Linux内核的启动。它的作用就 相当于Windows中的BIOS(Basic Input Output System) 。

4.1 Boot Loader
Boot Loader是操作系统运行之前的一段小程序,它主要负责初始化硬件设备,建立内 存空间的映射表等,将操作系统映像装载到内存中,然后跳转到操作系统所在的空间,启 动操作系统运行。 Boot Loader是基于特定的硬件平台来实现的, 所以嵌入式系统不可能建立一个通用的 Boot Loader,它不仅依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。但 是大部分的Boot Loader又具有很多的共性,某些Boot Loader也能够支持多种体系结构的嵌 入式系统,本论文要进行移植到U-Boot就能同时支持Power PC,ARM,MIPS和X86等体系 结构,并且能够支持百种以上的板子。Boot Loader的启动过程是多阶段的,这使得它既能 提供复杂的功能,又有很好的可移植性。

4.2 Boot Loader 的种类
随着嵌入式系统的发展,Boot Loader 的种类也不断的增多,对于其种类的划分也有 多种方式,可以按处理器体系结构来划分,还可以按照复杂程度的不同来划分。与 Boot Loader 功能类似的还有 Monitor,但是与 Boot Loader 不同的是,除了引导设备,执行主程 序外,还提供了更多的命令行接口,可以进行调试,读写内存,烧写 flash,配置环境变量 等。Monitor 可以在嵌入式系统开发过程中提供很好的调试功能,开发完成以后就设置成 “Boot Loader”,所以通常意义上可以把 Monitor 和 Boot Loader 统称为 Boot Loader。 对于每种体系结构,都有一系列的开放源码的 Boot Loader 可以选用。表 4.1 列出了 现有的比较常用的 Boot Loader。
表 4.1 开放源码的 Linux 引导程序 Boot Loader LILO GRUB Loadin ROLO Etherboot LinuxBIOS Monitor 否 否 否 否 否 否 描述 Linux磁盘引导程序 GNU的LILO替代程序 从DOS引导Linux 从ROM引导Linux而不需要BIOS 通过以太网卡启动Linux系统的固件 完全替代BUIS的Linux引导程序
17

x86 是 是 是 是 是 是

ARM 否 否 否 否 否 否

PowerPC 否 否 否 否 否 否

山东工商学院 2008 届毕业论文

BLOB U-boot RedBoot

否 是 是

LART等硬件平台的引导程序 通用引导程序 基于eCos的引导程序

否 是 是

是 是 是

否 是 是

4.3 Boot Loader 的操作模式
大多数的 Boot Loader 都包含有 2 种不同的操作模式, 本地加载模式和远程下载模式。

4.3.1 启动加载(Boot loading)模式
这种模式也称为"自主"(Autonomous)模式。也即 Boot Loader 从目标机上的某个固 态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,在发布的嵌入式产品中,Boot Loader 都应该工作在这种模 式下。

4.3.2 下载(Downloading)模式
在这种模式下, 目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主 机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常 首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 Boot Loader 写到目标机上的 FLASH 类固态存储设备中。 Boot Loader 的这种模式通常在第一次安装内核与根文件系统 时被使用;此外,以后的系统更新也会使用 Boot Loader 的这种工作模式。工作于这种模 式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。

4.4 Boot Loader 的启动方式
系统启动后,所有的 CPU 都会从处理器设定的复位地址开始执行,ARM 处理器在复 位时从地址 0x00000000 取第一条指令,所以嵌入式系统的开发板的 ROM 或 Flash 都要映 射到这个地址,把 Boot Loader 程序设置在相应的 Flash 位置,系统加电后,就会首先执行 它。 Boot Loader 引导系统有多种启动方式,如网络启动方式,硬盘启动方式,Flash 启动 方式等。

4.4.1 网络启动方式
网络启动方式不需要开发板配置较大的存储介质,类似于无盘工作站,但是需要在启 动之前, Boot Loader 安装到板上的 EPROM 或者 Flash 中, 把 Boot Loader 通过以太网接口 远程下载 Linux 内核映像或文件系统。 开发板的传输接口有串口,以太网接口,USB 口等,其中以太网接口因为速率快,传 输简单等优点成为最为普遍的网络启动接口。
18

山东工商学院 2008 届毕业论文

以以太网连接方式为 例,首先,需要在服务器上 配置启动相关的网络服务, 利用 DHCP/BOOTP 服务为 Boot Loader 分配 IP 地址, 配置网络参数,开启 TFTP 服务,把内核映像和其他文 件放在/tftpboot 目录下, Boot Loader 客户端通过简 单的 TFTP 协议远程下载内 核映像到开发板内存。 具体过程如图 3.1 所 示。 图 4.1 以太网连接方式
目标板文件系统 NFS 内核映像 TFTP 启动内核 HOST BOOTP 以太网连接 TARGET BIOS

4.4.2 磁盘启动方式
传统的 Linux 系统运行在台式机和服务器上,这样的系统是使用 BIOS 引导,且使用 磁盘作为存储介质,进入 BIOS 设置菜单,设置 BIOS 从软盘,光盘或者某块硬盘启动, 在硬盘的主引导分区,还需要安装 Boot Loader,Boot Loader 负责从磁盘文件系统中把操 作系统引导起来。 传统的 Linux 引导程序有 LILO,之后又出现了 GRUB。它们都可以引导操作系统。

4.4.3 Flash 启动方式
大多数嵌入式系统都使用 Flash 存储介质,有些 Flash 可以支持随机访问(如 NOR Flash) ,所以代码可以直接在 Flash 上执行的,Boot Loader 一般存储在 Flash 芯片上。这种 情况下通常需要把 Flash 分区使用,图 3.2 是 Boot Loader 和内核映像以及文件系统的分区 表。 Boot Loader 是根据处理器的复 位向量设置,而放在 Flash 的底端或 者顶端。使 Boot Loader 得入口位于 处理器上电执行第一条指令的位置。 接下来是参数区,这里作为 Boot Loader 的参数保存区。 参数去后边内核映像区, Boot Loader 引导 Linux 内核, 就是从这个地方把内核映像解 压到 RAM 中去,然后跳转到内核映像入口执行。 然后是文件系统区, 如果使用 Ramdisk 文件系统, 则需要 Boot Loader 把它解压到 RAM 中,如果使用 JFFS2 文件系统,将直接挂载为文件系统。
19

Boot loader

参数

内核映像

文件系统

图 4.2 固态存储设备的典型空间分配结构

山东工商学院 2008 届毕业论文

4.4 Boot Loader 的启动过程
从操作系统的角度看,Boot Loader 的总目标就是正确地调用内核来执行。 由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两 大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中, 而且通常都用汇编语言来实现, 以达到短小精悍的目的。 stage2 则通常用 C 语言来实现, 而 这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。

4.4.1 Boot Loader 的 stage1
Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序): (1)硬件设备初始化。这是 Boot Loader 一开始就执行的操作,其目的是为 stage2 的 执行以及随后的 kernel 的执行准备好一些基本的硬件环境。 — 屏蔽所有的中断。可以通过写 CPU 的中断屏蔽寄存器或状态寄存器来完成。 — 设置 CPU 的速度和时钟频率。 — RAM 初始化。包括正确地设置系统的内存控制器的功能寄存器等。 — 初始化 LED。典型地,通过 GPIO 来驱动 LED,其目的是表明系统的状态。 — 关闭 CPU 内部指令/数据 cache。 (2)为加载 Boot Loader 的 stage2 准备 RAM 空间。虽然嵌入式 系统的内核映像和根文 件系统映像也可以在直 接在 ROM 和 Flash 这样 的固态存储设备中直接 运行, 但这是以牺牲运行 速度为代价的, 所以一般 情况下, 为了获取更快的 执行速度, 通常把 stage2 加载到 RAM 来执行。 因 此必须为加载 stage2 准 备好一段可用的 RAM 空间。由于 stage2 通常 是 C 语言执行代码,因 此在考虑空间大小时, 除 了 stage2 可执行映像 的大小外, 还必须把堆栈
Flash 地址空间 ... (blank) Ramdisk ... (blank) 内核映像 ... (blank) Boot loader 的 stage2 可执行映 像可能的最大大小:64KB Boot loader 的 stage2 可执行映 像大小:1KB 0x00010000 (64KB) RAM 地址空间 stage1 为 stage2 可执行映 像准备的 RAM 地址范围 堆栈指 sp: Stage2_end-4 Stage2_start

0x00000400(1KB) 0x00000000

图 4.3 可执行映像刚被拷贝到 RAM 空间时的系统内存布局
20

山东工商学院 2008 届毕业论文

空间也考虑进来。 (3)拷贝 Boot Loader 的 stage2 到 RAM 空间中。 在拷贝之前必须确定可执行映像在固 态存储设备中的起始地址和终止地址,以及 RAM 空间的其实地址。 (4)设置好堆栈。 通常我们可以把 sp 的值设置为 RAM 空间的最顶端(堆栈向下生长)。 在设置堆栈指针 sp 之前,也可以使用 LED 灯,输出特定状态,以提示我们开发板准备跳 转到 stage2。 (5)跳转到 stage2 的 C 入口点, 4.3 为 stage2 可执行映象刚被拷贝到 RAM 空间时 图 的系统内存布局。

4.4.2 Boot Loader 的 stage2
Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序): (1)初始化本阶段要使用到的硬件设备。这通常包括:初始化至少一个串口,以便和终 端用户进行 I/O 输出信息,初始化计时器等。 (2)检测系统内存映射(memory map)。 所谓内存映射就是指在整个物理地址空间中有哪 些地址范围被分配用来寻址系统的 RAM 单元。 虽然 CPU 通常预留出一大段足够的地址空 间给系统 RAM,但是在搭建具体的嵌入式系统时却不一定会实现 CPU 预留的全部 RAM 地址空间。因此 Boot Loader 的 stage2 必须在将存储在 flash 上的内核映像读到 RAM 空间 之前检测整个系统的内存映射情况。 (3)加载内核映像和根文件系统映像,即将 kernel 映像和根文件系统映像从 flash 上 读到 RAM 空间中。 (4)为内核设置启动参数。在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的 常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、 ATAG_INITRD 等。 (5)调用内核。 Boot Loader 调用 Linux 内核的方法是直接跳转到内核的第一条指令处。

4.5 Boot Loader 编译与移植 4.5.1 Boot Loader 之 vivi
vivi 是韩国的 MIZI 公司针对 ARM9 系列微处理器开发的一种 Boot Loader, 目前它支 持 SA-1110、S3C2410 这两种类型的微处理器。vivi 具有结构清晰、功能丰富的特点。它 支持图形化的用户配置界面,提供对 Flash 分区、下载文件等一系列命令。vivi 同时具备两 种操作模式,即启动加载模式和下载模式。在处于下载模式时,通过目标平台和主机的串 行连接,vivi 向用户提供了一个简单的命令行接口。vivi 源代码的目录结构与 Linux 内核 的目录结构类似,不同功能的文件被安排到不同的目录中。 由于 vivi 的开发之初便是专门针对 ARM9 系列处理器的,所以移植到 S342440 处理 器比较简单。编译 vivi 之前需要先对 vivi 源码的顶层目录下边的 Makefile 文件进行修改,
21

山东工商学院 2008 届毕业论文

主要的修改如下: LINUX_INCLUDE_DIR = /home/kernel/linux-2.6.13/include CROSS_COMPILE = /usr/local/arm/3.4.1/bin/arm-linuxARM_GCC_LIBS = /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1 其中 LINUX_INCLUDE_DIR 为需要移植内核的 include 文件 (编译 vivi 的过程中要用 到 kernel 的一些头文件) ,CROSS_COMPILE 为交叉编译器,ARM_GCC_LIBS 是交叉编 译器的库支持文件。 修改好,保存后,执行 make distclean(目的是确保编译的有效性,在编译之前将 vivi 里所有的“*.o”和“*.o.flag”文件删掉) 。 然后输入 make menuconfig 出现如下界面

图 4.4 vivi 的配置界面 进行简单的配置后,退出并保存,之后执行 make 命令开始编译,编译完成后,目录 下边就会生成一个 vivi,我们可以把它烧进开发板进行测试。

4.5.2 Boot Loader 之 U-Boot
虽然对于 S3C2440 和 S3C2410 来说,三星从一开始就专门为其设计 vivi,就功能和 性能来说,都已经足够了,并且 vivi 从一开始就支持 Nand flash 启动,比 U-Boot 有一定优 势,但是 U-Boot 作为嵌入式系统中通用的 Boot Loader,可以很方便的移植到其他硬件平 台,因此对嵌入式系统 Boot Loader,研究 U-Boot 的移植就显得非常重要。接下来我们以 smdk2410 公板为模板,开始移植 U-Boot 到 QQ2440V3 开发板。 移植 U-Boot 到新的嵌入式系统板上包括两个层面的移植,第一层面是针对 CPU 的移植, 第二层面是针对 BOARD 的移植,同时需要移植相关的头。首先我们下载 u-boot,网上流传
22

山东工商学院 2008 届毕业论文

U-boot1.3.1 版本,但是我们在其官方网站上,只找到最新版本 U-Boot1.1.6,所以我们这里 以 U-Boot1.1.6 为例。 一、在 U-Boot 中建立自己的开发板类型,并测试编译。 (1) 首先,我们把下载下来的 u-boot-1.1.6.tar.bz2 包,复制到我们的工作目录,这里我 们把它复制到/home/work/目录下边,然后解压。

进入 U-Boot 目录,然后修改顶层目录的 Makefile

我们找到 smdk2410_config 项,仿照其模式为 QQ2440 建立编译项

此时要注意,“@”符号前边一定要加“TAB”而并非空格,否则会在测试编译时报错。 其中各项的意思如下: arm: CPU 的架构(ARCH) arm920t: CPU 的类型(CPU),其对应于 cpu/arm920t 子目录。 qq2440: 开发板的型号(BOARD),对应于 board/friendlyarm/qq2440 目录。 friendlyarm: 开发者/或经销商(vender),这里我填了“友善之臂”。 s3c24x0: 片上系统(SOC)。 然后找到 ifndef CROSS_COMPILE,在这句话之前加入我们的交叉编译器,这里我分 别安装了 cross-2.95.3 和 cross-3.4.1 交叉编译工具,在这里使用 3.4.1 版本有时候会报错, 所以我们推荐在这里使用 cross-2.95.3,该工具的安装目录为/usr/local/arm/2.95.3

(2) 在/board 子目录中建立自己的开发板 qq2440 目录

23

山东工商学院 2008 届毕业论文

由于我在上一步板子的开发者/或经销商(vender)中填了 friendlyarm,所以开发板 qq2440 目录一定要建在/board 子目录中的 friendlyarm 目录下 ,否则编译会出错,同时还 要记得修改自己的开发板 qq2440 目录下的 Makefile 文件, 同样用 vi 编辑器打开 Makefile, 并把 COBJS 变量值修改如下 OBJS := qq2440.o flash.o (3) 在 include/configs/中建立配置头文件

(4) 测试编译

可以看到,系统并没有报错,说明编译配置已经没问题,接下来我们所要做的就是要 根据开发板参数,修改相应的文件。 二、修改 U-Boot 中的文件,以匹配 2440。 (1) 修改/cpu/arm920t/start.S。start.S 文件是整个 Boot loader 程序的入口点,在这里我 们需要对寄存器地址定义、中断禁止部分、时钟设置(2440 的主频为 405MHz)等部分, 按照 s3c2440 手册或者 vivi 的源代码,将从 Flash 启动改成从 NAND Flash 启动。 (2) 在 board/friendlyarm/qq2440 加入 NAND Flash 读函数文件,拷贝 vivi 中的 nand_read.c 文件到此文件夹即可。 (3) 修改 board/friendlyarm/qq2440/Makefile 文件。 OBJS := qq2440.o nand_read.o flash.o (4) 修改 include/configs/qq2440.h 文件。添加 NAND FLASH、JFFS2、USB 启动支持。 (5) 修改 board/friendlyarm/qq2440/lowlevel_init.S 文件,依照开发板的内存区的配置情 况, 修改 board/tekkaman/tekkaman2440/lowlevel_init.S 文件,我们利用友善之臂提供的 vivi 源码里的信息做一些简单的修改。 (6) 修改/board/friendlyarm/qq2440/qq2440.c。修改其对 GPIO 和 PLL 的配置(需参阅开 发板的硬件说明和芯片手册): (7) 在个文件中添加“CONFIG_S3C2440”,使得原来 s3c2410 的代码可以编译进来。 此外还需要对以下文件进行一些修改 include/linux/mtd/nand_ids.hinclude/linux/mtd/nand.h /lib_arm/board.c 三、交叉编译 U-boot 在 U-Boot 根目录下执行如下命令 # make clean; # make qq2400_config;
24

common/env_nand.c

/board/friendlyarm/qq2440/qq2440.c

山东工商学院 2008 届毕业论文

# make 编译一段时间后,便会生成五个文件 u-boot,u-boot.bin,u-boot.srec,System.map。 其中,u-boot 是 U-Boot 映像的 ELF 格式,System.map 文件是 U-Boot 映像的符号表, u-boot.bin 文件是 U-Boot 映像原始的二进制格式,u-boot.srec 是 U-Boot 映像的 S-Record 格式。以上的三种映像格式都可以烧到 flash 中,但是需要加载器的支持。一般 u-boot.bin 最为常用,直接按照二进制格式下载即可。

4.6 安装 Boot Loader 到开发板
QQ2440V3 开发板采用的 Boot Loader 是基于 vivi 改进而来,名为 Supervivi,它采用 功能菜单的方式,并可以和原来的命令交互模式互相切换。Supervivi 可以使用 JTAG 板直 接烧写入 Nor Flash 中使用,也可以直接烧入 Nand Flash 中运行。当烧入 Nor Flash 并从中 启动时,将会出现菜单模式;当烧入 Nand Flash 并从中运行时,则为命令交互模式(提示: 需要在超级终端界面下按住空格键才能进入,否则直接启动系统) 。Supervivi 的菜单模式 主要为烧写系统而用,也可以设置参数和进行分区等,它采用 USB 下载的方式,因此下载 速度快,使用及其方便。Supervivi 的编译与 vivi 类似,我们这里不再赘述。 下边我们把编译生成的 Supervivi, 安装到开发板。 由于友善之臂的光盘没有提供 Linux 下的安装工具,所以我们这里在 windows 环境下安装,首先安装驱动,然后连接 JTAG 烧 写板到目标板,打开板子电源,在 MS-DOS 窗口下使用命令行工具 sjf2440.exe, 执行 sjf2440.exe /f vivi 即可以烧写 vivi 到目标板的 NandFlash 或 Nor flash 了。

25

山东工商学院 2008 届毕业论文

第五章 Linux 内核移植及根文件系统
5.1 Linux2.6 内核新特性
(1)Linux2.6 内核吸收了一些新技术,在性能、可测量性,支持和可用性方面不断 提高。使得新内核支持更多的体系结构,处理器、总线、接口和设备,简化扩展添加新设 备和子系统的支持。 (2) Linux 2.6 版本的 Linux 内核使用了由 Ingo Molnar 开发的 O(1)调度算法, 它在高 负载的情况下极其出色,并且对多处理器调度有很好的扩展。 (3)它采纳了内核抢占的补丁,大大减小了用户交互,多媒体等应用程序的调度延 迟。 (4) 新内核重写了线程框架,它基于一个 1:1 的线程模型,能够支持 NPTL(Native Posix Threading Library)线程库,NPTL 线程库解决了传统的 Linux 线程库存在的问题,对 系统有很大性能的提升。 (5)相对于 Linux 2.4,Linux2.6 对文件系统的支持在很多方面都有很大的改进,关 键变化在于对扩展属性(extended attributes)以及 POSIX 标准的访问控制的支持,并且重 写了对 NTFS 文件系统的支持。 (6)新内核添加了新的系统声音 ALSA(Advanced Linux Sound Architecture),新的声 音体系机构支持 USB 音频和 MIDI 设备,全双工重放等。 此外新内核最值得关注的变化是创建了一个统一的设备模型。 这个设备模型通过维持 大量的数据结构囊括了几乎所有的设备结构和系统,从而改进了设备的电源管理和设备相 关的任务管理。 截至撰写本论文为止 Linux 官方发布的最新版本内核 2.6.25。

5.2 Linux 内核源码结构
Linux 的内核源代码非常庞大,并且随着版本的发展不断的增加。所以它采用了目录 树结构,并且使用 Makefile 组织配置编译。Linux 内核顶层目录的 Makefile 是整个内核配 置编译的核心文件,负责整个组织目录树中子目录的编译管理。 内核源码顶层有许多子目录,分别组织各种内核子系统和文件。下面我们先把认识一 下这些顶层目录。 arch/ 存放体系结构相关的代码,如 arch/i386,arch/arm 等 drivers/ 各种设备驱动程序,如 drivers/char,drivers/block Documentation/ 内核文档 fs/ 文件系统,例如:fs/ext3,fs/jffs2 等 include/ 内核头文件 init/ Linux 初始化
26

山东工商学院 2008 届毕业论文

ipc/ 进程间通信的代码 kernel/ linux 内核核心代码 lib/ 各种库子程序 mm/ 内存管理代码 net/ 网络支持代码,主要是网络协议 scripts/ 内部或外部使用的脚本 usr/ 用户的代码。

5.3 Linux 内核启动流程
在移植 Linux 系统前,我们有必要了解一下 Linux 内核的启动流程,这可以为我们理 解 Linux 系统内核的移植过程, 提供清晰的移植思路。 并且有利于我们在调试阶段通过 LED 灯状态或屏幕打印信息来进行调试。 启动过程从内核映像入口开始执 行,由 decompress_kernel 函数完成内核 解 压 , call_kernel() 子 程 序 负 责 关 闭 CACHE,并跳转到 vmlinux 入口, 把控制 权完全交给 vmlinux 执行,然后再调用 内核启动函数 start_kernel,start_kernel 函数是 Linux 内核的通用初始化函数, 它负责初始化内核各个子系统,最后调 用 rest_init(),启动一个叫做 init 的内核线 程,init 函数负责完成挂载文件系统,初 始化设备驱动和启动用户空间等。 初始化完成后,将通过 run_init_ process()函数执行应用程序,这是 一个尝试过程,如果 execute_command 不存在,则顺序执行/sbin/init、/etc/init、 /bin/init、/bin/sh 从而完成整个 Linux 系 统的启动。
图 5.1 Linux 内核启动流程 prepare_namespace() execve(“/sbin/init”,argv_in it,envp_init) start: decompress_kernel () call_kernel () stext: start_kernel() setup_arch() rest_init() init() do_basic_setup() Linux Kernel Boot Loader

5.4 内核配置系统
Linux 内核源代码支持二十多种体系结构的处理器,还有各种各样的驱动程序选项, 因此在编译之前必须根据特定平台配置内核源码。Linux 内核有上千个配置选项,配置相 当复杂,所以 Linux 内核源代码组织了一个配置系统。 Linux 内核配置系统可以生成内核配置菜单,以方便内核配置。配置系统主要包含 Makefile、Kconfig 和配置工具,可以生成配置界面。配置界面是通过工具来生成的,工具
27

山东工商学院 2008 届毕业论文

通过 Makefile 编译执行,选项则是通过各级目录的 Kconfig 文件定义。Linux 内核配置命 令有:make config、make menuconfig、make xconfig。分别是字符界面、ncurses 光标菜单和 X-window 图形窗口配置界面。 Linux 内核的配置都是有顶层目录的 Makefile 整体管理的,在 Makefile 里可以找到如 下几行定义的规则。 config %config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ 这就是生成内核配置界面的命令规则,它定义了执行目标和依赖的前提条件,还有要 执行的命令。依赖的前提条件是 scripts_basic outputmakefile,这些在 Makefile 也是规则定 义,主要用来编译生成配置工具。 以上规则执行的命令就是执行/script/kconfig/Makefile 指定的规则, 使用配置工具解析 arch/$(ARCH)/Kconfig 文件,生成内核配置菜单。$(ARCH)变量是 Linux 体系结构的定义, 对应 arch 目录下的子目录名称。 Kconfig 包含了内核配置菜单的内容, arch/$(ARCH)/Kconfig 是配置主菜单的文件,调用管理其他各级 Kconfig。 Kconfig 文件是 Linux2.6 内核引入的配置文件,有关 Kconfig 的编写,可以参考内核 源代码中的 Documentation/kbuild/kconfig-language.txt 文档,我们这里不再赘述。 例如我们可以找到以下语句 Kconfig := arch/$(SRCARCH)/Kconfig menuconfig: $(obj)/mconfig $< $(Kconfig) 其中 SRCARCH 在顶层目录定义,指定体系结构,我们这里使用的是 ARM 体系,故 替代变量之后执行的命令为: Scripts/kconfig/mconfig arch/arm/kconfig 执行命令使用 lxdialog 工具,生成光标配置菜单,arch/arm/kconfig 是菜单的主配置文 件。

5.5 Makefile 的组织结构
Makefiles 有五个部分组成,分别是内核配置文件(.config),对应体系结构的 Makefile (arch/$(ARCH)/Makefile),顶层目录下的 Makefile,内核编译各级目录下的 Makefiles (Kbuild Makefiles)以及所有 Kbuild Makefile 的通用规则定义(scripts/Makefile.*) 。 顶层目录的 Makefile 读取.config 文件,根据.config 的配置选项编译内核。

28

山东工商学院 2008 届毕业论文

5.6 配置编译内核 5.6.1 移植前的准备工作
在开始移植开发板的 BSP 之前,需要做充分的准备工作 (1)选择参考板 选择参考板的原则如下: — 参考板与开发板具有相同的处理器,至少类似的处理器; — 参考板和开发板具有相同的外围接口电路,至少基本接口相同; — Linux 内核已经支持参考板,至少有非官方的补丁和 BSP; — 参考板 Linux 设备驱动工作正常,至少已经提供驱动基本接口。 (2)编译测试参考板的 Linux 内核 验证 Linux 对参考板的支持情况,以选择对硬件平台支持最好,版本最新的内核。 (3)分析参考板的 BSP 代码 分析平台相关的部分代码实现;分析内核编译组织方式;分析内核启动的初始化程 序;分析驱动程序的实现。 Linux 的官方网站提供的最新版本的 Linux 内核版本号为 kernel 2.6.25, 该版本已经对 S3C2440 处理器提供了独立支持, 并提供了样板 smdk2440。 但是由于友善之臂公司已经提 供了集成了 SBC2440 的 BSP 包的 2.6.13 内核版本。SBC2440 与 QQ2440 的处理器型号相 同,板上资源相差不大,移植起来相对简单,所以选用该内核版本进行移植。 首先我们把 Linux 内核的源代码包复制到我们的工作目录,并进行解压。

这样内核源码被解压到了/home/kernel 2.6.13 目录中。 接下来,需要把根目录的 Makefile 中以下两行注释掉 ARCH ?=$(SUBARCH) ?= CROSS_COMPILE 并添加以下两行 ARCH ?=arm ?=/usr/local/arm/bin/arm-linuxCROSS_COMPILE

这两个参数分别用来指定编译的体系结构和交叉编译工具链的, 或者我们也可以直接 在启动配置菜单或编译时以参数的形式指定它们,如 # make menuconfig ARCH=arm #make CROSS_COMPILE=/usr/local/arm/bin/arm-linux

5.6.2 使用默认配置文件编译内核
进入内核目录,我们可以看到三个可用的配置文件,config_cs8900_n35(适用于
29

山东工商学院 2008 届毕业论文

NEC3.5 寸 LCD,配置了 CS8900 网卡)config_cs8900_s355(适用于三星 3.5 寸 LCD, 配 置 了 CS8900 网 卡 ) config_cs8900_tft640480 适 用 于 TFT 真 彩 液 晶 , 分 辨 率 为 640x480,配置了 CS8900 网卡) 。

运行 make menuconfig 命令,就会出现如图 5.2 的配置菜单

图 5.2 Linux 内核配置界面 我们可以选择进入“Load an Alternate Configuration File”配置栏,加载内核目录下边的 三个可用的配置里边的合适的一个,如 config_cs8900_n35

图 5.3 加载默认配置 然后在内核根目录下执行# make zImage,需要编译一段时间,编译完成后,就会在根 目录下生成 vmlinux,System.map 等文件,而我们所需要的 zImage 内核映像文件则在 /arch/arm/boot 目录下
30

山东工商学院 2008 届毕业论文

5.6.3 定制 Linux 内核
以上我们只是使用的系统自带的可用配置文件,下面我们自己定制 Linux 内核,依旧 是使用# make menuconfig 命令进入主配置菜单。 ● 首先配置 CPU,选择 System Type 选项,进入 CPU 类型菜单

图 5.4 CPU 配置界面 可以看到, 系统大部分使用了标注了 S3C2410 的选项, 这是因为 S3C2410 和 3C2440 的很多寄存器地址等地址和设置是完全相同的,该版本的 linux-2.6 内核没有再对这两种 CPU 分别设置。 ● 我们可以进入 S3C24XX Implementations 子菜单,来选择板级配置,里面有很多常 见的使用基于 S3C2410 和 S3C2440 的目标板平台选项。

31

山东工商学院 2008 届毕业论文

图 5.5 板级配置界面 我们这里选择 SBC2440/mini2440 的平台即可。 ● 配置 LCD 驱动。 在主菜单里选择 Devices Drivers 按回车进入, 然后选择 Graphics support,照旧按回车进入,如图

图 5.6 LCD 配置界面 选中: <*> Support for frame buffer devices <*> S3C2410 LCD framebuffer support 选中 LCD select,按回车进入,选择自己所需要的驱动,我们这里选择
32

山东工商学院 2008 届毕业论文

<*> 3.5 inch 320× 240 Samsung LCD ● 配置 USB 鼠标和键盘 在 Device Drivers 菜单里面,选中 <*>USB supoort 然后回车进入找到并选中: <*> Support for Host-side USB <*> OHCI HCD support 继续向下寻找 USB 键盘和鼠标部分

图 5.7 USB 键盘和鼠标配置界面 在 --- USB Input Devices 部分,我们可以找到并选中: <*> USB Human Interface Devices (full HID) support [*] HID input layer support 这样我们就添加了 USB 鼠标和键盘的驱动。 ● 配置网卡驱动。 QQ2440V3 开发板使用的是 CS8900 网卡,要配置 CS8900 网卡驱动,首先要配置网 络协议支持 在主菜单中,选择进入 Netwoking,进入该选项下的 [*] Networking support 进入 Networking options,选择我们所要使用的协议,这里我 们只要选择 TCP/IP 协议就可以了。 然后返回顶层菜单,选择进入 Device Drivers 菜单。找到 Network device support,选 择进入后找到 Ethernet (10 or 100Mbit) 选项,选中以下两项: <*> CS8900 support <*> Generic Media Independent Interface device support。 ● 其他配置。除以上配置以外,我们还可以根据需要配置文件系统,声卡驱动,串口
33

山东工商学院 2008 届毕业论文

驱动等,SD/MMC 卡驱动,优盘支持,触摸屏,USB 摄像头驱动等,它们都可以很方便的 通过如上配置系统进行配置。 配置完成后,保存退出,默认会保存为源代码根目录下名为.config 的文件,然后如 上节执行 make zImage 命令即可。

5.7 Linux 根文件系统
文件系统是任何操作系统中都非常重要的概念, 每个操作系统都有一种把数据保存为 文件和目录的方法。简单的讲,文件系统是操作系统寻址磁盘或者分区上的文件的方法和 数据结构,即组织文件的方法。

5.7.1 Linux 根文件系统目录结构
Linux 的跟文件系统包括支持 Linux 系统正常运行的基本内容,包含系统使用的软件 和库, 以及一些用户级软件支持等。 Linux 遵守文件系统科学分类标准 (Filesystem Hierarchy Standard,FHS),使得其文件系统布局实现了标准化。Linux 根目录下的目录文件如下

/dev /root /usr

设备文件 用户主目录 存放一般不需要修改的命令程序文件,程序库手册和其他文档等

/home 用户主目录的默认位置 /proc 系统内存的映射 /bin /etc /boot /lib /mnt 包含二进制文件的可执行程序 存放大部分的系统重要配置文件 存放系统启动时所需要的各种文件 标准程序设计库 为其它文件系统提供挂载点

5.7.2 嵌入式文件系统
鉴于大多数嵌入式系统使用 Flash 存储介质,所以传统的 Linux 文件系统己经不适合 应用在嵌入式系统中,常见的专用于闪存设备的文件系统如下: ●Romfs 传统型的 Romfs 文件系统是最常使用的一种文件系统,它是一种简单的、紧凑的、只 读的文件系统,不支持动态擦写保存。 ●Cramfs Cramfs 是 Linux 的创始人 Linus Torvalds 开发的一种可压缩只读文件系统,它压缩比 高,可以为嵌入式系统节省更多的存储空间。
34

山东工商学院 2008 届毕业论文

●Ramfs/Tmpfs Ramfs 也是 Linus Torvalds 开发的, Ramfs 文件系统把所有的文件都放在 RAM 里运行, 相对于 ramdisk 来说,Ramfs 的大小可以随着所含文件内容大小变化,但是它的一个缺点 是当系统重新引导时会丢失所有数据。 ●JFFS2 JFFS2 是 RedHat 公司基于 JFFS 开发的闪存文件系统,它是一个可读写的、压缩的、 日志型文件系统,并提供了崩溃/掉电安全保护,克服了 JFFS 的一些缺点:使用了基于哈希 表的日志节点结构,大大加快了对节点的操作速度;支持数据压缩;提供了“写平衡”支持; 支持多种节点类型;提高了对闪存的利用率,降低了内存的消耗。这些特点使 JFFS2 文件 系统成为目前 Flash 设备上最流行的文件系统格式。 ●YAFFS YAFFS/YAFFS2 是一种和 JFFSx 类似的闪存文件系统,它是专为嵌入式系统使用 NAND 型闪存而设计的一种日志型文件系统。和 JFFS2 相比它减少了一些功能,所以速度 更快,而且对内存的占用比较小。此外,YAFFS 自带 NAND 芯片的驱动,相对于 JFFS2 在 NAND 闪存上的不稳定,在 NAND 闪存上使用 YAFFS 是更好的选择。

5.7.3 YAFFS 文件系统映像制作
制作 yaffs 文件系统映象需要使用 mkyaffsimage 工具程序 (1)把下载的 mkyaffsimage.tgz 文件拷贝到临时目录,进入该目录,然后执行以下命 令,将把制作工具 mkyaffsimage 安装到系统的可执行路径/usr/sbin 目录下

接下来运行# mkyaffsimage 命令,可以看到已经可以正常使用了。 (2)可以根据需要, 建立自己的文件目录, 但是以一定要把系统所必需的文件拷贝到相 应的目录下,这里使用友善之臂提供的光盘中的 root_default.tgz 为例,来进行文件目录的 制作,首先执行以下解压命令: 解压完成后,就会在目录下生成一个 root_default 目录 (3)接下来,执行以下命令 编译可能需要一段时间,等编译完成后,就可以在目录下生成映像文件 root_qq2440 了。
35

山东工商学院 2008 届毕业论文

可以看到,目录下已经生成了 root_qq2440 文件。

5.8 安装 Linux 及根文件系统到开发板
并把开发板设置为 Nor Flash 启动,连接好串口,打开 minicom,上电启动开发板, 由于我们已经烧写 vivi 到 Nor Flash, 如果没有错误的话, 就会在 minicom 上出现提示信息,

然后根据功能菜单,选择[k],开发板即进入内核下载模式,接下来对主机端文件进行 简单的设置就可以下载内核了。 文件系统的安装与内核的安装类似,这里需要选择功能菜单[y],其它操作基本相同。

36

山东工商学院 2008 届毕业论文

第六章 总结与展望
6.1 总结
本文对 Linux 操作系统移植环境及过程进行了深刻剖析, 重点讨论了嵌入式系统的引 导加载程序—Boot Loader 和 Linux 内核的移植实现过程、 同时对 Linux 根文件系统的建立、 硬件平台的结构,进行了比较深入的了解。现将本论文的工作简要总结如下: 首先, 对嵌入式系统和嵌入式系统的特征作了介绍, 继而谈到了 Linux 操作系统作为 嵌入式系统的优势所在, 并对当今的嵌入式 Linux、嵌入式处理器,做了一个总体介绍。 其次,对移植所使用的硬件平台 QQ2440V3 进行了分析,尤其是对该平台所使用的 ARM 微处理器进行了详尽的阐述。 第三,提出了建立交叉开发环境的几种方案,并重点分析了 VMware 下基于 Linux 系统(Red Hat)的嵌入式 Linux 系统软件移植软件平台的构建。包括 Linux 操作系统的安 装,交叉编译工具和主机开发环境配置等。 第四,目标板引导启动程序的移植作为嵌入式移植第一步,是与硬件平台紧密相关 的,必须针对目标平台进行特殊的更改和配置。本文对 Boot Loader 的启动过程进行了分 析,并分别对 vivi 和 U-Boot 两种引导程序进行了编译和配置。 第五, Linux 内核移植是整个嵌入式系统移植的重中之重。 本文首先对新版本的 Linux 2.6 内核的新特性进行了深一步的认识,仔细分析了源码结构及内核启动流程。对 Linux 内核配置系统、Makefile、跟文件系统等进行了剖析,然后对 Linux 内核进行定制、编译, 最终实现了移植。

6.2 不足与展望
本课题旨在对嵌入式系统移植过程进行熟悉和了解,因此在选用移植内核时,选用 的是友善之臂公司提供的 2.6.13 内核, 其中已经包含了 SBC2440 平台的 BSP 包, SBC2440 而 的平台与 QQ2440 平台的处理器相同, 外围器件相差不大, 从而移植起来也相对比较容易。 移植过程并没有深入到太多的嵌入式移植的底层代码部分,只是针对已有的 SBC2440 的 BSP 包,对代码进行了适量的修改,在很多方面还有待继续研究并不断深化。 Linux 官方网站发布的最新 2.6.25 版本,已经对 S3C2440 处理器提供了独立的支持, 并且提供了样板 SMDK2440 的配置目录及文件,按照嵌入式移植中的“最新内核原则” , 有必要对该版本内核进行移植,以提供 QQ2440 更新,更高效的系统支持。

37

山东工商学院 2008 届毕业论文

致谢语
大学生活即将结束,从踏进大学校门时的懵懂,到现在的略显成熟,我想这一切都有 母校—山东工商学院与我一起见证。在此,感谢学校四年来给我提供的良好的学习环境和 成长空间,感谢信息与电子工程学院的各位老师对我的精心教育。是他们让我学到了宝贵 的知识,更重要的是让我学会了怎样去学习,这些将指导我未来的生活与就业;他们也让 我学会了如何做人及如何与人相处,这对我将来走上社会有很大的帮助。

38

山东工商学院 2008 届毕业论文

参考文献
[1] 孙继坤.张小全. 嵌入式 Linux 系统开发设计详解—基于 ARM [M]. 北京:人民邮电出版社,2006 [2] 孟庆昌.牛欣源. Linux 教程[M].北京:电子工业出版社,2007 [3] 杨建新.窦林卿.Red Hat Linux 9 入门与提高[M].北京:清华大学出版社,2006 [4] 王俊伟.吴俊海. Linux 标准教程[M].北京:清华大学出版社,2006 [5] 李善平.刘文峰.王焕龙. Linux 与嵌入式系统[M].北京:清华大学出版社,2006 [6] 马维华. 嵌入式系统原理及应用[M].北京:北京邮电大学出版社,2006 [7] ChianUnix 博客网 http://blog.chinaunix.net/ [8] RPM Search http://rpm.pbone.net/ [9] 嵌入式资讯网 http://www.embeded.cn/ [10] The Linux Kernel Archives http://www.kernel.org/ [11] 红联 Linux 门户网 http://www.linuxdiyf.com/ [12] 广嵌中心网 http://www.gd-emb.org/ [13] S3C2410 数据手册.PDF, http://www.dzkf.com/ [14] S3C2440 数据手册.PDF, http://www.dzkf.com/ [15] QQ2440V3 用户手册.PDF, [16] SBC2440V4.PDF, http://www.arm9.net/ http://www.arm9.net/

39

山东工商学院 2008 届毕业论文



40

附图 2 QQ2440 之 AUDIO

山东工商学院 2008 届毕业论文

41

附图 6 交叉开发环境 2


相关文章:
基于S3C2440的嵌入式Linux操作系统移植
基于S3C2440的嵌入式Linux操作系统移植_信息与通信_工程科技_专业资料。基于S3C2440的嵌入式Linux操作系统移植基于S3C2440 的嵌入式 Linux 操作系统移植 Embedded Linux...
基于ARM9的嵌入式的linux操作系统的移植
- 21 - 基于 ARM9 的嵌入式 linux 操作系统移植 摘要 随着电子技术的不断...硬件平台是基于 CPU: 三星 S3C2440A,核心 ARM920T,典型主频 400MHZ;SDRM: ...
_基于S3C2440的嵌入式LINUX操作系统内核研究
_基于S3C2440的嵌入式LINUX操作系统内核研究_工学_高等教育_教育专区。_基于S3C...硬件进行系统的移植,即使在同一品牌、同 一系列的产品中也需要根据系统硬件的...
基于S3C2440平台的μCOS实时操作系统的移植
S3C2440平台的μCOS实时操作系统移植S3C2440平台的μCOS实时操作系统移植隐藏>> 摘要μ C/OS-II 操作系统是专门为计算机的嵌入式应用设计的, μ C/OS-II...
基于ARM9的LINUX操作系统移植
本次设计主要研究了嵌入式 Linux 系统从 PC 机向开发板上移植的过程, 硬件平 台是基于 CPU:三星 S3C2440A,采用 ARM920T 内核,主频 400MHZ。本文介绍 了嵌入...
U-Boot分析及在S3C2440上的移植
结构 及启动过程源码,详细阐述 u-boot 在嵌入式开发板 s3c2440 上的 移植过程...应用结果表明 u-boot 在 s3c2440 上成功移植,为移植 linux 操作系统奠定了基础...
U-boot移植详解(基于s3c2440FL2440移植全纪录)
U-boot移植详解(基于s3c2440FL2440移植全纪录)_IT/计算机_专业资料。一、U-...选择U-Boot 的理由: ① 开放源码; ② 支持多种嵌入式操作系统内核, 如Linux...
S3C2440系统的内核与文件系统移植
学习嵌入式系统,bootloader 是最基础也是 进入嵌入式行业的敲门砖,没有了代码,...基于S3C2440的Linux内核... 34页 5下载券 实验3 内核移植与根文件... ...
linux操作系统在ARM平台上的移植 毕业论文
1.3 论文的主要工作本课题以 S3C6410 为核心的 ARM11 开发板为硬件开发平台,在此基础上,实 现嵌入式 Linux 系统的移植。其源码全部来自 Internet,在了解了系统...
更多相关标签:
s3c2440嵌入式开发板 | s3c2440 uboot移植 | s3c2440 linux移植 | uboot移植到s3c2440 | s3c2440 内核移植 | s3c2440最小系统 | 嵌入式系统移植 | 嵌入式linux系统移植 |