【朱兆祺带你学嵌入式】第二章第一节 U-Boot-2013.04分析与移植之BootLoader概述
[复制链接]
朱兆祺从本节开始,就带领大家进入U-Boot-2013.04的移植,这是2013年4月份发布的U-Boot源码,是U-Boot版本中的重要分水岭。从本节开始,如果大家要跟随我的步伐,那就得准备好一块OK6410开发板,因为我讲解嵌入式Linux的学习是以OK6410为载体进行的。 从最终用户的角度看,BootLoader(即启动代码)是处理器复位后进入操作系统之前执行的一段代码,用以完成由硬件启动到操作系统启动的过渡,为操作系统的运行提供基本的环境,如关闭看门狗、初始化时钟和配置存储器等。启动代码的最终目的是引导操作系统的启动,但从开发人员的角度看,为了开发和调试的方便,还会增加串口控制、以太网络等功能。 嵌入式系统与应用密切结合,它具有很强的专用性。实际系统的 需求往往千差万别,BootLoader代码与CPU的类型、应用系统的配置及使用的操作系统等因素密切相关,这就注定了不可能有完全通用的BootLoader,实际运用时必须根据具体情况对启动代码进行移植。 表2. 1开发板配置 类别
| 型号 | 规格 | CPU | S3C6410 | - | NAND Flash | K9GAG08U0D | 2G | DRAM | K4X1G163PC | 128M*2 | Ethernet | DM9000A | - | LCD | WXCAT43 | 4.3寸 |
| 本文所写的内容都是基于表2. 1所示配置的单板(board):NAND芯片K9GAG08U0D共4096块,每块的包含128页,每页由4096字节的数据区和218字节的空闲区组成。两片64 M×16 bit的Mobile DDR芯片K4X1G163PC,组合构成共256 MB的内存。尽管每个人持有的单板配置各异,但分析、移植的原理相通。
U-Boot,全称为Universal Boot Loader(通用bootloader),是遵循GPL条款的开放源码项目。由德国DENX小组开发和维护的,其高超的技术使得U-Boot能够非常容易地被移植到多种嵌入式CPU中,支持多种 嵌入式操作系统内核的引导。不少U-Boot源码就是linux内核源码的简化,特别是一些设备的驱动程序,使得它在引导Linux Kernel方面尤为出色。本文选用当前最新版本的U-Boot,结合S3C6410处理器自身的特点,分析和探讨它的移植要点。笔者认为移植工作必须在充分理解源码的组织方式、处理器特点、单板外围器件原理等基础上进行。充分利用源码已经实现的功能,最小限度地破坏源码的结构。
|