U-Boot在基于BF561的嵌入式Linux系统上的移植
1 引言
嵌入式Linux系统常用的Boot Loader有arm-boot、redboot、U-Boot等。U-Boot (全称Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持多种引导方式;具有功能强大且成熟、稳定等诸多优点。在嵌入式系统开发过程中广泛采用。U-Boot严重依赖于底层硬件,不同的CPU或嵌入式板及设备需要不同的U-Boot,因此,在嵌入式系统中建立通用的U-Boot是非常困难的,故U-Boot需针对开发版本量身定做。
2 开发平台
系统的开发板硬件系统如图1所示。
图1 BF561开发板
目标板以Blackfin嵌入式处理器BF561为核心,数据地址线复用到SDRAM、 Flash、USB、Ethernet,并通过FPGA实现逻辑控制。此外,将UART端口转换为RS232端口引出。其中SDRAM的地址为 0x00000000~0x02000000,Flash的地址为0x20000000~0x20300000。宿主机采用Window和 Suse10.0双操作系统,采用串行接口和以太网连接宿主机和目标板,程序先在宿主机上编译,然后下载至目标板上运行,目标板的终端被重定向到串行接口,由宿主机输出。
开发环境的建立步骤如下:
⑴在宿主机上设置终端:大部分嵌入式系统在宿主机上大多都采用kermit或minaicom实现与目标板的通信,本系统采用inicom。minicom是Linux下一个类似于Windows超级终端的友好串口通信程序。在终端输入 bash#minicom-s进入minicom设置画面,设置串口波特率、有效数据位、停止位以及奇偶校验位分别为57600、8 bit、1位停止位以及无奇偶校验位等。
⑵安装交叉编译器:交叉编译是在一个架构下编译另外一个架构的目标文件。要从http://blackfin.uclinux.org网站上下载Blackfin ToolChain,然后安装并修改环境变量PATH,使其包含ToolChain的安装目录。
bash# rpm–Uvh blackfin-toolchain-06r1-4.i386.rpm
bash$ export PATH=$PATH:/opt/uClinux/bfin-uclinux/ bin
在U-Boot-1.1.3/Makefile下可以看到选择交叉编译器为bfin-uclinux-gcc。
ifeq($(ARCH),blackfin)
共模电感 CROSS_COMPILE = bfin-uclinux-gcc
绕行电感
3 U-Boot启动两阶段
U-Boo共模电感器t代码一般分为stage1和stage2两大部分。stage1依赖于CPU体系结构如设备初始化代码,常用汇编语言编写以达到短小精悍,提高系统运行效率的目的。它主要包括cpu/bf561目录下的start.s。stage2一般采用C语言编写实现复杂功能,这样代码则具有更好的可读性和可移植性,主要包括lib blackfin/振荡电感器board.c文件和common/main.c文件中main_loop函数。
stagel从CPU入口函数cpu/bf561/start.s开始,通常包含以下步骤,
(1)基本硬件的初始化,为随后执行kernel准备好基本的硬件环境。包括:屏蔽所有中断,引导装载程序的执行过程中不必执行任何中断,中断屏蔽可通过写CPU的中断屏蔽寄存器或状态寄存器实现;设置CPU的速度和时钟频率,初始化pll;RAM初始化,初始化内存控制器的各个寄存器;初始化UART,向串口打印U-Boot的字符信息;关闭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)跳转到stage2的C语言代码入口点。
stage2主要包括lib-blackfin/board.c中board_init_f、board_init_r函数以及common/main.C中main_loop函数。通常包含以下步骤:
(1) 初始化此阶段需用的硬件设备,由board_init_f和board_init_r函数实现。
void board_init_f(ulong bootflag)
{……………
init_IRQ(); //初始化中断
init_baudrate(); //设置串口波特率
serial_init(); //设置串口工作方式
}
void board_init_r(gd_t*id,ulong dest_addr)
{……………
size = flash绕行电感器_init(); //Flash 初始化……………
for (;;)
{main_loop(); //设置延时时间,确定目标板是进入下载模式还是启动加载模式
}
}
(2)内存映射检测。平面变压器厂家 | 平面电感厂家
采用MAX16834设计buck-boost LED驱动器本参考设计用于buck-boost LED驱动器。设计采用电流模式高亮度LED驱动器MAX16834,利用MAX16834评估(EV)板实现此设计方案。本应用笔记提供设计说明、原理图、材料清单(BOM
改变高复杂度、简化健康和安全的解决方案设计介绍本文重点介绍利用微软 .NET微架构来设计家用医疗器械,并介绍如何按照客户需求设计终端产品的观感。这可以通过设计吸引人的图形接口,集成各种通信接口(串口、I2C、SPI、以太网、USB、WiFi等
60秒揭秘电感开裂 一体成型电感开裂可分为内部开裂,做DPA(破坏性物理分析)的时候可以发现,还有就是外部开裂,可以通过自己的观察看到。
一体成型电感开裂如果是在内部,那么对终端产品的应用性能