linux内核ddr初始化,X-007-UBOOT-DDR的初始化(Bubblegum-96平台)

X-007-UBOOT-DDR的初始化(Bubblegum-96平台)

作者:wowo 发布于:2016-7-21 22:47

分类:X Project

1. 前言

到目前为止,“X Project”在Bubblegum-96平台上的代码,都是运行在SRAM中。由于SRAM的size很小(最多也就96KB),如果要做更多的事情,就必须把DDR跑起来。不过,关于Bubblegum-96平台的DDR driver,我和codingbelief同学折腾了很久,试图找出一个最佳的方法,给大家呈现出DDR driver的开发方法和开发步骤。最终,受限于“资源”的短缺,还是失败了。

根据Bubblegum-96公开的资料,只知道它包含了一个2GB的、单bank的LPDDR,除此之外,找不到任何技术有关的细节,如LPDDR的datasheet、S900 DDR controller的说明、DDR时钟的配置等等。没有这些东西,我们根本无法完成DDR的配置,更不用说以此介绍、分析DDR driver了。

但是,虽然困难重重,“X Project”还是要进行下去,既然常规方法走不通,我们就采用一些非常规的手段,无论如何,还是能把DDR成功的初始化起来的。由于是非常规手段,当然就无法开源,也无法给大家讲解了。

因此,本文关于DDR的技术细节不多,主要目的是结合DDR的初始化,进一步介绍嵌入式linux开发的基本过程,包括如下知识点:

嵌入式Linux的启动过程。

u-boot SPL的使用场景。

u-boot启动过程中DDR初始化的流程。

2. Bubblegum-96的启动过程

由于RAM资源的短缺,嵌入式系统的启动过程是相当繁琐的,以Bubblegum-96为例:

CPU启动时,只有96KB的SRAM可用。

CPU启动时,ROM code只会从外部存储介质中(NAND、MMC、SD等)拷贝并执行2KB的代码。

首先与上面两个条件,Bubblegum-96的启动代码必须具备如下的特点。

1)软件从外部存储介质加载并执行的时候

a)第一个被执行的image,必须小于2KB(我们暂时称它为SPL,Secondary Program Loader)。

b)SPL在有限的size中,必须完成两个事情:初始化DDR;将后续的启动代码(如u-boot)从存储介质中copy到DDR中执行。

c)u-boot在DDR中运行(不再受限于系统资源),进行必要的初始化之后,将linux kernel copy到DDR中并执行。

d)linux kernel执行,并加载rootfs。

2)固件更新的时候(这里提供一种方案,将借助Android的fastboot,不唯一)

a)第一个被执行的image(SPL),必须小于SRAM的size(根据经验,Bubblegum-96平台,要小于70KB)。

b)通过ROM code的DFU程序,将SPL上传到SRAM并执行。

c)SPL初始化DDR,并将控制权重新交给ROM code的DFU程序。

d)通过ROM code的DFU程序,将u-boot(size不再受限)上传到DDR并执行。

e)u-boot中启动fastboot服务,通过fastboot协议,更新固件。

本文将基于“X Project”前面的成果,介绍通过将SPL上传到SRAM并执行、初始化DDR,然后再把u-boot上传到DDR并执行的过程。

3. 初始化过程介绍

3.1 编写DDR driver,正确初始化DDR

由于非技术的原因,这里无法多说,感兴趣的同学,可以在资料充足的情况下,在自己的板子上尝试。最终的结果,就是导出一个类似于xxx_ddr_init()的接口,该接口会被SPL调用。

3.2 在SPL的初始化代码中,调用DDR的init接口,初始化DDR,然后将控制权交回给ROM code

基于“X-003-UBOOT-基于Bubblegum-96平台的u-boot移植说明”的成果,我们已经可以在SPL的board_init_f接口中点亮一盏LED灯,现在要做的,就是调用DDR的初始化接口,如下:

void board_init_f(ulong bootflag)

{

bubblegum_early_debug(1);

#ifdef HAS_DDR_SOURCE_CODE

s900_ddr_init();

#endif

reboot_to_adfu();

}

注1:这里之所以要加一个宏定义,是因为源代码中没有DDR的source code,避免编译错误而已。

DDR初始化完成后,需要把控制权交回给ROM code的DFU程序,这可要费一番心思,如下:

static void reboot_to_adfu(void)

{

void (*call_adfu)(void);

//call_adfu = (void (*)(void))0xffff5a00;

call_adfu = (void (*)(void))0xffff0400;

call_adfu();

while (1);

}

我这里用了一个比较笨的方法,直接跳转到S900 ROM code的起始地址了,大家可以根据自己平台的实际情况,自行处理。

以上SPL并没有source code提供,我把编译出来的bin文件共享出来了,可参考:

3.3 修改u-boot的代码,完善dram_init接口,告诉u-boot当前DDR的size

int dram_init(void)

