基于S3C44B0开发板进行Blob的移植操作和步骤

发布者:RadiantJourney最新更新时间:2022-12-27 来源: elecfans关键字:S3C44B0  开发板  Blob 手机看文章 扫描二维码
随时随地手机看文章

Bootloader是嵌入式系统软件开发的第一个环节,它紧密地将软硬件衔接在一起,对于一个嵌入式设备后续的软件开发至关重要。Blob是一款功能强大的Bootloader,S3C44B0是三星公司一款基于ARM7TDMI的嵌入式通用处理器。本文详细介绍Blob在基于S3C44B0的开发板上的运行原理与移植过程。


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。

基于S3C44B0开发板进行Blob的移植操作和步骤

2 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所示,2MB的Flash空间分别分配给出Blob、kernel、ramdisk。系统上电后,先执行第一阶段代码,进行相应的初始化后,将Blob第二阶段代码复制的RAM地址bloc_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%26;#215;16)) -1

替换下面的divisor即可。其中MCLK为系统主频,baud为波特率

/*serial-s3c44b0.c中中s3c44b0_serial_init()函数初始化串0部分*/

REG(UFCON0)=0x0;/*关闭FIFO*/

REG(ULCON0)=0x03;/*设置数据位8,无奇偶校验,1位停止位*/

REG(UCON0)=0x0;/*脉冲中断,中断请求或查询模式*/

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==“”这一行修改为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作为非易失性的存储器,在开发板上的作用是能保存数据且掉电不丢失。和EPROM最大的不同在于,对Flash编程不需要对特定的引脚加高电平,只是对特定地址写入一组特定的数据即可进行编程,这样就直接在开发板上通过软件进行擦写,不必使用特定的编程器。但是它的缺点也是很明显的:操作过于复杂,SST39VF160是SST公司的一款16M位的Flash,16位数据线宽度,共2MB容量,分为512个扇区,每个扇区有4KB,或32个块(block),每个块64KB。对Flash编程之前,必须对相应的扇区、块或者整个芯片进行擦除后,才能进行编程。


通过S3C44B0进行Flash的烧写需要注意几点:首先,S3C44B0外部地址总线是根据外部数据总线宽度连接的。例如,本开发板外部数据总线为16位宽度,这样S3C44B0的地址线A0就没有接入外部地址总线,而是从A1接起。


对Flash编程需要对Flash写入一个特定的时序。如果S3C44B0寻址0x5555,由于外部总线错了一位,这样在Flash看来发过来的地址信号是0xAAAA,也就不能正确地完成操作。注意到这一点,根据Blob自带的Flash驱动程序,就可以很方便地改写出适合自己Flash驱动程序。


结语

根据笔者经验介绍了Blob在S3C44B0上的移植,目前它已经能稳定地运行在开发板上;并且可以进行烧写Flash,查看内存,引导uClinux等操作,为项目的后续开发奠定了良好的基础。


关键字:S3C44B0  开发板  Blob 引用地址:基于S3C44B0开发板进行Blob的移植操作和步骤

上一篇:基于S3C2410微处理器和Linux实现嵌入式网关的设计
下一篇:基于S3C2410和AT2042芯片实现服务器的远程监控系统的设计

推荐阅读最新更新时间:2024-11-11 21:44

