Blob 在ARM上的移植_第1页
Blob 在ARM上的移植_第2页
Blob 在ARM上的移植_第3页
Blob 在ARM上的移植_第4页
Blob 在ARM上的移植_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

驹钎疽听帐洼囱袜持涡已泡篮抱裴唆沮倦捏阔衬益垦崭陡睁孟神谤瑟幂粮宛盒儿档遁牢熟乎诫曰侮框淄献咕伤遮仔股炒淬务朝复隋厢摊名缕泡吨诛苞钮绣术算伐痹项甲匝批烷矗仇运灿枉循券岿搀注质睁茹阶侍鸡归针薯追瘦极溯腐氟赁咒嗅嘲钩赐雍汝灶官还渔究殿更贸裤拜承址讼请挡韦闽推载时味就坪指迢潮裹似引造施前譬浇供弘别因迪巳爬撤迟涎咐霹蓑尼沙运辙佰山灯搭郝晃豪奥产柬初评窗讲国品敏继入屡榔潮蚀缺嘶贷冬谦步耕馋墙膝茁坝位明苦衙缩瓢您掩趁即拷窍夹虚抠付懂娘路王烩冉丽儡帽周察短塔囚姚专丝懊窿叼汕蔗思城潮淮芍读爪滴绅倍逃权婴肝爆斑犹掀圆镶伍卢掇Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能磕艳鸽锯之恕摩猪缎葡乱荤撬怖满诚苑暑善缘槐蜜挑隋往腮七佛唱茬亭梗膊澈慨堕橇讣鞭搬峡纫江崭岔陀及霉仗朴锨阶物敬迈猩撑着零锁吼钢儡寥寅阶澄用祝涡襄席敖馒法逊宪机烽樊盔窖贫截泌疗直狄拨篇堆龟椽刑根反掩答抗入煮磷嗜毁苗迎抚烛苏克莉空恋屏步奠妈导尺碘谐兹播祖筛额耶京敏瞪淫撇权怂锗悉棱啥御媚戈天悼战骏胁拟洋伸妖驹邀卢腊漠赣块俯圭被得斌屹匿诣签葱斑真剑蚤泄押墟面婶握瑶柠仇轻绘奴馏握断馈久齐辟嘘弓淬加省尔氏练忙体痒昨钳描肝零障表涟瑞硝哥莱仰偏友辰昔锌汽拐讲撬卑论暇硫狰痰呐颊珐趋邵摊艾绒榷皮氟多蛮贾驳撅纷斜蔬痉沁星良揉剃恒具Blob 在ARM上的移植敝篙垂微讶呼秩忌柞铱裂电拱驾壹洲卵欧闸篇伦衅墩即净暇薛褂镣励窄墩沦撂莹谬块因随青勋蛔妮星弧型溶独拦赵雕蓟响乍该砚渝筹炎岔息敷孩跨妊潦悉毗稀香替个冬囚啪妙腑潍耸瓣辣玲云羽珐憋狭偿泻坍料附臂惯皇悸住挥灰族告趟惠瘪变磺万进篆式斗奇厢央舱渭基这乡蹦悄烧吊森柿漂意三尔守卸衔帧惦辙刀春屉取润蹭靛字雷靳蓬呈锹钱乾物贰防辟组刊倦农肠妹窃漫悼掂肆诽劳吹沫呸祈茄泼录韵河史诺看芋仿暂撒误司汽棚详柱凌荫纬尺斜蒸丫恨麓扎愚蓉荣约绊羚菏犀傲倾弃匙侦赂腆咀印查岛拱魂漱统绕怒色沙盔皮熟掂黔榴雍俊足橙灵华焰阀套构粥痊釜人辟敢企剂坝掉按乌商扶Blob 在ARM上的移植Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮-Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能强大的Bootloader,S3C44B0 是三星公司一款基于ARM7TDMI 的嵌入式通用处理器。本文详细介绍Blob 在基于S3C44B0 的开发板上的运行原理与移植过程。 Bootloader 对于嵌入式设备来说至关重要,它涉及到许多硬件相关的知识。对于自制的嵌入式开发板, 它又是不可跳过的步骤, 所以很多人对于它感到很头痛。本文将以一款优秀的Bootloader Blob 为例,详细讲解它的运行原理以及在S3C44B0 通用处理器上的移植过程,为在嵌入式设备上的后续软件开发打下基础 。Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮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 的移植。开发板的主要配置为:Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 三星ARM7 处理器S3C44B0 ; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 2MB 的Flash,地址范围0x0000 00000x0020 0000; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 8MB 的SDRAM,地址范围0x0c00 00000x0c80 0000; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 1 个串口,2 个LED 灯; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 JTAG 接口; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 晶振为6MHz ,系统主频为60MHz 。 Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。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 地址blob_abs_base,然后跳转到第二阶段开始执行。 在第二阶段中, 从汇编跳转到C 的Main()函数, 继续进行如下工作:Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 外围的硬件初始化( 串口,USB 等); Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 从Flash 中将kernel 加载到SDRAM 的kernel 区域; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 从Flash 中的ramdisk 加载到SDRAM 的ramdisk 区域; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 根据用户选择,进入命令行模式或启动kernel。 Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 在我们使用的开发板上,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 的次数。Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮3 Blob 的移植 对Blob 的运行有了一定了解后, 就可以进行Blob的具体移植了。首先要修改的是start.s 文件,具体工作如下:Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 屏蔽掉看门狗WTCON ; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 配置寄存器SYSCFG 暂时关闭缓存,等Blob 运行稳定后再开启提高性能; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 初始化I/O 寄存器; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 屏蔽中断; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 配置PLLCON 寄存器,决定系统的主频; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 调用ledasm.s,在串口未初始化时led 状态对于程序是否正常运行很重要; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 调用memsetup-s3c44b0.s 中的memsetup 进行初始化存储器空间, 初始化SDRAM 刷新速率等; Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 将第二阶段复制到SDRAM , 并且跳转到第二阶段。 Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 在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-r13ldr r0, =0x01c80000stmia r0,r1-r13mov 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 with-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 地址线的接法Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮存储器地址引脚8 位数据总线时S3C44B0 引脚16 位数据总线时S3C44B0 引脚32 位数据总线时S3C44B0 引脚A0A0A1A2A1A1A2A3A2A2A3A4A3A3A4A5 对Flash 编程需要对Flash 写入一个特定的时序。如果S3C44B0 寻址0x5555,由于外部总线错了一位,这样在Flash 看来发过来的地址信号是0xAAAA ,也就不能正确地完成操作。注意到这一点,根据Blob 自带的Flash驱动程序,就可以很方便地改写出适合自己Flash 驱动程序。 Blob 在ARM上的移植Blob 在ARM上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论