{

printf("dram_init\n");

bubblegum_early_debug(11);

/* no need do dram init in here, we have done it in SPL */

gd->ram_size = 2 * 1024 * 1024 * 1024;    /* 2GB, TODO */

printf("dram_init OK\n");

return 0;

}

由于SPL已经完成了DDR初始化,这里什么事情都不需要做,只要通过gd->ram_size告知u-boot DDR的size(这里是2GB)即可。当然,这里的赋值有点粗暴,后续再完善吧。

3.4 修改u-boot的配置项,将u-boot编译到DDR中,从DDR执行

改动如下:

-#define CONFIG_SYS_TEXT_BASE CONFIG_SPL_TEXT_BASE

-#define CONFIG_SYS_INIT_SP_ADDR CONFIG_SPL_STACK

+#define CONFIG_SYS_TEXT_BASE 0x11000000

+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7ff00)

/* Some commands use this as the default load address, TODO */

-#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE)

+#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7ffc0)

S900 DDR的地址映射是从0x0开始的,我们随便找一个地址(这里是0x11000000)。编译生成新的bin文件后,进行简单的测试,具体如下。

以上可参考如下patch:

4. 测试

在build目录编译完成后,按照如下的步骤执行:

1)按住Bubblegum-96的ADFU键,使板子进入DFU模式

2)按住Bubblegum-96的ADFU键不松开,将splboot.bin(就是我们的SPL image)上传到SRAM并执行

sudo ../tools/dfu/dfu bubblegum 0xe406b200 ../tools/actions/splboot.bin 1

3)执行完毕后,会重新进入DFU模式,进入后,可以松开ADFU按键。

4)将u-boot上传到DDR并执行(注意上传位置和CONFIG_SYS_TEXT_BASE 一致)

sudo ../tools/dfu/dfu bubblegum 0x11000000 out/u-boot/u-boot-dtb.bin 1

5)检查串口打印,执行成功。

原创文章,转发请注明出处。蜗窝科技,www.wowotech.net。c6a6308114f401be7df747ae46f2b4db.png

评论:

ary

2016-08-07 20:06

我觉得wowo可以考虑先在一个成熟的开源板子上做一遍移植,一是通用的板子大家都能买到,另外就是开源板子硬件公开程度更高,资料更全,移植更方便

2016-08-07 20:27

@ary:多谢提议,其实不用太在意板子,大家可以用不同的板子,思路一样就可以了。

另外不成熟的板子,会遇到一些问题,有问题也是学习的过程。

现在有同学在tiny210上面移植了(比较成熟了),可以参看:

http://www.wowotech.net/forum/viewtopic.php?id=52

2016-07-25 19:39

wowo:

Bubblegum-96这个板子你们是买的还是?

2016-07-26 08:52

@pingchangxin:我们手上的是厂家送的。

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

d4e3789769c8ad44c7e403863bfc3822.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 4.4内核特性,Linux Kernel 4.4.19 LTS长期支持版发布

原标题:Linux Kernel 4.4.19 LTS长期支持版发布摘要:近日,内核开发者Greg Kroah-Hartman公布了长期支持的Linux 4.4 Kernel系列第19个维护版本的细节。Linux 4.4是目前最新的LTS内核分支,被Arch Linux, Solus和Ubuntu Linux等众多…

linux 软件源 概念,Linux 软件源介绍

陈科肇1.软件源简介软件源是Linux系统免费的应用程序安装仓库,很多的应用软件都会这收录到这个仓库里面,按类型分则有:1).软件仓库:各类软件的二进制包和源代码2).ISO镜像:发行版的ISO文件软件源可以是网络服务器&…

c语言汇编混编,c语言与汇编混编写法

R13 (stack pointer)R14 (Link Register)R15 (program counter)c语言中内嵌汇编的规则:内嵌汇编器与armasm的区别:访问全局变量:unsigned char LDRB/ STRBunsigned short LDRH/STRHunsigned int LDR/…

买iphone不买android,为何宁可用4年前的苹果6s,也不买两三千的安卓呢?理由很真实...

在这个信息时代,几乎每个人都离不开手机,手机渗入到了我们生活的方方面面,不管是社交聊天、还是影音娱乐,甚至是办公出行,没有手机,很多人都会寸步难行。全球的智能手机市场竞争处于白热化的阶段&#xff0…

html5画图作品,8款最佳HTML5绘图工具

HTML5无疑是当前最受宠的一项技术,今天推荐8款HTML5绘图工具,同样惊艳你的眼球!这些绘图工具大多数是用HTML5画布(Canvas)实现的,部分辅以Javascript。对每一个web设计者来说,制图和草绘是他们工作中最喜欢的一件事情了。草绘和制…

vivoiqooz1鸿蒙系统,iQOOZ1评测:vivo新一代性价比神机

【手机中国评测】如果说2019是5G发展的元年,那么2020就是5G技术和终端奋起发力的一年。纵观目前市面上的5G机型我们不难发现,“涨价”已经成为了2020年的新关键词。技术成本的提升,让5G手机似乎失去了我们传统意义上的性价比。但这世间从来不…

