ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
择要 Bootloader是嵌入式体系软件开辟的第一个关键,它精密地将软硬件衔接在一起,对付一个嵌入式配置后续的软件开辟至关紧张。Blob是一款成果强大的Bootloader,S3C44B0是三星公司一款基于ARM7TDMI的嵌入式通用处理惩罚器。本文细致先容Blob在基于S3C44B0的开辟板上的运行原理与移植进程。
关键词 S3C44B0 Blob Bootloader 移植
Bootloader对付嵌入式配置来说至关紧张,它涉及到很多硬件相干的知识。对付自制的嵌入式开辟板,它又是不可跳过的步调,以是很多人对付它感触很头痛。本文将以一款良好的Bootloader Blob为例,细致讲授它的运行原理以及在S3C44B0通用处理惩罚器上的移植进程,为在嵌入式配置上的后续软件开辟打下底子 。
1 Blob简介
Blob是Boot Loader Object的缩写,是一款成果强大的Bootloader。它依照GPL,源代码完全开放。Blob既可以用来大略的调试,也可以启动Linux kernel。Blob最初是Jan-Derk Bakker和Erik Mouw为一块名为LART(Linux Advanced Radio Terminal)的板子写的,该板利用的处理惩罚器是StrongARM SA-1100。如今Blob已经被移植到了很多CPU上,包括S3C44B0。
MBA44B0是一款基于S3C44B0的开辟板。本文将以运行在MBA44B0开辟板上的Blob的源代码为底子,再针对本身的开辟板举行Blob的移植。
开辟板的重要配置为:
◇ 三星ARM7处理惩罚器S3C44B0;
◇ 2MB的Flash,地点范畴0x0000 0000~0x0020 0000;
◇ 8MB的SDRAM,地点范畴0x0c00 0000~0x0c80 0000;
◇ 1个串口,2个LED灯;
◇ JTAG接口;
◇ 晶振为6MHz,体系主频为60MHz。
2 Blob的运行进程阐发
图1为Blob步伐启动流程。
图1 Blob启动文件干系
Blob编译后的代码定义最大为64KB,并且这64KB又分成两个阶段来实行。第一阶段的代码在start.s中定义,大小为1KB,它包括从体系上电后在0x00000000地点开始实行的部分。这部分代码运行在Flash中,它包括对S3C44B0的一些寄存器的初始化和将Blob第二阶段代码从Flash拷贝到SDRAM中。撤除第一阶段的1KB代码,剩下的部分都是第二阶段的代码。第二阶段的肇始文件为trampoline.s,被复制到SDRAM后,就从第一阶段跳转到这个文件开始实行剩余部分代码。第二阶段最大为63KB,单词trampoline词义为“蹦床”,以是在这个步伐中举行一些BSS段设置,堆栈的初始化等事变后,末了跳转到main.c进入C函数。
我们的移植重要必要对上述的几个文件举行修改。在举行移植过去,起首必要对存储器的地点空间分派相识明白。关于存储器空间的定义在/include/ blob arch/mba44b0.h中。
图2为在Flash中的存储器空间散布,图3为启动后在SDRAM中的存储器空间散布。
图2 Flash布局
图3 SDRAM布局
如图2所示,2MB的Flash空间分别分派给了Blob、kernel、ramdisk。体系上电后,先实行第一阶段代码,举行相应的初始化后,将Blob第二阶段代码复制到RAM地点blob_abs_ base,然后跳转到第二阶段开始实行。
在第二阶段中,从汇编跳转到C的Main()函数,连续举行如下事变:
◇ 外围的硬件初始化(串口,USB等);
◇ 从Flash中将kernel加载到SDRAM的kernel地区;
◇ 从Flash中的ramdisk加载到SDRAM的ramdisk地区;
◇ 根据用户选择,进入下令行模式或启动kernel。
在我们利用的开辟板上,kernel选用uClinux。由于Flash的存储空间有限,以是存放在Flash中的uClinux内核是颠末压缩的。Blob将压缩的uClinux内核加载到SDRAM地点0x0c300000。要是选择启动uClinux,那么压缩的uClinux内核将自解压.Text段到0x0c00800(见uClinux/arch/armnommu/Makefile),然后再跳转到该处,开始运行uClinux。详细的uClinux移植在此就不细致讨论了。
在SDRAM的存储器空间分派图中,可以看到有blob_base和blob_abs_base两部分。blob_abs_base大家已经知道了,是Blob将自身的第二阶段代码复制到SDRAM地点的地区,而blob_base则是从Blob举行自升级或调试的地区。举例阐明,倘若Blob已经能正常运行了,但是对付Flash的擦写还不克不及支持得很好,就可以利用已经运行的Blob通过串口将新编译好的Blob下载到SDRAM中该地区举行运行调试。调试通过后,可以通过Blob烧写进Flash,包围原来的Blob举行升级。如许就不必由于对Blob做了一点小的窜改就重新烧写Flash,从而淘汰了烧写Flash的次数。
3 Blob的移植
对Blob的运行有了肯定相识后,就可以举行Blob的详细移植了。起重要修改的是start.s文件,详细事变如下:
◆ 屏蔽失看门狗WTCON;
◆ 配置寄存器SYSCFG临时封闭缓存,等Blob运行稳固后再打开进步性能;
◆ 初始化I/O寄存器;
◆ 屏蔽停止;
◆ 配置PLLCON寄存器,决定体系的主频;
◆ 调用ledasm.s,在串口未初始化时led状态对付步伐是否正常运行很紧张;
◆ 调用memsetup-s3c44b0.s中的memsetup举行初始化存储器空间,初始化SDRAM革新速率等;
◆ 将第二阶段复制到SDRAM,并且跳转到第二阶段。
在ledasm.s中,提供了led的汇编的语言驱动步伐。在Blob另有个led.c文件,它和ledasm.s原理一样,只不过是在C语言中调用的。修改led是为了方便初期阶段的调试。在这里根据本身的开辟板举行修改。
在memsetup-s3c44b0.s中,修改MEMORY_CONFIG中设置存储器相干的配置,并设置SDRAM革新速率,相干源码如下所示:
MEMORY_CONFIG:
.long 0x11101002 /*举行存储器的配置,
SDRAM革新速率配置等*/
… /*这里必要根据差别环境举行修改*/
.long 0x20
.globl memsetup /*定义全局标号,以便能被start.s调用*/
memsetup:
ldr r0, =MEMORY_CONFIG /*举行配置*/
ldmia r0, {r1-r13}
ldr r0, =0x01c80000
stmia r0, {r1-r13}
mov pc, lr /*步伐返回*/
Trampoline.s不必要举行修改。
进入Main()后,串口传输速率在布局体blob_status中设置:
blob_status.downloadSpeed = baud_115200;
blob_status.terminalSpeed = baud_115200;
串口的初始化相干代码定义在函数s3c44b0_serial_ init()中,该函数在serial-s3c44b0.c中。对付S3C44B0的串口,一样平常只必要初始化下面四个寄存器串口就可以正常事变。要是不克不及事变,大概是体系时钟设置差别,只必要根据下列公式谋略出divisor:
divisor=(int)(MCLK/(baud ×16))-1
更换下面的divisor即可。此中MCLK为体系主频,baud为波特率。
/*serial-s3c44b0.c中s3c44b0_serial_init()函数初始化串口0部分*/
REG(UFCON0) = 0x0; /*封闭fifo*/
REG(ULCON0) = 0x03; /*设置数据位8,无奇偶校验,1位
克制位*/
REG(UCON0) = 0x05; /*脉冲停止,停止恳求或查问模式*/
REG(UBRDIV0) = divisor;/*设置波特率*/
至此,低级移植事变已经完成,运行./configure 杦ith-board=mba-44b0-with-linux-prefix=/path/to/linux-src举行相干配置。在此还可以加一些开关选项举行配置,详细请参阅Blob自带文档。要是没有错误,就可以make举行编译了。要是编译精确,可在blob/src/blob下得到bin格局的Blob,将其烧写到Flash即可运行。关于Blob第一部分和第二部分的链接脚本,可以在start-ld-script和rest-ld-script.in中看到相干的链接地点,编译器是根据这些地点链接步伐的。在blob/src/blob/Makefile中可以看到,两个阶段分别以blob-start和blob-rest来编译,末了通过dd下令将它们构成一个完备的Blob二进制文件。
(1) 下令行的修改
在笔者利用的Blob版本中,BackSpace不克不及起作用,这对付调试非常的不方便。查阅源码,可以发明在src/blob/lib/command.c中,GetCommand函数中定义着人机交互部分。将else if(c ==’\b’这一行修改为else if(c ==0x7f),即可支持Backspace成果。
(2) Blob的运行
要是在前面的事变中没有什么题目的话,将blob/src/blob/blob文件烧写进Flash后,上电就可以从串口看到欢迎信息。加载linux内核和文件体系的后,等待几秒,要是没有操纵,将启动操纵体系,不然出现提示符:
Blob>
表现进入Blob。在该模式下提供了很多下令,可以方便地举行硬件调试、体系升级和体系引导。
Blob常用的下令有:blob、boot、xdownload、flashreload、dump、reblob、status等。
差别的Flash操纵有所差别。笔者发明通过Blob烧写Flash的软件有些题目,为了调试方便,决定编写本身的Flash驱动步伐。
(3) Flash驱动步伐的编写
Flash作为非易失性的存储器,在开辟板上的作用是能生存数据且失电不丢失。和EEPROM最大的差别在于,对Flash编程不必要对特定的引脚加高电压,只是对特定地点写入一组特定的数据即可举行编程,如许就直接在开辟板上通过软件举行擦写,不必利用特定的编程器。但是它的缺点也是很明显的:操纵过于巨大,SST39VF160是SST公司的一款16M位的Flash,16位数据线宽度,共2MB容量,分为512个扇区,每个扇区有4KB,或32个块(block),每个块64KB。对Flash编程之前,必须对相应的扇区、块大概整个芯片举行擦除后,才华举行编程。
通过S3C44B0举行Flash的烧写必要细致几点:起首,S3C44B0外部地点总线是根据外部数据总线宽度连接的。比方,本开辟板外部数据总线为16位宽度,如许S3C44B0的地点线A0就没有接入外部地点总线,而是从A1接起。表1所列为差别的外部数据总线宽度下,处理惩罚器与外部存储器的地点线接法。
表1 存储器在差别总线宽度下与S3C44B0地点线的接法
对Flash编程必要对Flash写入一个特定的时序。要是S3C44B0寻址0x5555,由于外部总线错了一位,如许在Flash看来发过来的地点信号是0xAAAA,也就不克不及精确地完成操纵。细致到这一点,根据Blob自带的Flash驱动步伐,就可以很方便地改写出得当本身Flash驱动步伐。
结语
根据笔者经历先容了Blob在S3C44B0上的移植,如今它已经能稳固地运行在开辟板上;并且可以举行烧写Flash,查察内存,引导uClinux等操纵,为项目标后续开辟奠定了精良的底子。
参考文献
1 刘安昱,温晓辉,刘志红. 基于S3C44B0的uClinux的移植. 单片机与嵌入式体系应用,2003(12)
2 杜春雷. ARM体系布局与计划. 北京:清华大学出版社,2003
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号