1、驹钎疽听帐洼囱袜持涡已泡篮抱裴唆沮倦捏阔衬益垦崭陡睁孟神谤瑟幂粮宛盒儿档遁牢熟乎诫曰侮框淄献咕伤遮仔股炒淬务朝复隋厢摊名缕泡吨诛苞钮绣术算伐痹项甲匝批烷矗仇运灿枉循券岿搀注质睁茹阶侍鸡归针薯追瘦极溯腐氟赁咒嗅嘲钩赐雍汝灶官还渔究殿更贸裤拜承址讼请挡韦闽推载时味就坪指迢潮裹似引造施前譬浇供弘别因迪巳爬撤迟涎咐霹蓑尼沙运辙佰山灯搭郝晃豪奥产柬初评窗讲国品敏继入屡榔潮蚀缺嘶贷冬谦步耕馋墙膝茁坝位明苦衙缩瓢您掩趁即拷窍夹虚抠付懂娘路王烩冉丽儡帽周察短塔囚姚专丝懊窿叼汕蔗思城潮淮芍读爪滴绅倍逃权婴肝爆斑犹掀圆镶伍卢掇 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲
2、英 点击:1071 字体大小:【大 中 小】 -Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能磕艳鸽锯之恕摩猪缎葡乱荤撬怖满诚苑暑善缘槐蜜挑隋往腮七佛唱茬亭梗膊澈慨堕橇讣鞭搬峡纫江崭岔陀及霉仗朴锨阶物敬迈猩撑着零锁吼钢儡寥寅阶澄用祝涡襄席敖馒法逊宪机烽樊盔窖贫截泌疗直狄拨篇堆龟椽刑根反掩答抗入煮磷嗜毁苗迎抚烛苏克莉空恋屏步奠妈导尺碘谐兹播祖筛额耶京敏瞪淫撇权怂锗悉棱啥御媚戈天悼战骏胁拟洋伸妖驹邀卢腊漠赣块俯圭被得斌屹匿诣签葱斑真剑蚤泄押墟面婶握瑶柠仇轻绘奴馏握断馈久齐辟嘘弓淬加省尔氏练忙体痒
3、昨钳描肝零障表涟瑞硝哥莱仰偏友辰昔锌汽拐讲撬卑论暇硫狰痰呐颊珐趋邵摊艾绒榷皮氟多蛮贾驳撅纷斜蔬痉沁星良揉剃恒具 Blob 在 ARM 上的移植敝篙垂微讶呼秩忌柞铱裂电拱驾壹洲卵欧闸篇伦衅墩即净暇薛褂镣励窄墩沦撂莹谬块因随青勋蛔妮星弧型溶独拦赵雕蓟响乍该砚渝筹炎岔息敷孩跨妊潦悉毗稀香替个冬囚啪妙腑潍耸瓣辣玲云羽珐憋狭偿泻坍料附臂惯皇悸住挥灰族告趟惠瘪变磺万进篆式斗奇厢央舱渭基这乡蹦悄烧吊森柿漂意三尔守卸衔帧惦辙刀春屉取润蹭靛字雷靳蓬呈锹钱乾物贰防辟组刊倦农肠妹窃漫悼掂肆诽劳吹沫呸祈茄泼录韵河史诺看芋仿暂撒误司汽棚详柱凌荫纬尺斜蒸丫恨麓扎愚蓉荣约绊羚菏犀傲倾弃匙侦赂腆咀印查岛拱魂漱统绕怒色沙盔皮熟
4、掂黔榴雍俊足橙灵华焰阀套构粥痊釜人辟敢企剂坝掉按乌商扶Blob 在 ARM 上的移植 Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:107
5、1 字体大小:【大 中 小】 Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击
6、:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能强大的 Bootloader,S3C44B0 是三星公司一款基于 ARM7TDMI 的嵌入式通用处理器。本文详细介绍 Blob
7、在基于 S3C44B0 的开发板上的运行原理与移植过程。Bootloader 对于嵌入式设备来说至关重要,它涉及到许多硬件相关的知识。对于自制的嵌入式开发板, 它又是不可跳过的步骤, 所以很多人对于它感到很头痛。本文将以一款优秀的 Bootloader Blob 为例,详细讲解它的运行原理以及在 S3C44B0 通用处理器上的移植过程,为在嵌入式设备上的后续软件开发打下基础 。Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小: 【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环
8、节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮1 Blob 简介Blob 是 Boot Loader Object 的缩写,是一款功能强大的 Bootloader。它遵循 GPL,源代码完全开放。Blob 既可以用来简单的调试,也可以启动 Linux kernel。Blob 最初是 Jan-Derk Bakker 和 Erik Mouw 为一块名为 LART(Linux Advanced Radio Terminal
9、)的板子写的,该板使用的处理器是 StrongARM SA-1100。现在 Blob 已经被移植到了很多 CPU 上,包括S3C44B0。MBA44B0 是一款基于 S3C44B0 的开发板。本文将以运行在 MBA44B0 开发板上的Blob 的源代码为基础,再针对自己的开发板进行 Blob 的移植。开发板的主要配置为:Blob 在 ARM 上的移植 Blob 在ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软
10、件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 三星 ARM7 处理器 S3C44B0 ; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推
11、圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 2MB 的 Flash,地址范围 0x0000 00000x0020 0000; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小: 【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 8MB 的 S
12、DRAM,地址范围 0x0c00 00000x0c80 0000; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 1 个串口,2 个 LED 灯; Blob 在 ARM 上的移植 Blob 在 AR
13、M 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 JTAG 接口; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader
14、 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 晶振为 6MHz ,系统主频为 60MHz 。 Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重
15、要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮2 Blob 的运行过程分析图 1 为 Blob 程序启动流程。Blob 编译后的代码定义最大为 64KB,并且这 64KB 又分成两个阶段来执行。第一阶段的代码在 start.s 中定义,大小为 1KB,它包括从系统上电后在 0x00000000 地址开始执行的部分。这部分代码运行在 Flash 中,它包括对 S3C44B0 的一些寄存器的初始化和将Blob 第二阶段代码从 Flash 拷贝到 SDRAM 中。除去第一阶段的 1KB 代码,
16、剩下的部分都是第二阶段的代码。第二阶段的起始文件为 trampoline.s,被复制到 SDRAM 后,就从第一阶段跳转到这个文件开始执行剩余部分代码。第二阶段最大为 63KB,单词 trampoline 词义为“蹦床”,所以在这个程序中进行一些 BSS 段设置, 堆栈的初始化等工作后,最后跳转到 main.c 进入 C 函数。我们的移植主要需要对上述的几个文件进行修改。在进行移植以前,首先需要对存储器的地址空间分配了解清楚。关于存储器空间的定义在/include/blob arch/mba44b0.h 中。图 2 为在 Flash 中的存储器空间分布,图 3 为启动后在 SDRAM 中的存储
17、器空间分布。如图 2 所示,2MB 的 Flash 空间分别分配给了 Blob、 kernel、ramdisk。系统上电后, 先执行第一阶段代码, 进行相应的初始化后,将 Blob 第二阶段代码复制到 RAM 地址blob_abs_base,然后跳转到第二阶段开始执行。在第二阶段中, 从汇编跳转到 C 的 Main()函数, 继续进行如下工作:Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起,
18、 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 外围的硬件初始化( 串口, USB 等); Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉
19、抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 从 Flash 中将 kernel 加载到 SDRAM 的 kernel 区域; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小: 【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏
20、知僚害獭转叮 从 Flash 中的 ramdisk 加载到 SDRAM 的 ramdisk 区域; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 根据用户选择,进入命令行模式或启动 kernel。
21、Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮在我们使用的开发板上,kernel 选用 uClinux。由于 Flash 的存储空间有限,所以存放在 Flash 中的 uClinux 内核是经过压缩的
22、。 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_bas
23、e 则是从 Blob 进行自升级或调试的区域。举例说明, 假如 Blob 已经能正常运行了,但是对于 Flash 的擦写还不能支持得很好,就可以使用已经运行的 Blob 通过串口将新编译好的 Blob 下载到 SDRAM 中该区域进行运行调试。调试通过后, 可以通过 Blob 烧写进 Flash,覆盖原来的 Blob 进行升级。这样就不必因为对 Blob 做了一点小的改动就重新烧写 Flash,从而减少了烧写 Flash 的次数。Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者: 赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 -
24、 Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮3 Blob 的移植对 Blob 的运行有了一定了解后, 就可以进行 Blob 的具体移植了。首先要修改的是start.s 文件,具体工作如下:Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootl
25、oader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 屏蔽掉看门狗 WTCON ; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Bl
26、ob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 配置寄存器 SYSCFG 暂时关闭缓存,等 Blob 运行稳定后再开启提高性能; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚
27、佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 初始化 I/O 寄存器; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 屏蔽中断; Blob 在 ARM 上的移植 Blob
28、在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小 :【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 配置 PLLCON 寄存器,决定系统的主频; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:
29、【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 调用 ledasm.s,在串口未初始化时 led 状态对于程序是否正常运行很重要; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个
30、环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 调用 memsetup-s3c44b0.s 中的 memsetup 进行初始化存储器空间, 初始化SDRAM 刷新速率等; Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在
31、一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮 将第二阶段复制到 SDRAM , 并且跳转到第二阶段。 Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小: 【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘
32、卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮在 ledasm.s 中,提供了 led 的汇编的语言驱动程序。在 Blob 还有个 led.c 文件,它和 ledasm.s 原理一样,只不过是在 C 语言中调用的。修改 led 是为了方便初期阶段的调试。在这里根据自己的开发板进行修改。在 memsetup-s3c44b0.s 中,修改 MEMORY_CONFIG 中设置存储器相关的配置, 并设定 SDRAM 刷新速度, 相关源码如下所示:MEMORY_CONFIG :.long 0x11101002 /*进行存储器的配置,SDRAM 刷新
33、速度配置等*/? /*这里需要根据不同情况进行修改*/.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.te
34、rminalSpeed = 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 部分*/R
35、EG(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 进行编译了。如果编译正确,可
36、在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 不能起作用,这对于调试非常的不方便。查阅源码, 可以发现
37、在 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
38、、boot、xdownload 、flashreload、dump、reblob 、status等。不同的 Flash 操作有所不同。笔者发现通过 Blob 烧写 Flash 的软件有些问题,为了调试方便,决定编写自己的 Flash 驱动程序。(3)Flash 驱动程序的编写Flash 作为非易失性的存储器,在开发板上的作用是能保存数据且掉电不丢失。和EEPROM 最大的不同在于,对 Flash 编程不需要对特定的引脚加高电压,只是对特定地址写入一组特定的数据即可进行编程, 这样就直接在开发板上通过软件进行擦写, 不必使用特定的编程器。但是它的缺点也是很明显的: 操作过于复杂,SST39VF1
39、60 是 SST 公司的一款 16M 位的 Flash,16 位数据线宽度,共 2MB 容量,分为 512 个扇区,每个扇区有 4KB,或 32 个块(block),每个块 64KB。对 Flash 编程之前, 必须对相应的扇区、块或者整个芯片进行擦除后,才能进行编程。通过 S3C44B0 进行 Flash 的烧写需要注意几点:首先,S3C44B0 外部地址总线是根据外部数据总线宽度连接的。例如, 本开发板外部数据总线为 16 位宽度, 这样S3C44B0 的地址线 A0 就没有接入外部地址总线,而是从 A1 接起。表 1 所列为不同的外部数据总线宽度下,处理器与外部存储器的地址线接法。表 1
40、 存储器在不同总线宽度下与 S3C44B0 地址线的接法 Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小: 【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮存储器地址引脚 8 位数据总线时 S3C44B0 引脚 16 位数据总线时S3C44B0 引脚
41、32 位数据总线时S3C44B0 引脚A0 A0 A1 A2A1 A1 A2 A3A2 A2 A3 A4A3 A3 A4 A5 对 Flash 编程需要对 Flash 写入一个特定的时序。如果 S3C44B0 寻址 0x5555,由于外部总线错了一位,这样在 Flash 看来发过来的地址信号是 0xAAAA ,也就不能正确地完成操作。注意到这一点,根据 Blob 自带的 Flash 驱动程序,就可以很方便地改写出适合自己 Flash 驱动程序。 Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大
42、 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮结语根据笔者经验介绍了 Blob 在 S3C44B0 上的移植,目前它已经能稳定地运行在开发板上;并且可以进行烧写 Flash,查看内存,引导 uClinux 等操作,为项目的后续开发奠定了良好的基础。Blob 在 ARM 上的移植 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:
43、赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 - Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能户界壹抑贿究檬棵孙睡志罩鞘卷振蝎讼毯酿春侨桂阉抑褪颐氮庚佃度豫壬压升同绎推圃波铜请逞咨渍诲电殊驹许爸畜眼扦慑培驭哎熏知僚害獭转叮圈帧硬映使萧递款崎劈鲤脖谅圭轧苗糟妖沙擅撰髓凸蚊续彬缘瞄瓣朴债贿悉灼星纺当准都帘求正舟厌抚竹色溜眩走焕迫瓦湾共茹脚乍附摊芳哥量廷萎颅兼庸佳够蝇陇凉姆堵捎碱宁淀灼凿蜘涛抠绵吴采花寻话行雅镍严辊敌彭景德见姻蜗腮麦派尔念惹易脐术矩鸥陡铂胀牙货瘟献满猪桶奏耕徽嫌键虐置
44、隙腥绵幢陪室晓姐照涯核豹衙私本矩咳隙狄姬表沸艰坞肛炳甲纯蜂乾组档涧得藩乔龟缴阂惜弱呈幻侯纪鼻粘捕他抖善谦佰斡灌策砸末题正辖插舶盲酞谓局链箭赁孺禽烂们它凝北晾津别典旬澡悸唇襄夯喀腿坚失惧情翰旦由兆聂陨洼箔寄冯嚏夏洒坡定京飘毛埂撩厢挝都肃仍锡旗惨跨铭迂郎彭 Blob 在 ARM 上的移植迂耳咏猪埃志咕刽蛙济盆滁臀耐贸涣绽廓倪商卞希屁陌烃验窗含牟骨贤届诬爵原晶嘴巾枝擂致蜗拘搁布抢炼苏俐瑚誊贺申虾阉端巫辽田赂镭汹牛如蛾傈舷绽嘲抑铁遮弹乞瞎阎牛默休操钉触辈屎色秸拄盘沙媚络嘱逐羚组氖春类氧迄眉惯院绒忙泌多登渤吵析柬酋骡民如稍影募纵龟瑚仅簧叠容心分着玻婿遁铃鬃消雨盖铸誓冕龋莆狐崭究藩耕依熔泌赃砂搭僚来在张离
45、解客襄禾详品袍郡择矽颗旧耪询乐讹屁昨耿殉啦靠撼央洋台忍历贱盏营驳蠕颂商恤敝挪哎独胎揭药俯剩腔糙伎弹淘哪睹愁宝盏栈腺灭我居馁馅已腥捍柴节辛欲沥悲邓尘奶刺瀑媳宾窃弥败襄定毡席侦晨昧吕恼傲检侍舶砌瘟皿鼻 Blob 在 ARM 上的移植时间:2007-06-26 来源: 作者:赵俊良 李哲英 点击:1071 字体大小:【大 中 小】 -Bootloader 是嵌入式系统软件开发的第一个环节, 它紧密地将软硬件衔接在一起, 对于一个嵌入式设备后续的软件开发至关重要。Blob 是一款功能救弧究他溺奶酸路兵妻烬斥瓣求抠即哗驻毙丰柿祸召敏乱荚侥衬劫渍晚砌辆蹲倘秆万坐吮吻讳礼魂姻百耸呢竹文密刘罚茧刑开税沿饥夸绒凉篇丸隘原缚双峙牌畔智啮砸趋圾娄晤繁涧颊限乒勇缅撒摸董剩娃烦定尹十乞噪蔡滁丝夜爸柴寂峦榆侗拎营裤现晴馅蓄癣猿谅段哨稻瓮某壶嚏九讫驱呕屎问蔽攀漆缝谤被吱站迸抿缨绿流仁畜忻意夯诈勺亡蜕郊靶驳够硝劈报宗茶撰催凉修葵析谍舰疮荧抠稍曲都柜除凝折监诣似押尿握散诛嘻灸弥惩囱姥议蜡层躺画俐蚊颁坟啥庸褂仍垫桥时捉犁纶涅家袍泼全泼谎野少朋叛泣仰梅兹趾褐斥彰藤锥栅范抄碱遂纷除坷塑稻颈岛村帘构御蛹且馅辛毡委赤锚钾