qt解析html的数据,windows下用QTwebkit解析html

环境windows7 VS2010 QT5.2_opengl配置开发环境1、安装VS20102、安装QT 5.23、安装Visual Studio Add-in for QT54、配置VS 2010配置路径:QT5 > "Qt Options" > "Qt Versions" > Add默认路径为:C:\Qt\Qt5.2.0\5.2.0\msvc…

计算机网络拓扑图的描述,计算机网络拓扑结构 以下关于星型网络拓扑结构的描述正确的是______。 (多选题 )...

题目和答案在最下面!全文转自百度,自己总结方便自己以后查找!常见类型:星型拓扑总线拓扑▪ 环型拓扑▪ 树型拓扑▪ 混合型拓▪ 网型拓扑开关电源拓扑简单介绍的:星型优点:可靠性高,方便管理&…

考研生物和计算机结合的专业,2020考研:生物医学工程,考研是考原专业还是跨专业考计算机好?...

中公浙江研招网温馨提醒您关注专业解析:【2020考研:考研想考编程专业但没基础,该怎么准备?】2019浙江考研复试群:8663839642020浙江考研交流群:416469560许多考生在报考专业的时候会很茫然,怕考原专业毕业…

vue项目编写html,从头搭建、编写一个VUE项目

一、创建VUE项目1、新建一个vue项目进入工作目录,新建一个vue项目:vue init webpack 项目名vue init webpack vue-project-demoimage.png说明:Vue build > 打包方式,回车即可;Install vue-router > 是否要安装 v…

nodejs 保存html文件路径,nodejs如何将获得的数据保存到本地?

nodejs将获得的数据保存到本地可以使用Cookie进行数据保存或使用sessionStorage、localStorage进行数据保存。使用Cookie保存Cookie这个恐怕是最常见也是用得最多的技术了,也是比较古老的技术了。Cookie优点很多,使用起来很方便 但它的缺点也很多&#x…

大一的我

emmm,今天开始更新第一篇博客啦,一位ACM新人,请多多关照啦。先上一张ak图片激励一下自己(隐私问题所以码掉一部分) 一会更新一下

html 旋转木马 轮播,JS实现旋转木马式图片轮播效果

本文实例为大家分享了js图片轮播的具体代码,供大家参考,具体内容如下主要html代码:Documentfunction $(id){ return document.getElementById(id);}var js_wrap $("js_wrap");var wrap_slide $("wrap_slide");var wrap…

加拿大前十大学计算机硕士学费,2018年加拿大各大学硕士学费一览表!

原标题:2018年加拿大各大学硕士学费一览表!加拿大硕士留学备受国内留学生的青睐,那么加拿大大学硕士的学费情况也是备受关注。今天威久留学专家就和大家说说加拿大大学硕士留学学费的情况!2018加拿大各大学硕士学费一览:1、蒙特爱…

素数环(dfsamp;amp;STL做法)HDU - 1016

HDU - 1016 cxsys训练第一周&第二周A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. Note: the number of first circle should…

微型计算机及接口技术试卷,微机原理及接口技术试题以及答案

38.如要选择2PSW(地址为DOH)的格式为39.执行下列指令组后,(A)_________标志位(OV)_________(P)_________MOV A,#0B4HADD A,#00HSUBB A,#51H40.执行下列指令组后,累加器(A)_________。它与R1中内容的关系是_________MOV R1,#87HMOV…

w7系统计算机e盘无法打开,Win7电脑磁盘打不开怎么办

Win7系统电脑磁盘出现异常,不管是C盘、D盘还是E盘都打不开,并且还出现“位置不可用 无法访问 E:\ 拒绝访问”的提示。那么Win7磁盘打不开怎么办呢?下面是学习啦小编给大家整理的一些有关Win7电脑磁盘打不开的解决方法,希望对大家…

距离高考出成绩,一年了、、、

去年2017.6.24日,下午4点,怀着紧张的心情,,,查看了自己的高考分数。 今年2017.6.24日,下午4点,不知道为什么,同样心里怦怦直跳。 一年了啊,进入大学,选择cs专…

计算机采购类增值税税率是多少,各个行业的税率是多少?

关于税收的种类,楼下税里税外 的回答非常全面。因为2018年的增值税率调整,我重点再说说调整后各行业的增值税税率,并比较下小规模和一般纳税人的税率的差别。也许对各位老板朋友有帮助。增值税的税率可以分为两类税率(4种):16%&am…

新出计算机语言有哪些,2020年最新编程语言排名(十大编程语言的比较)

2020年最新几天前,编程语言社区TIOBE最近发布了三月份的编程语言排名.在最新的编程语言排名中,前5名排名没有明显变化. 但是,与以前的报告相比,最受欢迎的开发人员仍然是Java 8和Java 11.十大编程语言排名此外,在上个月…