Bootloader就是启动加载程序的意思

上传人:平*** 文档编号:18273265 上传时间:2017-11-16 格式:DOC 页数:6 大小:42.10KB
返回 下载 相关 举报
Bootloader就是启动加载程序的意思_第1页
第1页 / 共6页
Bootloader就是启动加载程序的意思_第2页
第2页 / 共6页
Bootloader就是启动加载程序的意思_第3页
第3页 / 共6页
Bootloader就是启动加载程序的意思_第4页
第4页 / 共6页
Bootloader就是启动加载程序的意思_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《Bootloader就是启动加载程序的意思》由会员分享,可在线阅读,更多相关《Bootloader就是启动加载程序的意思(6页珍藏版)》请在金锄头文库上搜索。

1、Bootloader 就是启动加载程序的意思,uClinux 启动离不开引导程序。Bootloader 是在操作系统运行之前执行的一段自举程序。通过这段小程序,用以初始化硬件设备、改变处理器运行模式、重组中断向量表和建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。U-Boot 全称 Das U-Boot-universal bootloader,是由 DENX SoftwareEngineering 的 Wolfgang Denk 维护一种通用的 Bootloader。U-Boot 被认为是功能最多、最具弹性以及开发最积极的开放源码 bootloader,可

2、以方便地移植到各种硬件平台上。Blackfin uClinux 网站上提供了 U-Boot 在 Blackfin 上的移植。(http:/blackfin.uclinux.org/gf/project/u-boot/)。笔者从其网站上下载了 u-boot-1.1.6-2008R1.5.tar.bz2 的源码,并将其复制到/home/uclinux/bootldr 目录,使用 TAR 命令将其解压到 u-boot-1.1.6-2008R1.5 文件夹(下文简称 u-boot-1.1.6)。在开始移植前请参考 Blackfin Linux Docs 章节的 bootloader 部分。该手册介绍的

3、针对 Blackfin 移植的一般步骤。为了对硬件底层寄存器进行设置,还需要参考 Blackfin 的 Hardware Reference Manual(可在 ADI 公司网站下载,笔者下载的是 3.4 版本,下文引用页码以这个版本为准)。针对特定版本的 U-Boot,Readme 文档也许是最好的参考资料,它位于 u-boot 源码文件夹下。U-Boot的官方网站也提供非常详尽的文档资料(http:/www.denx.de/wiki/U-Boot/Documentation)。U-Boot 代码一般分为 stage1 和 stage2 两大部分、stage1 依赖于 CPU 体系结构如设备

4、初始化代码,常用汇编语言编写已达到短小精悍,提高系统运行效率的目的。它主要包括在 u-boot-1.1.6/cpu/blackfin 文件夹中的 Start.s 和 Start1.s 文件。Stage1 的入口函数从 Start.s 开始,通常开始包含以下步骤:(1) 基本硬件初始化,为随后执行 kernel 准备好基本的硬件环境。包括:屏蔽所有中断,引导装载程序的执行过程中不必执行任何中断,中断屏蔽可通过写 cpu 的终端屏蔽寄存器或状态寄存器实现;设置 CPU 速度和时钟频率,初始化 pll;RAM 初始化,初始化内存控制器的各个寄存器;初始化 UART,向串口打印 U-Boot 的字符信

5、息;关闭 cpu 内部指令,数据 cache。(2) 为加载 U-Boot 的 stage2 准备 RAM 空间,通常 stage2 置于整个 RAM 空间的最顶层 1MB 空间。(3) 拷贝 U-Boot 的 stage2 到 RAM。判断是否是 FLASH 运行,如果是就将 stage2 的代码拷贝至 TEXT BASE 处。将 stage2 安排到 RAM 空间的最顶层 1MB 是推荐的方法。(4) 设置堆栈指针 sp,为 C 语言代码执行做好准备。(5) 跳转至 cpu_init_f(在 cpu.c 文件中)的 C 语言代码入口点。此阶段的程序流程图如下:“在 start.s 的最后,

6、CPU 初始化已经完成,需要进入第二阶段的执行。它会将_cpu_init_f 函数指针写入到 INT15 的向量表中,然后用 raise 15 进入下一阶段的运行,这是因为 CPU 复位之后处于 RESET 中断的状态,这是优先级很高的一个中断,在这种情况下,虽然可以对 CPU 进行完全的操作(Supervisor mode),但是却无法响应其它的中断请求。因此 start.s 将自身跳到中断 15 再运行,这样同时可以响应其它的中断,CPU 也仍然处在 Supervisor mode,可以进行完整的控制。”Stage2 主要包括 lib-Blackfin/board.c 和 cpu.c 中

7、cpu_init_f、board_init_f 函数以及 common/main.c 中的 main_loop 函数。按照初始化顺序如下:(1) 初始化中断、串口、RTC、定时器等(2) 初始化 Flash。(3) 初始化用以动态分配 heap 的内存(4) 初始化 SPI、NAND FLASH。(5) 初始化 MAC Address、IP Address(6) 设备初始化。(7) 进入 mainloop() 函数循环。主要设备初始化完成后,需要启动控制台,即命令行模式。由 mainloop()函数解析输入命令、执行命令、输出信息。在默认情况下,mainloop()会等待 bootcmd 环境

