1、 学 号 0809111021 毕 业 论 文(设计) 课 题 基于 ARM9 的嵌入式 linux 操作系统移植 学生姓名 李龙 系 别 电气工程系 专业班级 08 自动化本 指导教师 赵海波 二 0 一二 年 六 月 目录 第 一章 绪论 . - 1 - 1.1 引言 . - 1 - 1.2 嵌入式系统的概述 . - 1 - 1.3 嵌入式系统的开发前景 . - 1 - 1.4 本文所要研究的任务和意义 . - 2 - 第二章 Linux 的内核启动分析 . - 2 - 2.1 内核 . - 3 - 2.2 Linux 内核的特性 . - 3 - 2.3 内核启动过程分析 . - 4 -
2、2.3.1 Bootloader 启动过程 . - 4 - 2.3.2 Linux 内核引导过程 . - 5 - 第三章 引导加载程序 U-BOOT 的编译 . - 12 - 3.1 编译交叉环境的搭建 . - 12 - 3.2 编译源码 . - 12 - 3.3 编译 U-BOOT . - 12 - 第四章 编译和配置内核 . - 14 - 4.1 解压内核包 . - 14 - 4.2 编辑 Makefile 文件 . - 14 - 4.3 配 置并编译 Kernel . - 14 - 4.4 介绍映像文件 zImage 与 uImage 的区别 . - 15 - 4.5 rootfs 文件
3、系统的制作 . - 15 - 第五章 内核与文件系统的烧写 . - 16 - 5.1 U-BOOT 的更新 . - 17 - 5.2 内核的烧写 . - 19 - 5.3 文件系统的烧写 . - 19 - 结论 . - 22 - 参考文献 . - 23 - 致谢 . - 24 - 图表清单 图 2-1 完整的 Linux 的各层次概述 . - 3 - 图 2-2 典型固态存储设备的物理空间分配 . - 4 - 图 2-3linux 内核启动流程 . - 8 - 图 4-1 配置目录 . - 14 - 图 5-1DNW 终端 . - 16 - 图 5-2tftp 窗口 . - 17 - 图 5-
4、3ping 窗口 . - 17 - 图 5-4 镜像的下载 . - 18 - 图 5-5 擦除 u-boot 的分区 . - 18 - 图 5-6 下载内核镜像 . - 19 - 图 5-7 下载文件系统 . - 20 - 图 5-8 擦除分区过程 . - 21 - 图 5-9 烧写文件系统 . - 21 - 基于 ARM9 的嵌入式 linux 操作系统移植 摘 要 随着电子技术的不断更新,嵌入式已经深入到各行各业了,嵌入式系统的开发已成为热点了,在智能家电,数字移动终端等这些行业嵌入式软件开发的需求下,嵌入式集成开发环境已经成为目前嵌入式系统发展的趋势,嵌入式系统的核心是嵌入式操作系统,在
5、此之上开发可以减少嵌入式开发的工作量,增强嵌入式应用软件的可移植性。 Linux 作为优秀的开源操作系统软件被广泛应用到嵌入式操作系统中,它的实时性,可移植性,支持大容量的内存, MMU(微控制器),和 I/O 系统等。 本课题的研究内容主要分为以下几个方 面: 研究嵌入式 linux 从模块到函数不同级别上的分析,硬件平台是基于 CPU: 三星S3C2440A,核心 ARM920T,典型主频 400MHZ; SDRM: 64Mbyte, FLASH: NOR FLASH: 24M 字节(用于存放 bootloader) NAND FALSH: 64M 字节;嵌入式系统的概念和现状;嵌入式系统
6、的开发模式;介绍内核启动过程和内核的裁剪; Bootloader 启动分析;嵌入式 linux的移植;嵌入式 linux 系统的开发环境工具链的生成和集成开发环境的搭建。 关键词 : 嵌入式系统; linux 内核; Bootloader; 移植集成开发环境 Based on the linux operating system ARM9 embeded transplantaion Abstract Along with the electronic technology unceasing renewal, the embedded has penetrated into all trad
7、es and professions, the embedded system development has become the hot spot, in the intelligent home appliances, digital mobile terminal embedded software development demand in these industries, embedded integrated development environment has become the development trend of embedded system, the embe
8、dded system is the core of embedded operating system, on this development can reduce the embedded development work load, enhanced the transplant of embedded application software. Linux as excellent open source operating system software has been widely applied to the embedded operating system, its re
9、al-time performance, portability, supports large capacity memory, MMU (microcontroller), and I / O system. This research mainly divides into the following several aspects: Research on Embedded Linux from the module to the function of different levels of cutting, hardware platform is based on the CPU
10、: S3C2440A core ARM920T, Samsung, 400MHZ SDRM: typical frequency; 64Mbyte, FLASH: NOR FLASH: 24M bytes (for bootloader) NAND FALSH: 64M byte; embedded system concept and current situation; embedded system development model; introduce start kernel and kernel tailoring; embedded Linux transplantation;
11、 Linux embedded system development environment tool chain generation and integrated development environment to build. Key words: embedded system kernel; Linux; Bootloader; transplantation; integrated development environment. 铜陵学院毕业论文(设计) - 1 - 第一章 绪论 1.1 引言 随着计算机技术、通信技术以及 Internet 的飞速发展。嵌入式系统已得到越来越广
12、泛的应用。与此同时,嵌入式系统的复杂性也在不断增加,嵌入式操作系统已经成为其中最重要的组成部分。目前,市场上存在着众多的嵌入式操作系统,而在这些系统之中,兼有 Linux 和嵌入式优点的嵌入式 Linux 操作系统,凭借其在结构清晰、源代码 开放性、裁剪性好,开发与使用均易实现等方面的优势,拥有巨大的市场前景和商业机会。当前嵌入式 Linux 的一个热点应用就是将 Linux 内核移植到一些典型的微控制器和微处理器上,提供操作系统层面支持,以实现嵌入式系统用软件的开发。 此研究基于 Linux 2.6 内核的嵌入式 Linux 系统,分析了所面临的理论问题、关键技术,实现了 Linux 内核在
13、 ARM9 平台上的运行。 1.2 嵌入式系统的概述 嵌入式系统的出现最初是用于单片机的。 随着 单片机的出现,使得家电、工业仪器仪表、工业机器人、通信设备等产品可以通过内嵌集成的电 子装置来获得的极佳的性能:更方便使用、速度更快、价格更便宜。这些装置虽然基本上具备了嵌入式的应用功能特点,但是这些的应用单一的使用 八 位的芯片,仅能执行一些单线程程序,根本说不上 “ system(系统 )” 的概念。 从 20 世纪 80 年代 年代以后,软件规模大大提升,所以对实时性要求更高,嵌入式系统进入了用“操作系统”编写应用软件的时代,可以进一步缩短开发周期,降低开发成本,大大提高了效率,具有代表性的
14、操作系统如: VxWorks,PalamOS,wince,UNIX 等 。就这样实时内核慢慢发展为现在很火的实时操作系统( RTOS Real Time Operating System)。 嵌入式 系统 开发就是对于所有 电子 设备 除了电脑之外的上操作系统的开发 ,开发对象 涉及领域包括手机 , 手持设备 ,机电,仪表仪器 等 。 嵌入式系统 围绕 计算机技术为基础,以应用为中心,软硬件 都 可裁剪,适用于 某些 应用系统对可靠性、功能、体积、成本、功耗要求 严格 的专用 的 计算机 操作 系统。它一般由 MPU(微处理器 )、外围 的 硬件设备、用户的应用程序 以及嵌入式操作系统 等四个
15、部分组成,用于实现对其他设备的控制、 管理或 监视 等功能。嵌入式系统和具体应用有机地结合在一起,它的 更新 换代也是和具体产品基本 同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。 3 1.3 嵌入式系统的开发前景 随着硬件性能的提高,嵌入式系统开发成为新的一个 IT发展方向之一 。嵌入式系统 的出现可以实现多任务管理在硬件资源(如处理器、存储器等)有限的设备上,而且 对 控制成本很敏感,很高的 实时响应要求等。 随着 家电 终端的智能化,操作系统 更显重要。手机、电子字典、 PDA、可视电话、 数字相机( DC)、游戏机( PSP)、 DVD/MP3/MP5、 U-Disk、
16、机顶盒 (Set Top Box)、 数字摄像机 (DV)、 高 清电视 (HDTV)、 智能机器人 、 网络设备、仪器仪表、 GPS 导航 、家电控制系统、航天航空设备 、医疗仪器 等都是典型的嵌入式系统。 如今嵌入式系统带来的年工业产值已超过了 1 万亿美元,在国内,信息家电,物联网技术这几年更成了 IT 热点,而其实这些都是嵌入式操作系统在特定环境下的一个应用。据李龙:基于 ARM9 的嵌入式 linux 操作系统移植 - 2 - 统计,目前国际上嵌入式操作系统 多达两百多种 ,配套着各种各样的开发工具、用于 嵌入式开发的 辅助仪器设备几乎都通用且功能强大。在国内,虽然嵌入式应用 很广,
17、但该领域的自主知识 却几乎还是空白。因此可见,嵌入式系统技术发展的空间难以想象,应用领 域广泛。 (1) 消费类电子应用领域 (2) 智能仪器,仪表应用领域 (3) 通信信息应用领域 (4) 自动化领域 (5) 国防武器设备应用领域 (6) 生物微电子应用领域 1.4 本文所要研究的任务和意义 本课题主要是基于智能家居 ,移动终端等电子消费产品的嵌入式软件开发的需求 ,在本文中以 linux2.6.3 内核为平台 ,硬件是基于 arm9 开发板 ,主要对内核的的启动过程和移植进行深入研究 ,相关的具体研究内容包含以下几个方面 : (1) 简单分析 Linux2.6 内核启动流程 研究内核的启动
18、过程, Bootloader 的研究。 (2) 研究嵌入式 linux 内核移植 研究 u-boot 的启动过程,编译配置内核,烧写 linux 内核,烧写根文件系统 rootfs。 (3 ) 嵌入式 linux 开发环境的建立 安装基于 ARM 平台的 CROSS_COMPILE(交叉编译 ),编译内核配置。 铜陵学院毕业论文(设计) - 3 - 第二章 Linux 的内核启动分析 Linux 源于 UNIX,从一开始就继承了 UNIIX 的先进性,是一个真正的多任务,多用户,具有复杂内核的操作系统。他充分利用了现行的 CPU 的任务切换功能,创造了多任 务,多用户的环境让 CPU 的功能发
19、挥到最大作用, Linux 系统是单内核,这种内核比微内核复杂多,并且支持现有的常见的文件系统,完全支持 POSIX(可移植性操作系统 )的规范,几乎能运行在所有的常见的处理器上,支持广泛的外部设备,可以找到所有的设备驱动程序最主要的一点就是置于 GPL(General Public Licence,共用许可证 )保护下,完全免费,源代码是公开的。 2. 1 内核 内核层是整个操作系统的核心部分,只要是负责各种软硬件资源的驱动,协调与调度。 Linux 内核 层 的主要 功能 模块分以下几个部分: 进程 管理 、 CPU 和 存储管理 、文件系统、设备管理和驱动、网络 支持 ,以及系统的初始化
20、 与 系统调用等。 4 内核的结构图: 图 2-1 完整的 Linux 的各层次概述 2. 2 Linux 内核的特性 ( 1) 支持动态加载内核模块,允许在需要的时候动态卸除和加载部分内在代码。 ( 2) 支持对称多处理( SMP)机制。 ( 3) 内核可抢占,允许在内核运行的任务优先执行的能力。 ( 4) 支持内核线程,对于内核来说,线程与进程一样,只是线程共享资源。 应用程序 C 库 核心 内核 设备驱动程序 硬件 网络 设备驱动程序 VFS 文件系统 内存管理 进程管理 特定于体系结构的代码 系统调用 用户空间 内核空间 李龙:基于 ARM9 的嵌入式 linux 操作系统移植 - 4
21、 - (5)提供具有设备类的面向对象的设备模型,热插播事件,已经用户空间的设备文件系统。 (6)Linux 是开源代码,其自由空间大。 2. 3 内核启动过程分析 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序( Bootloader),Linux内核,文件系统,应用程序。其中 Bootloader是系统启动或复位以后执行的第一段代码它主要用来初始化处理器及外设,然后调用 Linux 内核。 Linux内核在完成系统的初始化之后才能挂载 根文件系统( Root Filesystem)。 作为 系统的核心组成部分,它可以 提供 Linux 系统 中 数据 和文件 的存储区
22、域,一般 它还包括运行应用软件 和系统配置文件 所需要的 C库。嵌入式系统的灵魂 可以说是 应用程序 ,通常嵌入式系统所要达到的目标 就是通过设计应用程序所实现的 。任何硬件上设计精良的嵌入式系统 ,如果没有应用程序的支持 都没有实用意义。 78 图 2-2 典型固态存储设备的物理空间分配 2.3.1 Bootloader启动过程 Bootloader在运行过程中具有执行用户输入的命令和初 始化系统等作用,其最根本的功能是为了启动 Linux内核做一些准备工作。 ( 1) Bootloader 的概念和作用: Bootloader 是系统上电后运行的第一段程序,类似于 PC机上的 BIOS(B
23、asic Input Out System 基本输入输出系统 ),所以也称作为嵌入式系统的引导加载程序,由于很少采用磁盘而使用 Flase(非易失性存储器 )作为主要存储介质,在完成对硬件设备的初始化,建立内存空间映射图,将软硬件环境带到一个合适的状态。他会将 Flash中的 Linux内核拷贝到 RAM中去,然后直接 跳转到内核的第一条指令处继续执行即跳转到 MEM_ATART+0x8000地址处,其中 0x8000是相对于内核首地址的偏移量,然后 启动 Linux内核( kernel),所以 Linux内核的启动和 Bootloader是分不开的,若要研究 Linux内核的启动过程,就必须
24、 得清晰认识Bootloader的启动流程,这样 对嵌入式系统的启动流 程有 更 深入的掌握。 ( 2) Bootloader的启动流程 不同厂商的处理器核的嵌入式操作系统在上电或复位后执 行的第一条指令 所在 地址一般不相同,对于 三星 ARM920T处理器来说,该地址为 0x00000000。对于大多数 的嵌入式系统,通常把 Flash等非易失性存储器映射到这个地址处, 那么 位于该存储器的最前端 就是Bootloader的程序代码 。 针对不同类型的存储器 , Bootloader的执行流程也会不同 。嵌入式系统中大都 采用 Nor Flash和 Nand Flash两种 , 它们之间的
25、区别 在于: Nand Flash不支持铜陵学院毕业论文(设计) - 5 - XIP(eXecute In Place 芯片内执行 ),所以要想执行 Nand Flash上的代码,必须先将其拷贝到 RAM 中去,然后跳到 RAM 中去执行; 而 Nor Flash支 持芯片内执行( XIP这样代码可以在 Flash上直接执行而不必拷贝到 RAM中去执行 。 5 Bootloader启动过程多数包括两个阶段即 stage1和 stage2。 ( 3) Bootloader实现 的功能 以下,对这两个阶段启动流程进行分析, Bootloader的启动过程多数分为两个阶段。第一阶段主要依赖于 CPU
26、体系结构的硬件初始化代码,由于所做的操作针对性强,依附于硬件,一般用 ARM汇编编程实现;第二阶段考虑到实现功能的复杂性,程序代码的可读性和可移植性,一般采用 C语言编程实现。启动过程中,在完成第一阶段任 务后,通过跳转指令 B或 BL等可直接跳转到第二阶段 C程序的入口处,也可以通过 LDR, MOV指令实现上述功能,此外, C程序的入口不一定是主函数 main()函数。 第一阶段和第二阶段的主要任务如下。 Bootloade的第一阶段的主要任务: 基本硬件初始化(屏蔽所有中断,关闭 CPU内部指令,数据 CACHE等)。 为第二阶段准备 ARM空间( 设置 CPU的控制寄存器参数,以便能正
27、常使用 RAM 以及检测 RAM 大小等 )。 如果是从某个存储器( Nand Flase)中启动则复制 Bootloader第二阶段代码 到 RAM。 设置 ARM各种模式下的堆栈指针堆栈指针 SP设置在 1MB的 RAM空间的最顶端 (堆栈向下生长 )。 跳转到第二阶段 C程序入口处,进入第二阶段。 在第一阶段全部就绪后 , 跳转到 stage2去执行 。 Bootloader的第二阶段的主要任务: 初始化本阶段要用到的硬件设备。 检测系统的内存映射。 将内核映像和根文件系统从 Flase复制到 ARM。 为操作系统 的 内核设置启动参数。 调用操作系统内核。 Bootloader调用 L
28、inux kernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下 列条件: CPU寄存器的设置: R0为 0; R1为机器类型 ID; R2为启动参数,标记列表在 RAM中的起始基地址。 (机器类型参见 linux/arch/arm/tools/mach-types目录 )。 CPU模式 :CPU必须 设置为 SVC模式,必须禁止中断 (IRQs和 FIQs)。 MMU和 CACHE的设置: MMU必须关闭;指令 CACHE可以打开也可以关闭;数据 CACHE必须关闭。 2.3.2 Linux内核引导过程 (1) linux内核启动方式 Bootloader 完成系统初始化工作后,将运行 机制移交 给 Linux 内核。 根据内核是否压缩以及内核是否在本地执行, 分为以下 启动 方式: RAM 自解压 : 压缩格式的内核由开头一段自解压代码和压缩内核数据组成,由于以