2022年《嵌入式Linux系统开发标准教程》Bootloader .pdf

上传人:C****o 文档编号:32547227 上传时间:2022-08-09 格式:PDF 页数:37 大小:2.07MB
返回 下载 相关 举报
2022年《嵌入式Linux系统开发标准教程》Bootloader .pdf_第1页
第1页 / 共37页
2022年《嵌入式Linux系统开发标准教程》Bootloader .pdf_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《2022年《嵌入式Linux系统开发标准教程》Bootloader .pdf》由会员分享,可在线阅读,更多相关《2022年《嵌入式Linux系统开发标准教程》Bootloader .pdf(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、嵌入式学院华清远见旗下品牌:www.embedu.org嵌入式 Linux 系统开发标准教程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程第6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org第 6 章 Bootloader 本章目标本章介绍了Bootloader的概念和类型,重点讲解了U-Boot 的开发调试和使用。通过学习U-Boot 软件,可以使读

2、者充分理解Bootloader的工作原理和代码实现。Bootloader 概况U-Boot 使用技巧名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程 第 6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org6.1 Bootloader 对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux 系统同样离不开引导程序,这个引导程序就叫作

3、Bootloader。6.1.1 Bootloader 介绍Bootloader 是在 操作系统 运行之前执行 的一段小 程序。通过这 段小 程序, 我们 可以初始化硬 件设备 、建立内存空间 的映射表 ,从而建立适当 的系统软 硬件环境,为最终调用操作系统 内核做好 准备。对于嵌入式系统,Bootloader 是基 于特定硬 件平台来实现的。 因此 ,几乎 不可 能为所有 的嵌入式系统建立 一个通用的Bootloader ,不同的 处理器架构都有不同的Bootloader 。Bootloader 不但依赖 于 CPU 的体系结构 ,而且依赖 于嵌入式系统板级设备的配置 。对于 两块 不同的嵌

4、入式 板而言 ,即使它们 使用同一 种处 理器,要想让运行在 一 块板子 上的Bootloader 程序 也能运行在另一 块板子 上,一 般也都 需要 修改Bootloader 的源程序。反过来, 大部 分 Bootloader 仍然具有很多共性,某些 Bootloader 也能够支持多种体系结构 的嵌入式系统。例如,U-Boot 就同 时支持 PowerPC、ARM 、MIPS 和 X86等体系结构 ,支持 的板子有 上百种。通常,它们都能够 自动从 存储介质上启动, 都能够引导操作系统启动,并且大部 分都可以支持 串口 和以太网接口 。本章 将对各种 Bootloader 总结分类,分 析

5、它们 的共同特点。以 U-Boot 为例 ,详细讨论 Bootloader 的设计与实现。6.1.2 Bootloader 的启动Linux 系统 是通过 Bootloader 引导启动的。一上电,就要执行 Bootloader 来初始化系统。可以通过第4 章的 Linux 启动过程 框图回顾 一下。系统 加电或复位后 ,所有CPU 都会从某个地址 开始执行 ,这 是由处理器设 计决定的。 比如,X86 的复位向量 在高地址端 ,ARM 处理器在 复位时 从地址 0 x00000000取第一 条指令 。嵌入式系统的开发板都要把板上 ROM 或 Flash 映射 到这个 地址 。因此,必须把 B

6、ootloader 程序 存储在相应 的 Flash 位置。系统 加电后,CPU 将首先 执行它。主机和目标机 之间 一般有 串口 可以 连接,Bootloader 软件通 常会 通过串口 来输入输出 。例如:输出出错或 者执行结 果信息 到串口 终端,从串口 终端读取用户控制命令等。Bootloader 启动过程通 常是多 阶段的,这样 既能提供复杂 的功能,又有很好 的可移植 性。例如 :从 Flash 启动的 Bootloader 多数是两阶段的启动过程。从后面 U-Boot的内容可以详细 分 析这个 特性。大多 数 Bootloader 都包含 两种 不同的操作 模式:本 地加载模 式

7、和远程下 载模 式。这两种 操作 模式的 区别仅 对于开发 人员才 有意义 ,也就是不同启动 方式的使用。从 最终用户的角度看 , Bootloader 的作用就 是用来加载 操作系统, 而并不存在所 谓的本 地名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程第6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org加载模 式与远程下 载模 式的 区别 。因为

8、 Bootloader 的主要功能是 引导操作系统启动,所以我们详细讨论 一下 各种启动方式的 特点。1网络启动方式这种方式开发 板不需要 配置 较大的存储介质,跟无盘工作 站有点类 似。但是 使用这种启动 方式之前 , 需要 把 Bootloader 安装 到板上的 EPROM 或者 Flash 中。 Bootloader通过以 太网接口 远程下 载 Linux 内核映 像或者文件系统。第4 章介绍的 交叉 开发环境就是以网络启动 方 式建立 的。这 种方式对于嵌入式系统开发来说非常重要。使用这 种方式 也有前 提条 件,就是目标 板有串口 、 以太网接口或 者其他 连接方 式。串口 一般可

9、以作 为 控制 台,同时可以用来下 载内核 影像和 RAMDISK文件系统。 串口通信传输速率 过低, 不 适合用来挂接 NFS 文件系统。 所以以 太网接口 成为通用的 互连设备 ,一 般的开发 板都 可以 配置 10M 以太网接口 。对于 PDA 等手持设备 来说,以 太网 的 RJ-45 接口显得 大了些,而 USB 接口 ,特别是 USB 的迷你 接口 ,尺寸非 常小。对于开发的嵌入式系统,可以把 USB 接口虚拟成以太网接口 来通 信。这 种方式在开发主机和开发 板两端都需要 驱动程序。另外,还要在 服务 器上配置 启动相关网络服务 。Bootloader 下载文件一般都 使用TFT

10、P 网络协议 ,还可以通过DHCP 的方式动 态配置 IP 地址 。DHCP/BOOTP 服务 为 Bootloader 分配 IP 地址,配置 网络参数,然后才能够支持网络传 输功能。如 果 Bootloader 可以 直接设置网络参 数,就可以不使用DHCP。TFTP 服务 为 Bootloader 客户端提供 文件下 载功能,把内核映 像和其他文 件放在/tftpboot 目录下。 这样 Bootloader 可以通过 简单的 TFTP 协议 远程下 载内核映 像到内存。如图 6.1 所示。HOSTTARGET以太网连接NFSBIOSBOOTPTFTP启动 内核内核映 像目标 板文件系统

11、图 6.1 网络启动 示意图大部 分引导程序 都能够支持 网络启动 方式。例如 : BIOS 的 PXE (Preboot Execution Environment ) 功能就是网络启动 方式;U-Boot 也支持 网络启动功能。2磁盘启动方式传统的 Linux 系统 运行在台 式机 或者服务 器上,这 些计算机一 般都 使用 BIOS 引导, 并且使用 磁盘 作为存 储介质。如果进入 BIOS 设置菜单 ,可以 探测处理器、内存 、硬盘等设备 ,可以 设置 BIOS 从软盘、光盘 或者某块硬 盘启动。 也就是说, BIOS 并不直接引导操作系统。 那么 在硬 盘的主引导区,还需要一个Boo

12、tloader。这个 Bootloader名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程 第 6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org可以从 磁盘文 件系统 中把操作系统引导 起来。Linux 传统上 是通过 LILO (LInux LOader)引导的, 后来又出现了 GNU 的软件GRUB( GRand Unified Bootloade

13、r ) 。这两种 Bootloader 广泛 应用在 X86 的 Linux 系统上。 你的开发 主机可 能就使用了 其中 一种,熟悉 它们有 助于配置多种 系统引导 功能。LILO 软件工程 是由 Werner Almesberger 创建,专门 为引导 Linux 开发的, 最新版本下 载站点:http:/lilo.go.dyndns.org 。LILO 有详细 的文档 ,例如 LILO 套件中附带 使用手册 和参考手册 。此外,还可以 在 LDP 的“LILO mini-HOWTO ”中找 到 LILO 的使用 指南。GRUB 是 GNU 计划的 主要 bootloader。 GRUB

14、最初是 由 Erich Boleyn 为 GNU Mach操作系统 撰写 的引导程序。后来有 Gordon Matzigkeit和 Okuji Yoshinori接替 Erich 的工作, 继续维护 和开发 GRUB。GRUB 的网站 http:/www.gnu.org/software/grub/ 上有对套件使用的说 明文 件,叫作 GRUB manual 。GRUB 能够 使用 TFTP 和 BOOTP 或者DHCP 通过 网络启动,这 种功能对于系统开发过程很有 用。除了传统的 Linux 系统上的引导程序以外,还有其他一些引导程序, 也可以 支持磁盘 引导启动。 例如 :LoadLin

15、 可以从 DOS 下启动 Linux ;还有 ROLO 、LinuxBIOS ,U-Boot 也支持 这种功能。3 Flash 启动方式大多 数嵌入式系统上 都使用 Flash 存储介质。Flash 有很多 类型,包括 NOR Flash、NAND Flash 和其他半 导体 盘。其中 ,NOR Flash(也就是线性 Flash)使用 最为 普遍。NOR Flash 可以 支持 随机访问, 所以代码 是可以 直接在 Flash 上执行的。 Bootloader一般是存 储在 Flash 芯片 上的。 另外, Linux 内核映 像和 Ramdisk 也可以 存储在 Flash上。通常需要 把

16、 Flash 分区 使用,每个区的大小 应该是 Flash 擦除块大小 的整数倍。图6.2 是 Bootloader 和内核映 像以及文件系统的分 区表。内核映像Bootloader文件系统参数图 6.2 Flash存储示意图Bootloader 一般 放在 Flash 的底端或 者顶端,这要 根据 处理器的复位向量 设置 。要使 Bootloader 的入 口位 于处理器上电执行 第一条指令 的位置。接下来分 配参 数区 ,这 里可以作 为 Bootloader 的参数保存区域。再下来 内核映 像区。Bootloader 引导 Linux 内核 ,就 是要从这个 地方把 内核映 像解压到 R

17、AM 中去, 然后跳转 到内核映 像入口执行。然后是文件系统 区。如果使用 Ramdisk 文件系统, 则需要 Bootloader 把它解压到RAM 中 。如果使用 JFFS2 文件系统, 将直接挂接为根文件系统。这 两种文件系统 将在第 12 章详细 讲解。最后还可以分 出一些数据区,这要 根据实际需要和 Flash 大小来考虑了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程第6 章

18、、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org这些分区是开发者 定义的,Bootloader 一般直接读写对应的偏移地址 。到了 Linux内核空间 ,可以 配置 成 MTD 设备 来访问 Flash 分区。但是 ,有的 Bootloader 也支持 分区 的功能,例如 : Redboot 可以创建 Flash 分区表,并且内核MTD 驱动可以解 析出Redboot 的分 区表。除了 NOR Flash,还有 NAND Flash 、Compact Flash、DiskOnChip 等。这些 Flash具有 芯片价格 低, 存储容量 大的特点。但是 这些芯片

19、一般通过 专用控制 器的 I/O 方式来 访问 ,不 能随机 访问 ,因此 引导 方式跟 NOR Flash 也不同。 在这 些芯片 上,需要 配置 专用的引导程序。通常,这 种引导程序 起始的一 段代码就 把整个引导程序复制 到RAM 中运行 ,从 而实现 自 举启动,这 跟从磁盘 上启动 有些 相似。6.1.3 Bootloader 的种类嵌入式系统 世界已经 有各种各样的 Bootloader,种类划分也有多种 方式。 除了按照 处理器体 系结构 不同 划分以外,还有功能复杂 程度的不同。首先区 分一下 “Bootloader”和“Monitor ”的概念。 严格 来说, “Bootlo

20、ader”只是 引导 设备 并且执行 主程序的 固件;而“Monitor ”还提供了更多的 命令 行接口 ,可以进 行调试、读 写内存 、烧写 Flash、配置环境 变量等。 “Monitor ”在 嵌入式系统开发过程 中可以 提供很好 的调试 功能,开发 完成以后,就 完全设置 成了一个 “Bootloader” 。所 以,习 惯上大家 把它们 统称为 Bootloader。表 6.1 列出了 Linux 的开 放源码引导程序 及其支持的体系结构 。表中给出了 X86 ARM PowerPC 体 系 结构 的 常用引导程序,并且 注 明 了每一 种 引导程序是不是“Monitor ” 。表

21、6.1开放源码的Linux 引导程序Bootloader Monitor 描述x86 ARM PowerPCLILO 否Linux 磁盘 引导程序是否否续表Bootloader Monitor 描述x86 ARM PowerPCGRUB 否GNU 的 LILO 替代程序是否否Loadlin 否从 DOS 引导 Linux 是否否ROLO 否从 ROM 引导 Linux 而不需要 BIOS 是否否Etherboot 否通过以 太网卡启动 Linux 系统的 固件是否否LinuxBIOS 否完全替 代 BUIS 的 Linux 引导程序是否否BLOB 否LART 等硬件平台 的引导程序否是否U-b

22、oot 是通用引导程序是是是RedBoot 是基于 eCos 的引导程序是是是对于 每种体 系 结构 ,都有 一系 列开放源码 Bootloader 可以选用。(1)X86。X86 的工作 站 和服务 器上一 般使用 LILO 和 GRUB 。 LILO 是 Linux 发行版主流的Bootloader 。不过 Red Hat Linux 发行版已经 使用了 GRUB,GRUB 比 LILO 有更有好名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 37 页 - - - -

23、 - - - - - 嵌入式 Linux 系统开发标准教程 第 6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org的显示 界面,使用 配置也 更加灵活 方便。在某些 X86 嵌入式 单板 机或者特殊设备 上, 会采用其他 Bootloader, 例如 : ROLO 。这些 Bootloader 可以 取代 BIOS 的功能,能够 从 Flash 中直 接引导 Linux 启动。现 在ROLO 支持 的开发 板已经 并入 U-Boot,所以 U-Boot 也可以 支持 X86 平台。(2)ARM 。ARM 处理器的芯片商 很多,所以每种芯片的开发 板都有 自

24、己的 Bootloader 。结果ARM bootloader 也 变得多种多 样。最早有为 ARM720 处理器的开发 板的固件,又有了armboot,StrongARM平台 的 blob,还有 S3C2410 处理器开发 板上的 vivi 等。现 在armboot 已经 并入了 U-Boot ,所以 U-Boot 也支持 ARM/XSCALE平台 。U-Boot 已经成为 ARM 平台 事实上的标准Bootloader。(3)PowerPC。PowerPC 平台 的处理器有 标准的Bootloader,就 是 ppcboot。PPCBOOT 在合并armboot 等 之后,创建了 U-Bo

25、ot ,成为各种体 系结构 开发 板的通用引导程序。U-Boot仍然是 PowerPC 平台 的主要 Bootloader。(4)MIPS。MIPS 公司 开发的 YAMON 是标准的 Bootloader, 也有许多 MIPS 芯片商 为自己的开发 板写了 Bootloader。现 在,U-Boot 也已经 支持 MIPS 平台 。(5)SH。SH 平台 的标准 Bootloader 是 sh-boot。Redboot 在这种平台 上也很好 用。(6)M68K 。M68K 平台 没 有标准的 Bootloader。Redboot 能够支持m68k 系列的系统。值得说明的是 Redboot,它

26、几乎能够支持所有的体系结构 , 包括 MIPS、 SH、M68K等体系结构 。Redboot 是以 eCos为基 础,采用 GPL 许可的开 源软件工程。 现在由 core eCos的开发 人员 维护 ,源码下 载网 站是 http:/ 。Redboot的文档 也相当完善 ,有详细 的使用 手册RedBoot User s Guide 。6.2 U-Boot 编程U-Boot 作 为通用的 Bootloader ,U-Boot 可以 方便地移植 到其他 硬件平台 上,其源代码 也值得开发者 们研究 学习。6.2.1 U-Boot 工程简介最 早 , DENX软件工程中 心的Wolfgang D

27、enk 基于 8xxrom的 源 码创建 了PPCBOOT 工程, 并且 不断添 加处理器的支持。后来, Sysgo Gmbh 把 ppcboot 移植 到ARM 平台 上, 创建了 ARMboot 工程。 然后以 ppcboot 工程和 armboot 工程为基 础,创建了 U-Boot 工程。现在 U-Boot 已经 能够支持PowerPC、ARM 、X86、MIPS 体系结构 的上 百种开发板,已经 成为功能最多 、灵活性最 强并且开发 最积极的开 放源码 Bootloader。目 前仍名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

28、- - - 名师精心整理 - - - - - - - 第 7 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程第6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org然 由 DENX 的 Wolfgang Denk 维护 。U-Boot 的源码包可以从 sourceforge 网站下载,还可以 订阅该 网站活跃 的 U-Boot Users 邮件论坛,这个 邮件 论坛对于 U-Boot 的开发和使用 都很有 帮助。U-Boot 软件 包下载网 站 :http:/ 。U-Boot 邮 件列表网站: http:/ 相关 的

29、网站:http:/www.denx.de/re/DPLG.html 。6.2.2 U-Boot 源码结构从网站上下 载 得到 U-Boot 源码包,例如 :U-Boot-1.1.2.tar.bz2 解压就可以 得 到全部 U-Boot 源程序。 在顶层目录下有 18 个子目录,分别存放和管 理不同的 源程序。这 些目录中 所要存放的文件有其规则 ,可以分 为 3 类。n第 1 类目 录与处理器体 系结构或者开发 板硬 件直接相关;n第 2 类目 录是一些通用的 函数或者驱动程序 ;n第 3 类目 录是 U-Boot 的应用程序、工 具或者文档 。表 6.2 列出了 U-Boot 顶层 目录下各

30、级目录存放原则。表 6.2 U-Boot 的源码顶层目录说明目录特性解 释 说 明board 平台依赖存放电路板相关 的目 录文 件, 例如 :RPXlite(mpc8xx) 、smdk2410(arm920t)sc520_cdp(x86) 等目录cpu 平台依赖存放 CPU 相关的目 录文 件,例如 :mpc8xx、 ppc4xx、arm720t、arm920t、 xscalei386 等目录lib_ppc 平台依赖存放对 PowerPC 体系结构 通用的 文件, 主要用于实现PowerPC 平台 通用的 函数lib_arm 平台依赖存放对 ARM 体系结构 通用的 文件, 主要用于实现AR

31、M 平台 通用的 函数lib_i386 平台依赖存放对 X86 体系结构 通用的 文件, 主要用于实现X86 平台 通用的 函数include 通用头文件和开发 板配置 文件, 所有 开发 板的配置 文件都在 configs 目录下续表目录特性解 释 说 明common 通用通用的 多功能函数实现lib_generic 通用通用 库函 数的实现Net 通用存放网络的程序Fs 通用存放文 件系统的程序Post 通用存放上电 自检程序drivers 通用通用的 设备 驱动程序, 主要有以太网接口 的驱动Disk 通用硬盘接口 程序Rtc 通用RTC 的驱动程序Dtt 通用数字温 度测量器或者传感器

32、的驱动examples 应用例程一些独立运行 的应用程序的 例子 ,例如 helloworld 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程 第 6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.orgtools 工具存放制作 S-Record 或者 U-Boot 格式的 映像等工具,例如 mkimage Doc 文档开发使用 文档U-Boot 的 源代码

33、 包含 对 几十种处理器、数百 种开发 板的支持 。可是对于特定 的开发板,配置 编译过程 只需要 其中部分程序。 这里具体以 S3C2410 arm920t 处理器为例 ,具体 分析 S3C2410 处理器和开发 板所依赖 的程序,以 及 U-Boot 的通用 函数和工具。6.2.3 U-Boot 的编译U-Boot 的 源码是通过 GCC 和 Makefile 组织 编译的。顶层 目录下的 Makefile 首先可以 设置 开发 板的 定义,然后递归 地调用各级子 目录下的 Makefile ,最后把 编译过的程序 链接成 U-Boot 映像。1顶层目录下的Makefile 它负责 U-B

34、oot 整体配置 编译。按照 配置的顺序阅读其中关 键的几行 。每一种开发 板在 Makefile 都需要 有板子配置 的定义。例如 smdk2410 开发 板的定义如下。smdk2410_config : unconfig ./mkconfig $(:_config=) arm arm920t smdk2410 NULL s3c24x0 执行配置U-Boot的 命令make smdk2410_config ,通过 ./mkconfig脚本生 成include/config. mk 的配置 文件。 文件内容 正是根据 Makefile 对开发 板的配置 生成的。ARCH = arm CPU =

35、 arm920t BOARD = smdk2410 SOC = s3c24x0 上面的 include/config.mk文件定义了 ARCH 、CPU、BOARD 、SOC 这些变量。这样 硬件平台依赖 的目 录文 件可以 根据这些定 义来确定。SMDK2410 平台相关目录如下。board/smdk2410/ cpu/arm920t/ cpu/arm920t/s3c24x0/ lib_arm/ include/asm-arm/ include/configs/smdk2410.h 再回到顶层 目 录的 Makefile 文件开始的部分,其中下列几行包含 了这些变量的定义。# load AR

36、CH, BOARD, and CPU configuration 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程第6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.orginclude include/config.mk export ARCH CPU BOARD VENDOR SOC Makefile 的编 译选项和规则 在顶层目录的 config.mk

37、文件中定义。各种体 系结构通用的 规则 直接在 这个 文件中定义。通过 ARCH 、CPU、BOARD 、SOC 等变量为不同 硬 件 平台定义 不同 选 项 。不同 体 系 结 构 的 规 则 分 别包含 在 ppc_config.mk 、arm_config.mk 、 mips_config.mk 等文件中。顶层 目录的 Makefile 中还 要定义交叉 编译器,以 及编译 U-Boot 所依赖 的目标 文件。ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- / 交叉编译器的前缀#endif export CROSS_COMPILE # U-Bo

38、ot objects.order is important (i.e. start must be first) OBJS = cpu/$(CPU)/start.o / 处理器相关的目标文件LIBS = lib_generic/libgeneric.a / 定义依赖的目录, 每个目录下先把目标文件连接成*.a文件LIBS += board/$(BOARDDIR)/lib$(BOARD).a LIBS += cpu/$(CPU)/lib$(CPU).a ifdef SOC LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a endif LIBS += lib_$(ARCH

39、)/lib$(ARCH).a 然后还有 U-Boot 映像 编译的依赖 关系。ALL = u-boot.srec u-boot.bin System.map all: $(ALL) u-boot.srec: u-boot $(OBJCOPY) $OBJCFLAGS -O srec $ $ u-boot.bin: u-boot $(OBJCOPY) $OBJCFLAGS -O binary $ $ u-boot: depend $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT) UNDEF_SYM=$(OBJDUMP) -x $(LIBS) |sed -n -e s/.

40、*(_u_boot_cmd_.*)/-u1/p|sort|uniq; $(LD) $(LDFLAGS) $UNDEF_SYM $(OBJS) -start-group $(LIBS) $(PLATFORM_LIBS) -end-group -Map u-boot.map -o u-boot 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程 第 6 章、 Bootloader 嵌入式学院华清

41、远见旗下品牌:www.embedu.orgMakefile缺省 的 编译 目标 为 all ,包 括 u-boot.srec、u-boot.bin 、System.map。u-boot.srec 和 u-boot.bin 又依赖 于 U-Boot 。 U-Boot 就是通过 ld 命令按照 u-boot.map 地址表把目标文件组 装成 u-boot。其他 Makefile内 容 就不 再详细 分析了,上 述代码分 析应 该可以 为 阅读代码 提供 了一个 线索 。2开发板配置头文件除了编译过程 Makefile 以外,还要在程序 中为开发 板定义配置 选项或者参数。这个头文件是 includ

42、e/configs/ .h。 用相应 的 BOARD 定义代替。这个 头文件中 主要定义了两类变量。一类 是选项, 前缀是 CONFIG_ ,用来 选择处理器、设备 接口 、命令 、属性等。例如 :#define CONFIG_ARM920T 1 #define CONFIG_DRIVER_CS8900 1 另一类 是参数,前缀是 CFG_,用来定义总线频率、串口 波特率、Flash地址等 参数。例如 :#define CFG_FLASH_BASE 0 x00000000 #define CFG_PROMPT = 3编译结果根据 对 Makefile 的分 析, 编译分为 2步。 第 1 步配

43、置 , 例如: make smdk2410_config ;第 2 步编译,执行 make 就可以了。编译完成后,可以 得到 U-Boot 各种格式的 映像文件和 符号 表,如表 6.3 所示。表 6.3 U-Boot 编译生成的映像文件文 件 名 称说明文 件 名 称说明System.map U-Boot 映像的符号 表u-boot.bin U-Boot 映像原始的二进制格式u-boot U-Boot 映像的 ELF 格式u-boot.srec U-Boot 映像的 S-Record 格式U-Boot 的 3 种映 像格式 都可以烧写到 Flash中,但需要 看加载 器能 否识别这些格式。一

44、 般 u-boot.bin 最为 常用,直接按照 二进制格式下载,并且按照 绝对地址 烧写到Flash 中就可以了。 U-Boot 和 u-boot.srec 格式映像都自带定位信息 。4 U-Boot 工具在 tools 目录下还有些 U-Boot 的工 具。这些工具有 的也经常用到。 表 6.4 说明了名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程第6 章、 Bootloader 嵌

45、入式学院华清远见旗下品牌:www.embedu.org几种 工具的用 途。表 6.4 U-Boot 的工具工 具 名 称说明工 具 名 称说明bmp_logo 制作标 记的 位图结构体img2srec 转换 SREC 格式映像envcrc 校验 u-boot 内部 嵌入的 环境 变量mkimage 转换 U-Boot 格式映像gen_eth_addr 生成以太网接口 MAC 地址updater U-Boot 自动更新升级工具这些工具都有源 代码,可以参考 改写其他 工具。其中 mkimage 是很 常用的一个工具,Linux 内核映 像和 Ramdisk 文件系统 映像都可以 转换成 U-Bo

46、ot 的格式。6.2.4 U-Boot 的移植U-Boot能够支持多种体系结构 的 处理器,支持 的开发 板也 越来 越多。因为Bootloader 是完全 依赖硬 件平台 的,所以在新电路板上需要 移植 U-Boot 程序。开始移植 U-Boot 之前 ,先要熟悉硬件电 路板和处理器。确认 U-Boot 是否已经 支持新开发 板的处理 器和 I/O 设备。假如 U-Boot 已经 支持 一块非常相 似的电 路板,那么移植 的过程 将非常 简单 。移植 U-Boot 工作就 是 添加开发板硬 件相关的文件、 配置 选项,然后配置编译。开始移植 之前 ,需要 先分析一下 U-Boot 已经支持

47、的开发 板,比较出 硬件配置最接近的开发 板。选 择的原 则是,首先 处理器相同, 其次处理器体系结构 相同,然后是以太网接口等 外围 接口 。还要验证一下这个 参考 开发 板的 U-Boot , 至少 能够配置 编译通过。以 S3C2410 处理器的开发 板为例 , U-Boot-1.1.2 版本已经 支持 SMDK2410 开发板。我们 可以 基于 SMDK2410 移植,那么 先把 SMDK2410 编译通过。我们 以 S3C2410 开发 板 fs2410 为例 说明。移植的过程 参考 SMDK2410 开发 板,SMDK2410 在 U-Boot-1.1.2 中已经 支持 。移植 U

