社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
单片机
›
Blob 在S3C44B0 上的移植
返回列表
发新帖
回复
阅
3529
|
回
0
程序天使
当前离线
裸片初长成(高级)
最后登录
2009-1-6
在线时间
6 小时
威望
41562分
芯积分
-87分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
程序天使
446
帖子
0
TA的资源
裸片初长成(高级)
+ 好友
私信
楼主
发表于2008-10-8 09:37
只看该作者
Blob 在S3C44B0 上的移植
[复制链接]
Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起,对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能强大的Bootloader,S3C44B0 是三星公司一款基于ARM7TDMI的嵌入式通用处理器。本文具体介绍Blob 在基于S3C44B0 的开发板上的运行原理与移植过程。
Bootloader对于嵌入式设备来说至关重要,它涉及到许多硬件相关的知识。对于自制的嵌入式开发板, 它又是不可跳过的步骤,所以很多人对于它感到很头痛。本文将以一款优秀的Bootloader Blob 为例,具体讲解它的运行原理以及在S3C44B0通用处理器上的移植过程,为在嵌入式设备上的后续软件开发打下基础 。
1 Blob 简介
Blob 是Boot Loader Object的缩写,是一款功能强大的Bootloader。它遵循GPL,源代码完全开放。Blob 既可以用来简单的调试,也可以启动Linuxkernel。Blob 最初是Jan-Derk Bakker和Erik Mouw 为一块名为LART(Linux Advanced RadioTerminal)的板子写的,该板使用的处理器是StrongARM SA-1100。现在Blob 已经被移植到了很多CPU上,包括S3C44B0。
MBA44B0 是一款基于S3C44B0 的开发板。本文将以运行在MBA44B0 开发板上的Blob 的源代码为基础,再针对自己的开发板进行Blob 的移植。开发板的主要配置为:
M开发论坛
三星ARM7 处理器S3C44B0 ;
2MB 的Flash,地址范围0x0000 0000~0x0020 0000;
8MB 的SDRAM,地址范围0x0c00 0000~0x0c80 0000;
1 个串口,2 个LED 灯;
JTAG 接口;
晶振为6MHz ,系统主频为60MHz 。
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 函数。
ARM
我们的移植主要需要对上述的几个文件进行修改。在进行移植以前,首先需要对存储器的地址空间分配了解清楚。关于存储器空间的定义在/include/blob arch/mba44b0.h中。图2 为在Flash 中的存储器空间分布,图3 为启动后在SDRAM中的存储器空间分布。
如图2 所示,2MB 的Flash 空间分别分配给了Blob、kernel、ramdisk。系统上电后, 先执行第一阶段代码, 进行相应的初始化后,将Blob 第二阶段代码复制到RAM 地址blob_abs_base,然后跳转到第二阶段开始执行。
在第二阶段中, 从汇编跳转到C 的Main()函数, 继续进行如下工作:
http://www.armforum.cn
外围的硬件初始化( 串口,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 的次数。
字串8
3 Blob 的移植
对Blob 的运行有了一定了解后, 就可以进行Blob的具体移植了。首先要修改的是start.s 文件,具体工作如下:
ARM开发论坛
屏蔽掉看门狗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 刷新速度, 相关源码如下所示: ARM开发论坛
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位停止位*/ ARM开发论坛
REG(UCON0) = 0x05; /*脉冲中断,中断请求或查询模式*/
REG(UBRDIV0) = divisor;/*设置波特率*/
至此,初级移植工作已经完成,运行./configurewith-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 内核和文件系统的后,等待几秒,假如没有操作,将启动操作系统,否则出现提示符:
ARM开发论坛
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所列为不同的外部数据总线宽度下,处理器与外部存储器的地址线接法。 M开发论坛
表1 存储器在不同总线宽度下与S3C44B0 地址线的接法
字串5
存储器地址引脚
8 位数据总线时S3C44B0 引脚
16 位数据总线时
S3C44B0 引脚
32 位数据总线时
S3C44B0 引脚
A0
A0
A1
A2
A1
A1
A2
A3
A2
A2
A3
A4
A3
A3
A4
A5
……
……
……
……
ARM
对Flash 编程需要对Flash 写入一个特定的时序。假如S3C44B0寻址0x5555,由于外部总线错了一位,这样在Flash 看来发过来的地址信号是0xAAAA,也就不能正确地完成操作。注重到这一点,根据Blob 自带的Flash驱动程序,就可以很方便地改写出适合自己Flash 驱动程序。
结语
根据笔者经验介绍了Blob 在S3C44B0 上的移植,目前它已经能稳定地运行在开发板上;并且可以进行烧写Flash,查看内存,引导uClinux 等操作,为项目的后续开发奠定了良好的基础。
ARM
开发
,
处理器
,
三星公司
,
嵌入式
此帖出自
单片机论坛
点赞
关注
(0)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
安世半导体智能工业应用探索站,闯关赢好礼!
PI 电源小课堂:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
Microchip喊你探索dsPIC33A 芯片,70份好礼等你赢!
【瓜分2500元红包】票选2024 DigiKey “感知万物,乐享生活”创意大赛人气作品TOP3!
DigiKey应用探索站重磅上线!潮流应用,硬核技术探秘,N多干货,一站get!
验证并选择心仪MOSFET,探寻选型奥秘!注册、体验双重好礼等你拿~
免费申请测评 | 泰坦触觉 TITAN Core开发套件
开源项目
更多>>
LTC3631IDD、5V、100mA 降压转换器的典型应用电路
使用 Analog Devices 的 XC2V250-5FG256C 的参考设计
Euclid Klicky Probe pcb
DC2365A-B,基于 LTC2357-18 缓冲四路、18 位、350 ksps 同步采样 SAR ADC 的演示板
HNA-16MM64 专业功放VFD显示模块
DC2081A-B,演示板采用 LTM4630EY-1 双路 18A 或单路 36A 模块稳压器,具有 ±0.8% 直流和 ±3% 瞬态准确度
DER-966 - 使用基于 PowiGaN 的 InnoSwitch4-CZ、ClampZero 和 HiperPFS-5 的 140 W USB PD 3.1 扩展功率范围充电器
NE5532+TPA6120耳放
LT1461 作为 LTC6802 锂离子电池监视器的外部校准源
用于电池充电指示器的 NCP300HSN27T1 2.7V 电压检测器的典型应用
随便看看
RV1106开箱
#RV1106开箱报告前几天,我终于收到了期待已久的LuckfoxRV1106G3开发板。由于最近一直忙于Yocto开发,因此没能及时进行评测。不过,今天我想先分享一下开箱的初体验。##包装及外观开箱时,RV1106G3的包装非常结实,外部印刷清晰,给人一种专业的感觉。打开盒 ...
【MCXN947开发板测评】点阵板显示驱动
【Follow me第二季第4期】汇总提交帖:全部任务_视频提交补充·
聊聊可穿戴设备
2007-9-20已初有眉目.....[STR750的USB问题]
变压器的材料决定变压器的工作频率吗
CV2880简易规格书datasheet
相位连续可调毫米波MEMS移相器的研制
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
暂态网络分析仪
外贴式液位开关
电池管理模块
施克传感器
重量传感器
FBAR滤波器
三次谐波
BNC连接器
RTSP
PCF
相关文章
更多>>
苹果M4 Mac mini曝出USB-C接口问题!随机间歇性断开连接
1月17日消息,苹果M4 Mac mini自2024年底发布以来,收获了不少好评,然而近期一些用户在使用过程中发现,该设备的USB-C接口似乎存在连接性问题,给使用带来了不便。 有用户反映M4 Ma
消息称 SK 海力士有望 2 月启动业界最先进 1c nm 制程 DRAM 内存量产
1 月 17 日消息,韩媒 MT(IT之家注:全称 MoneyToday)当地时间今日报道称,SK 海力士近日已成功完成内存业界最先进 1c 纳米制程 DRAM 的批量产品认证,连续多个以 25 块
未经同意出售用户数据,通用汽车遭美国 FTC 处罚
1 月 17 日消息,当地时间周四,美国联邦贸易委员会(FTC)宣布通用汽车及其子公司 OnStar 因未经用户同意出售用户位置和驾驶行为数据,因此将对其进行处罚,包括在五年内禁止向消费者报告机构披
日本三井住友银行推出半导体设备抵押贷款,铠侠已率先获益
联想宣布收购Infinidat,扩充高端企业存储业务
台积电董事长:我们不是美积电 最先进制程不会搬到美国
曝台积电拒绝代工三星Exynos处理器:理由是怕泄密
SK 海力士被曝上半年削减 10% NAND 闪存产量
苹果加入UALink联盟 成员含AMD、英特尔、谷歌等公司
英特尔宣布将逐渐停产第 12 代 Alder Lake 移动处理器,覆盖酷睿、奔腾及赛扬
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
安世半导体智能工业应用探索站,闯关赢好礼!
点击页面内“开始探索”按钮,填写并提交表单;
请根据序号依次完成3个安世半导体智能工业应用的探索,并根据给出的资料完成共计9题(每个应用3题),答对5题以上的玩家即可获得抽奖资格;
每人仅有一次参与答题的机会,请慎重作答,活动结束后,我们将抽取30位玩家赠送礼品。
查看 »
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
直播主题:多相降压电源控制技术的发展与探讨
直播时间:2025年2月25日(星期二)上午10:30-11:30
快来报名!
查看 »
回帖赢好礼 | 关于无线技术的那些事儿
【活动时间】即日起—2025年1月31日
【活动好礼】50元京东卡
查看 »
答题赢好礼,PI电源小课堂第3期来啦!
本期内容:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
活动时间:即日起-2月28日
看视频答题即可赢取京东卡!
查看 »
Microchip喊你探索 dsPIC33A 芯片,70份好礼等你赢!
活动时间:即日起-1月26日
活动奖励:随身Wi-Fi、家用多功能电烤箱、20000mAh充电宝、50元京东卡
查看 »
DigiKey应用探索站重磅上线!潮流应用,硬核技术探秘,N多干货,一站get!
当月好物、热门技术资源、潮流应用技术、特色活动、DigiKey在线实用工具,干货多多~
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
下载资料赢好礼!看Vicor模块化电源解决方案如何推动创新
活动时间:即日起-2024年12月31日
如何参与:点击活动页内您想了解的模块,找到资料下载即可参与抽奖,活动结束后统一发奖!
查看 »
验证并选择心仪MOSFET,探寻选型奥秘!注册、体验双重好礼等你拿~
MOSFET 选型有点难
选N沟道MOSFET?还是选P沟道MOSFET?
封装如何选:不同封装尺寸有不同的热阻和耗散功率。
瞬态散热更严苛,热设计需要如何处理?
用东芝在线电路仿真器,一键解锁MOSFET选型的秘密!
查看 »
关闭
站长推荐
1
/9
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
嵌入式系统
单片机
国产芯片交流
电机驱动控制
FPGA/CPLD
模拟电子
电源技术
PCB技术
RF/无线
传感器
综合技术交流
下载中心专版
大学堂专版
测评中心专版
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
行业应用
汽车电子
移动便携
医疗电子
工控电子
安防电子
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