这里我们来看XLOADER_ENTRY中调用的第二个标号ddr_init处的代码,这部分代码的作用是对外部内存SDRAM进行初始化,在我 spearplus开发板中,使用的是DDR SDRAM。在调用ddr_init之前,外部内存是不能用的,因为外部内存的时钟以及控制寄存器都还没有初始化,因此此时只有芯片内部的SRAM以及在 sys_init的时候已经初始化了的Serial Flash、UART以及gmac是可用的。

而ddr_init的作用就是根据板子 使用的外部SDRAM来对外部内存进行初始化,针对不同的板子使用不同的SDRAM的,需要根据特定的SDRAM来定制这个初始化过程,这也是为什么要把 ddr_init单独放在一个文件中的原因,便于在不同的外部内存之间的代码移植。

在这里,我还有很多不明白的地方,我想是因为我对硬件 不过熟悉的缘故。所以很多代码只能够看到它的表面,真正代码想要完成的功能需要结合各个寄存器本身的作用以及对SDRAM初始化的整个过程的定义才能够看 清楚。但是,这需要阅读大量的芯片手册,这对于我来说,至少目前还不具备这种能力和条件,因此暂时先放一放,等到以后真正需要用到的时候再回过头来仔细研 究。在这里,我们只需要明白,这一段代码,是在对特定的外部内存进行初始化,初始化完成之后,外部内存就可以使用了,将来uboot以及linux kernel的代码都需要转移到外部内存之后才可以运行的。

对于我的代码来说,ddr_init位于Xloader根目录下面的ddr/splus_mt47h128m8_3.266_c15_map_async.S中,完整的代码以及对代码的粗略分析如下:

嵌入式Linux引导过程之1.4——Xloader的ddr_init相关推荐

  1. 嵌入式Linux引导过程之1.3——Xloader的sys_init

    上一篇文章对XLOADER_ENTRY进行了分析,看到其中调用的第一个标号就是sys_init,本文就对这个标号对应的代码段进行粗略的分析,这里我也还有好多没有搞明白的,就先留着,日后慢慢明白,先把自 ...

  2. linux嵌入式c网络编程,嵌入式Linux网络编程之:网络高级编程

    本文引用地址:http://www.eepw.com.cn/article/257115.htm 在实际情况中,人们往往遇到多个客户端连接服务器端的情况.由于之前介绍的如connet().recv() ...

  3. linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...

    10.3  网络高级编程 在实际情况中,人们往往遇到多个客户端连接服务器端的情况.由于之前介绍的如connet().recv()和send()等都是阻塞性函数,如果资源没有准备好,则调用该函数的进程将 ...

  4. 嵌入式linux ntpd命令,嵌入式Linux网络编程之:实验内容——NTP协议实现

    本文引用地址:http://www.eepw.com.cn/article/257114.htm 10.4实验内容--NTP协议实现 1.实验目的 通过实现NTP协议的练习,进一步掌握Linux网络编 ...

  5. 基于AT91SAM9G20构建嵌入式Linux系统

    本文中使用的目标平台AT91SAM9G20是Atmel公司使用ARM926EJ-S处理器内核开发的一块SoC嵌入式微处理器,主频达到400MHz,具有Atmel 先进的外设DMA 和分布式存储器架构, ...

  6. 如何建立Qt Creator交叉编译嵌入式Linux

    如何建立Qt Creator交叉编译嵌入式Linux 介绍 Qt许可信息 Qt 5 安装Qt Creator 用于设备创建的Qt 构建和部署目标映像 构建用于开发的SDK 安装SDK 配置Qt Cre ...

  7. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多. 嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NA ...

  8. 【疯壳·嵌入式平板开发教程1】手把手教你做平板电脑-Linux 引导过程

    Linux 引导过程 --疯壳·嵌入式平板开发 Linux 内核与 Android 系统 linux 内核有什么区别?    什么是引导装载程序?   什么是 Zygote?    什么是 init. ...

  9. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

最新文章

  1. Android_CodeWiki_01
  2. android荧光进度条,CSS3 彩色荧光棒进度条
  3. docker笔记1----Get Docker
  4. springboot支持三种嵌入式servlet容器:tomcat(默认),jetty,undertow
  5. Data Warehouse Hardware - DW硬件需求计算
  6. Bumblebee微服务网关之Url重写
  7. androidstudio 日历视图怎么显示农历_中秋国庆旅游攻略怎么做?用这个便签软件很简单...
  8. Linux环境下创建运行.java文件
  9. 14个JavaScript代码优化技巧
  10. python 数据分析领域常用的包
  11. java 气象数据_科学网-下载某地历史逐小时环境气象数据的方法-风速风向温湿度-洪晓强的博文...
  12. js获取浏览器内核版本信息
  13. python坐标转化极坐标_matplotlib极坐标方法详解
  14. Nodejs pm2 使用
  15. cad两直线相交画圆弧_CAD两直线,如何用圆弧连接?
  16. 易语言程序c盘路径,易语言取文件路径的操作教程
  17. 苹果充电线android头断了,【黑科技数据线!断了都能用!】 苹果安卓数据线 快速修复永不断线...
  18. 7-11 哥德巴赫猜想
  19. 白光干涉仪压电陶瓷的大作用 | 科普篇
  20. LINUX基础实验练习

热门文章

  1. oracle 10092,Oracle诊断事件列表
  2. 微信开发者工具开发微信小程序
  3. 前端项目搭建部署全流程(一):搭建React项目
  4. matlab入门学习资料
  5. 考研复试c语言面试题,2019考研复试面试问题:你的最大缺点是什么
  6. Redis 的 Sentinel 系统
  7. html 引入网页title的图标,生成 .ico 图标
  8. 生鲜新零售异军突起,科技才是核心驱动
  9. 大数据系列 -- 数据埋点
  10. 会计专业为什么要学python-财务人要学Python吗?