48、-Boot 的基本步骤 如下。(1)在顶层 Makefile 中为开发 板添加新的配置选项,使用 已有的配置 项目为例 。smdk2410_config : unconfig ./mkconfig $(:_config=) arm arm920t smdk2410 NULL s3c24x0 参考 上面 2行 ,添加下面 2 行。fs2410_config : unconfig ./mkconfig $(:_config=) arm arm920t fs2410 NULL s3c24x0 (2)创 建一个 新目录存放开发 板相关的代码, 并且添加文件。board/fs2410/config.mk

49、 board/fs2410/flash.c board/fs2410/fs2410.c board/fs2410/Makefile board/fs2410/memsetup.S board/fs2410/u-boot.lds 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 37 页 - - - - - - - - - 嵌入式 Linux 系统开发标准教程 第 6 章、 Bootloader 嵌入式学院华清远见旗下品牌:www.embedu.org(3)为开发 板 添加

50、新的配置 文件。可以 先复制 参考 开发 板的配置 文件, 再修改 。例如:$cp include/configs/smdk2410.h include/configs/fs2410.h 如果是为 一颗 新的 CPU 移植,还要创建一个 新的目 录存放 CPU 相关的代码。(4)配置 开发 板。$ make fs2410_config (5)编译 U-Boot。执行 make 命令 ,编译 成功可以得到 U-Boot 映像。有些 错误是跟配置选项是有 关系的,通 常打开某些 功能选项会带来一些错误,一开 始可以 尽量跟 参考 板配置 相同。(6)添加驱动 或者功能选项。在能够 编译通过的 基础

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