8、变量说设定的自动运行的命令(比如 setenv bootcmd bootm 0x2000 0000),引导 flash 特定地址中的嵌入式操作系统。移植过程中需要修改或创建下列文件或目录。顶层 Makefile、MAKEALL 和 MAINTAINERS 文件目标板配置文件:include/config/mybf532.h目标板目录:boards/mybf532/1.顶层编译文件Makefile在顶层 Makefile 中添加你的板子,找到 Blackfin 设置,一般在设置文件结尾,仿照原有设置添加你的目标板设置,笔者将自己的目标板称作 mybf532,设置如下:mybf532_config

9、 : unconfig$(MKCONFIG) $(:_config=) blackfin bf533 mybf5322.电路板设置文件将当前目录定位至 U-Boot 源码文件夹下的 include/configs 目录cd include/configs将 bf533-stamp.h 设置文件作为模板,复制一份为 mybf532.h(文件名与你板的名称相同)cp bf533-stamp.h mybf532.h修改 mybf532.h 中设置。将其中的_CONFIG_BF533_STAMP_H_改成_CONFIG_MYBF532_H_。添加宏定义#define CONFIG_MYBF532 1根

10、据你板上时钟频率修改 CONFIG_CLKIN_HZ,笔者板上使用 27MHz 有源晶振,设置如下:#define CONFIG_CLKIN_HZ 27000000设置 PLL 倍频因子,CCLK_DIV 系统时钟分频因子、SCLK_DIV 总线分频因子。笔者设置如下:#define CONFIG_VCO_MULT 12/* CONFIG_CCLK_DIV controls what the core clock divider is */* Values can be 1, 2, 4, or 8 ONLY */#define CONFIG_CCLK_DIV 1/* CONFIG_SCLK_D

11、IV controls what the peripheral clock divider is */* Values can range from 1-15 */#define CONFIG_SCLK_DIV 7对应的 PLL 频率 27MHz*12 = 324MHz, 内核频率 324/1 = 324MHz, 外部总线频率 324/7 = 46MHz进行网络设置:网卡 IP 地址、子网掩码、网关 IP、服务器 IP(SERVERIP 即你主机的 IP 地址)、目标板 HOSTNAME、ROOTPATH#define CONFIG_IPADDR 10.21.11.67#define CONF

12、IG_NETMASK 255.255.255.0#define CONFIG_GATEWAYIP 10.21.11.254#define CONFIG_SERVERIP 10.21.11.65#define CONFIG_HOSTNAME HHBF532#define CONFIG_ROOTPATH /bf1/rootfs以上是笔者的设置。由于 BF1 有两块网卡而笔者开发板只有一块,将#define CONFIG_NET_MULTI 的值改为 0(即只有一块网卡)。SDRAM 设置:SIZE(SDRAM 的大小 MBYTE 为单位)、ADD_WITH(地址线宽度)、CFG_MENTSET_S

13、TART(存储器测试开始地址)、CFG_MEMTEST_END(存储器测试结束地址)、CFG_LOAD_ADDR(缺省内核加载地址)、CGF_SDRAM_BASE(SDRAM起始地址)、CFG_MAX_RAM_SIZE(SDRAM 最高地址)。笔者设置如下:#define CONFIG_MEM_SIZE 32#define CONFIG_MEM_ADD_WDTH 9#define CONFIG_MEM_MT48LC16M16A2TG_7E 1#define CFG_MEMTEST_START 0x00000000#define CFG_MEMTEST_END 0x01EFFFFF#define

14、 CFG_LOAD_ADDR 0x01000000#define CFG_SDRAM_BASE 0x00000000#define CFG_MAX_RAM_SIZE 0x02000000修改监视程序提示符:CFG_PROMPT 修改网卡物理地址使其与你的板子相符:#define CONFIG_DM9000_BASE 0x20300000修改网卡 IO、DATA(状态控制寄存器)地址:#define DM9000_IO CONFIG_DM9000_BASE#define CONFIG_DM9000_IO 0x20300000#define DM9000_DATA (CONFIG_DM9000_B

15、ASE+4)、修改 FLASH 的基地址,为了从 NOR FLASH 引导,该地址必须从 0x2000 0000 开始(也就是 NOR FLASH 从 Bank0 开始编址)。#define CFG_FLASH_BASE 0x20000000修改 FLASH 的 Sector(扇区),参见相关 FLASH 的 datasheet。#define CFG_MAX_FLASH_SECT 35设置环境变量(U-Boot 中的 ENV 变量)在 FLASH 中存放地址,必须以一个 Sector 的起始地址开始:#define CFG_ENV_ADDR 0x201f0000设置环境变量大小及存放环境变量

16、的 Sector 空间大小:#define CFG_ENV_SIZE 0x10000#define CFG_ENV_SECT_SIZE 0x10000设置软件 I2C 管脚,根据你的目标板而定:#define PF_SCL PF9#define PF_SDA PF83.电路板设置目录将当前目录切换至 U-boot 源代码目录下 board 子目录,拷贝 bf533-stamp 目录为 mybf532。将 mybf532 中以 bf533-stamp.c 开始的文件改名为 mybf532。修改 mybf532.c 文件。将包含头文件#include “bf1.h”该成 include “mybf532.h”。修改相应 printf()函数输出信息。移植 DM9000A 驱动程序,移植 BF537 NAND 驱动。设置工作结束,依次执行make cleanmake mybf532_configmake命令完成编译。如果编译不出错,会在 u-boot 源码目录下生成上面提到的 7 个以 u-boot 开头的文件。如果错误根据提示,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号