• ABS工作原理动画 > B 1 0 b在¥3 C 44B 0上的移植
  • B 1 0 b在¥3 C 44B 0上的移植

    免费下载 下载该文档 文档格式:PDF   更新时间:2011-11-29   下载次数:0   点击次数:1
    文档基本属性
    文档格式:PDF
    文档标题:B 1 0 b在 ¥3 C 44B 0上的移植
    文档作者:
    关键词:
    主题:
    单位:
    文档创建者:重庆维普资讯有限公司技术部
    创建时间:
    上次保存时间:D:20110419101126+08'00'
    修订:重庆维普资讯有限公司
    点击这里显示更多文档属性
    Page 1
    技 术纵 横 
    B 1 0 b在 ¥3 C 44B 0上的移植 
    ■ 北京交通大学
    赵 俊 良 李 哲英 
    关键词
    ¥3C44B0 Blob Bootloader 移植 
    Bootloader对于嵌入式设备来说至关重要,它涉及 
    到许多硬件相关的知识。对于自制的嵌入式开发板,它 
    又是不可跳过的步骤,所以很多人对于它感到很头痛。 
    本文将以一款优秀的Bootloader Blob为例,详细讲解它 
    的运行原理以及在 S3C44B0通用处理器上的移植过程, 
    为在嵌入式设备上的后续软件开发打下基础 。 
    1 B I ob简介 
    Blob是Boot Loader Object的缩写,是一款功能强大 
    的Bootloader。它遵循GPL,源代码完全开放。Blob既 
    可以用来简单的调试,也可以启动Linux kernel。Blob最 
    初是Jan-Derk Bakker和Erik Mouw为一块名为LART(Linux 
    Advanced Radio Termina1)的板子写的,该板使用的处理 
    器是StrongARM SA-llo0。现在Blob已经被移植到了很 
    多CPU上,包括 ¥3C44B0 a 
    MBA44B0是一款基于 ¥3C44B0的开发板。本文将以 
    运行在 MBA44B0开发板上的Blob的源代码为基础,再 
    针对自己的开发板进行 Blob的移植 。 
    开发板的主要配置为 : 
    ◇三星ARM7处理器 ¥3C44B0: 
    ◇2MB的Flash,地址范围0x0000 0000--0x0020 0000; 
    ◇ 8MB的SDRAM,地址范围0x0c00 0000--0x0c80 0000; 
    ◇ 1个串口,2个LED灯 ; 
    ◇ JTAG接口; 
    ◇晶振为6MHz,系统主频为60MHz。 
    2 BIob的运行过程分析 
    图 l为Bl0b程序 
    启动流程 。 
    B1Ob编译后的 
    代 码 定 义最 大 为 
    64KB,并且这64KB 
    又分成两个阶段来 
    执行 。第 一阶段的 
    代码在start.s中定 
    图 1 BIob启动文件关系 
    义,大小为 l KB,它包括从系统上电后在0x00000000地 
    址开始执行的部分。这部分代码运行在Fla sh中,它包 
    括对 ¥3C44B0的一些寄存器的初始化和将Blob第二阶段 
    代码从Flash拷贝到SDRAM中。除去第一阶段的lKB代 
    码,剩下的部分都是第二阶段的代码。第二阶段的起始 
    文件为trampoline.sI被复制到SDRAM后,就从第一阶 
    段跳转到这个文件开始执行剩余部分代码。第二阶段最 
    大为63KB,单词trampoline词义为 “蹦床”,所以在这 
    个程序中进行一些B s s段设置,堆栈的初始化等工作 
    与可靠性,以更适合于嵌入式应用环境也将是我们下一 
    步的目标。■  
    参考文献 
    l ANSI/IEEE Std 802.Il 
    2 三星公司 ¥3C4510B处理器数据手册 
    笪禹:硕士研究生,研究方向为无线通信、 ■LAN、Ad HOc网 
    络。李建 东:教授、博士生手师,从事宽带无线 I P技术、移 
    动通信、软件无线电、ad h O c自组织网络等方面的研究。重 
    敏:讲师、博士,研究方向为宽帝无线IP技术、Ad [4oc同络 
    中的关键技术。 
    (收修改稿日期:2004—04—29) 
    技 术 纵 横 
    后,最后跳转到main.c进 
    C函数。 
    我们 的移植 主要需 
    对上述 的几个文件进行 
    改。在进行移植以前,首 
    需要对存储器的地址空 
    分配了解清楚 。关于存 
    器空间的定义在 /includ 
    blob arch/mba44b0.h中 。 
    图2为在Flash中的存 
    器空间分布,图3为启动 
    后在 SDRAM 中的存储 
    器空间分布 。 
    如图2所示,2MB的 
    Flash空间分别分配给了 
    Blob、ker
    nel、ramdisk。系 
    统上电后,先执行第一 
    阶段代码 ,进行相应的 
    初始化后,将Blob第二阶 
    段代码复制到RAM地址 
    blob—
    abs
    base,然后跳 
    转到第二阶段开始执行 。 
    通过Blob烧写进Flash,覆盖原来的 Blob进行升级 。这 
    样就不必因为对 B l O b做了一点小的改动就重新烧写 
    Flash,从而减少了烧写Flash的次数 。 
    3 B I ob的移植 
    对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: 
    .1ong Oxl l 101002 
    进行存储器的配置, 
    SDRAMI ̄i]新速度配置等?/ 
    这里需要根据不同情况进行修改?/ 
    .1ong 0x20 
    .globl memsemp 
    定义全局标号,以便能被start.s调用 / 
    memsemp: 
    ldr r0,=MEMORY—
    CONFIG 
    进行配置 / 
    ldmia r0,{rl-r13} 
    ldr rO,=0x01c80000 
    stmia r0,{rl-r13} 
    mov pc,lr 
    程序返回 / 
    Trampoline.S不需要进行修改。 
    进入Main()后,串口传输速度在结构体blob—
    status 
    中设定 : 
    blob—
    status.downloadSpeed= baud—
    ll 5200; 
    blob—
    status.terminalSpeed baud_l 15200; 
    串口的初始化相关代码定义在函数s3c44b0一
    serial一
     
    38 丰哼-J-入 ●幢▲一—_—l  
    技 术 纵 横 
    initO中,该函数在serial—s3c44b0.C中。对于¥3C44B0的串 
    口,一般只需要初始化下面四个寄存器串口就可以正常 
    工作。如果不能工作,可能是系统时钟设置不同,只需 
    要按照下列公式计算出divi sor: 
    divisor=(int)(MCLK/(baud× 1 6))一1 
    替换下面的divisor即可。其中MCLK为系统主频, 
    baud为波特率。 
    serial—s3c44b0.C中s3c44b0一serial—initO函数初始化串口O部分 / 
    REG(UFCONO)=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命令将它们组成一个完整的Bl0b二进制文件。 
    (1)命令行的修改 
    在笔者使用的Blob版本中,BackSpace不能起作用, 
    这对于调试非常的不方便。查阅源码,可以发现在S re/ 
    blob/lib/command.C中,GetCommand函数中定义着人机交 
    互部分。将elseif(c一 ’\b’这一行修改为elseif(c ̄Ox70, 
    即可支持 Backspace功能。 
    (2)BIob的运行 
    如果在前面的工作中没有什么问题的话,将blOb/ 
    src/blob/blob文件烧写进Flash后,上电就可以从串口看 
    到欢迎信息。加载linux内核和文件系统的后,等待几 
    秒,如果没有操作,将启动操作系统,否则出现提示符 : 
    Blob> 
    表示进入Blob。在该模式下提供了许多命令,可以 
    方便地进行硬件调试 、系统升级和系统引导。 
    BlOb常用的命令有 :blOb、bOOt、xdOWnload、 
    flashreload、dump、reblob、status等。 
    不同的Flash操作有所不同。笔者发现通过Blob烧 
    写Flash的软件有些问题,为了调试方便,决定编写自 
    己的Flash驱动程序。 
    (3)F I ash驱动程序的编写 
    Flash作为非易失性的存储器,在开发板上的作用是 
    能保存数据且掉电不丢失。和EEPROM 最大的不同在 
    于,对Fla sh编程不需要对特定的引脚加高电压,只是 
    对特定地址写入一组特定的数据即可进行编程,这样就 
    直接在开发板上通过软件进行擦写,不必使用特定的编 
    程器 。但是它的缺点也是很明显的 :操作过于复杂, 
    SST39VF160是 SST公司的一款 16M位的Flash,16位数 
    据线宽度,共2MB容量,分为5 1 2个扇区,每个扇区有 
    4KB,或32个块(block),每个块 64KB。对Flash编程之 
    前,必须对相应的扇区 、块或者整个芯片进行擦除后, 
    才能进行编程 。 
    通过S3C44B0进行Flash的烧写需要注意几点:首 
    先,S3C44B0外部地址总线是根据外部数据总线宽度连 
    接的。例如,本开发板外部数据总线为1 6位宽度,这 
    样S3C44B0的地址线A0就没有接入外部地址总线,而 
    是从A l接起。表 l所列为不同的外部数据总线宽度下, 
    处理器与外部存储器的地址线接法。 
    表 1 存储器在不同总线宽度下与 ¥3C44B0地址线的接法 
    存储器地址 8位数据总线时 l6位数据总线时 32位数据总线时 
    引脚 
    ¥3C44B0引脚 
    ¥3C44B0引脚 
    ¥3C44B0引脚 
    A0 
    A0 
    AI 
    A2 
    Al 
    Al 
    A2 
    A3 
    A2 
    A2 
    A3 
    A4 
    A3 
    A3 
    A4 
    A5 
    对Flash编程需要对 Flash写入一个特定的时序。如 
    果 ¥3C44B0寻址0x5555,由于外部总线错了一位,这样 
    在Flash看来发过来的地址信号是0xAAAA,也就不能 
    正确地完成操作。注意到这一点,根据Blob自带的Flash 
    驱动程序,就可以很方便地改写出适合自己Fla sh驱动 
    程序 。 
    结 语 
    根据笔者经验介绍了Blob在 ¥3C44B0上的移植,目 
    前它已经能稳定地运行在开发板上 ;并且可以进行烧写 
    Flash,查看内存,引导uClinux等操作,为项目的后续 
    开发奠定了良好的基础。■  
    参考文献 
    1 刘安昱,温晓辉,刘志红.基于 ¥3C44B0的uClinux的 
    移植.单片机与嵌入式系统应用,2003(12) 
    2 杜春雷.ARM体系结构与设计.北京:清华大学出版 
    社,2003 
    3 http://www.arm.com ;http://embed.8800.org;http://bbs. 
    edw.com.ca 
    (收稿 日期 :2004—04—21) 
    ■■—■ Mi唧 Ile &Embedded sys 39 
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • abs系统的工作原理  abs的工作原理  汽车abs工作原理  abs工作原理图  abs泵工作原理  汽车abs原理与结构  abs刹车原理  abs原理  abs是什么意思