1、嵌嵌 入入 式式 LinuxLinux 课课 程程 设设 计计 报报 告告 课题:嵌入式课题:嵌入式 bootloaderbootloader 的移植分析的移植分析 一一 概述概述: : BootLoaderBootLoader 介绍介绍 系统上电之后,需要一段程序来进行初始化:关闭 WATCHDOG、改变系统时钟、初始化 存储控制器、将更多的代码复制到内存中等。如果它能将操作系统内核复制到内存中运行, 无论从本地,比如 Flash;还是从远端,比如网络,就称这段程序为 Bootloader。 Bootloader 是可以添加功能的,比如网络功能。通过串口或网络从 PC 下载烧写文件、 将存储
2、在 Flash 上压缩的文件解压后再运行等,这样的 Bootloader 是比较强大的,也称为 Monitor。实际上,在最终产品中用户并不需要使用这些功能,它们只是为了方便开发。 Bootloader 的实现非常依赖于具体硬件,在嵌入式系统中硬件配置千差万别,即使是 相同的 CPU,它的外设也可能不同,比如 Flash 不同,所以不可能有一个 Bootloader 支持 所有的 CPU、所有的电路板。即使是支持 CPU 架构比较多的 U-Boot,也不是一拿来就可以 使用的,需要进行一些移植。 引导加载程序是系统加电后运行的第一段软件代码。 PC 机中的引导加载程序由 BIOS(其 本质就是
3、一段固件程序)和位于硬盘 MBR 中的 OS BootLoader(比如,LILO 和 GRUB 等)一起 组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 BootLoader 读到系统的 RAM 中,然后将控制权交给 OS BootLoader。BootLoader 的主要运行任务就是将内核映象从硬盘 上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内 嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 BootLoader 来完成。比 如在一个基于 AR
4、M7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 BootLoader 程序。 简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段 小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到 一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常 并没有像BIOS那样的固件程序, 因此整个系统的加载启动任务就完全由BootLoader来完成。 二:系统总体设计和模块结构知识二:系统总体设计和模块结构知识: : ( (一一
5、) ) 嵌入式嵌入式 LinuxLinux 软件结构与分布软件结构与分布 在一般情况下嵌入式 Linux 系统中的软件主要分为以下及部分: (1)引导加载程序:其中包括内部 ROM 中的固化启动代码和 Boot Loader 两部分。 而这个内部固化 ROM 是厂家在芯片生产时候固化的,作用基本上是引导 Boot Loader。有的 芯片比较复杂,比如 Omap3,他在 flash 中没有代码的时候有许多启动方式:USB、UART 或 以太网等等。而 S3C24x0 则很简单,只有 Norboot 和 Nandboot。 (2)Linux kernel 和 drivers。 (3) 文件系统。
6、 包括根文件系统和建立于 Flash 内存设备之上的文件系统 (EXT4、 UBI、 CRAMFS 等等) 。它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载 体。 (4)应用程序。用户自定义的应用程序,存放于文件系统之中。 在 Flash 存储器中,他们的 一般分布如下: (二)(二)U U- -BootBoot 主要目录结构主要目录结构 - board 目标板相关文件,主要包含 SDRAM、FLASH 驱动; - common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测; - cpu 与处理器相关的文件。如 mpc8xx 子目录下含串口、网口、LCD 驱动及中断初始化等 文件; - driver 通用设备驱动,如 CFI FLASH 驱动(目前对 INTEL FLASH 支持较好) - doc U-Boot 的说明文档; - examples 可在 U-Boot 下运行的示例程序;如 hello_world.c,timer.c; - include U-Boot 头文件;尤其 configs 子目录下与目标板相关的