年底赶项目?买核心板送开发板!T113核心板2款芯片6种配置选择
全志T113系列芯片是目前比较受欢迎的国产入门级嵌入式工业芯片。米尔是基于T113芯片开发较早、提供配置最全的厂家, 目前是唯一一家 提供 T113-S 和 T113-i 两种芯片核心板的厂家。 更好的消息是,T113-i的核心板兼容T113-S的核心板,同一个硬件设计,有多种更适合的选择。 2种芯片,6种配置,总有一种更贴近您的项目需要。 所以,年底了,您还在为赶项目发愁吗?为回馈广大客户的支持,助力国产芯的发展,米尔在双十一特推出特大优惠活动, 买 核心板送开发板 ! 对!你没有看错! 买核心板就送开发板! 不限型号,无论是T113-i和T113-S3芯片 还是128MB、256MB、4GB
[嵌入式]
年底赶项目?买核心板送<font color='red'>开发板</font>!T113核心板2款芯片6种配置选择
在GD32F310G-START开发板上读取三轴加速度计
我拿到的开发板实际板载的 MCU 是 GD32F310G8,QFN28pin 封装,基于 ARM CORTEX M4 内核,主频 72MHz, 芯片内置 64KB flash,8KB SRAM, 两路 I2C 外设。 整体概述 首先感谢极术社区给我试用GD32开发板的机会,让我体验一下近几年国产MCU开发体验。该芯片是基于arm cortex-M4内核,主频72Mhz,flash 64k,ram 8k,以及丰富的外设。 本次试用是一个读取三轴加速度计的实验,主要使用的是硬件iic。 硬件连接 传感器介绍 SC7A20 是一款高精度 12bit 数字三轴加速度传感器芯片,内置功能 更丰富,功耗更低,体积更小,测量更精确。 芯片通
[单片机]
在GD32F310G-START<font color='red'>开发板</font>上读取三轴加速度计
OK6410A 开发板 (三) 13 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 boot 详细解析2 relocate_vectors
从链接角度分析 u-boot.bin 的构成 从运行的角度分析 u-boot.bin 前 64byte 的 relocate relocate_vectors 的实现 #ifdef CONFIG_HAS_VBAR // 虽然走的是这一套,但是找到的协处理器cp15的C12的实现(DDI0301H_arm1176jzfs_r0p7_trm.pdf)和下面的内容对不上 // 那就分析 #else 那条路 // 这条路 其实就是 架构实现(ARM1176) 对(#else那条路) 做出的优化 // 后面在 DDI0301H_arm1176jzfs_r0p7_trm.pdf P254 找到了,继续分析这条路
[单片机]
stm32固件库在stm3210e-eval开发板上的移植
  首先建立工程,我习惯性在工程文件夹下建立以下几个文件夹,分别放不同的文件,以区别不同文件的不同作用,方便寻找和移植。如下:      在PROJECT文件夹下建立工程项目,启动keil,开始建立工程。      注意建立在PROJECT文件夹下。      随便起个名字,我起的名字是MDK,建立后,会提示你选择器件型号         我的器件如上图,所以选择。确定后会询问你是否加入启动文件。我们用stm32的固件库,所以不用mdk的,选择否。      下面配置工程的选项option,右键点Target会看到Options。      以下是各个选项卡的配置内容。      
[单片机]
stm32固件库在stm3210e-eval<font color='red'>开发板</font>上的<font color='red'>移植</font>
4412开发板上的步进电机小知识
1.什么是步进电机? 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到 一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以 通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 2.步进电机分哪几种? 步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB)永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点
[单片机]
4412<font color='red'>开发板</font>上的步进电机小知识
2410开发板上实现DHCP自动获取IP地址
前提:系统已经实现DNS(即使用ping 通)。 1. 在内核中添加以下选项: Networking --- Networking support Networking options --- Packet socket //添加.配置CONFIG_PACKET IP: DHCP support //添加 Network packet filtering (replaces ipchains) --- //添加,后面子选项可不选,配置CONFIG_NETFILTER 说明:若没选 Packet socket, Network packet f
[单片机]
米尔RZ/G2L、RZ/G2UL开发板6折,助力瑞萨研讨会
微信 导语 : 诚邀您光临研讨会现场 全球半导体解决方案供应商瑞萨电子将于12月12日在深圳举办“智慧控制,绿色可持续”主题的瑞萨电子嵌入式工业应用技术研讨会。米尔作为领先的嵌入式处理器模组厂商将出席此次活动,米尔电子将在现场展出 RZ/G2L、 R Z/G2UL 系列核心板开发板,将围绕“嵌入式CPU模组助力工业产品开发”开展技术演讲和demo演示,探讨如何通过智能控制提高能效,降低能源消耗,实现绿色可持续发展。 此次瑞萨研讨会,米尔为感谢广大客户的支持,将在现场限量发放 6 折优惠券 ,可 用于购买RZ/G2L、 R Z/G2UL开发板 ,欢迎广大客户前来现场领取,先到先得!
[嵌入式]
米尔RZ/G2L、RZ/G2UL<font color='red'>开发板</font>6折,助力瑞萨研讨会
Centos上搭建能用于ok6410开发板的tftp服务器
用rpm -qa | grep tftp 检查是否安装tftp服务器 如果没有。tftp:yum install tftp*(yum install xinetd tftp tftp-server) Tftp的配置文件在 vi /etc/xinetd.d/tftp 修改tftpboot 的属性 chmod 777 -R tftpboot 修改下载路径; 重启:/etc/init.d/xinetd restart 检查tftp是否启动成功:netstat -a | grep tftp 在光盘上安装tftp服务器: 在centos的安装光盘中有RPM安装包,挂在光盘后进入到文件夹,找到相应的安装包。 ]# cd /media/ #
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved