作者信息

作者:彭东林

邮箱:pengdonglin137@163.com

QQ: 405728433


平台介绍

开发环境:win7 64位 + VMware11 + Ubuntu14.04 64位

开发板:tiny4412ADK + S700 + 4GB eMMC + 1G DDR3

工具链:友善之臂提供的 arm-linux-  (gcc version 4.5.1)

要移植的u-boot版本:u-boot-2015-10

参考u-boot版本:友善之臂提供的 u-boot-2010-12

摘要

本博文简要分析了移植u-boot-2015-12到tiny4412,采用的是spl的启动方式,目前可以做到的是进入u-boot的命令终端,如下图:

而且仅仅支持从SD卡启动,以后会慢慢完善。

移植

要移植u-boot到tiny4412,首先我们需要对这块板子的启动方式地址空间分配有清楚的认识。此外,由于刚开始只需要做到进入u-boot的命令行(如上图),其中至少涉及到了系统时钟初始化内存初始化以及串口初始化,做到这三点,就为以后的各种工作铺平了道路。

下面是一些参考资料:

  1. 技术部落 (这个网站对tiny4412的启动、时钟、串口以及内存初始化进行了详细的讲解)
  2. 嵌入式Linux系统开发完全手册_基于4412_上册.pdf (这个文档是韦东山写的,讲的也非常好)
  3. Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf (这篇文档是Samsung的,详细介绍了这款SOC的启动)
  4. SEC_Exynos4412_Users Manual_Ver.1.00.00.pdf (这篇文档也是Samsung的,是exynos4412的用户手册,有两千八百多页,包含了exynos4412的详细信息)

下面我简要说明。

  • exynos4412的地址空间

我们需要关注的主要是上面三个。

iROM:这段地址空间对应exynos4412内部固化的一段程序,exynos4412启动的第一条指令就存放在这里。

iRAM:这段地址空间对应的是exynos4412内部的一个存储器,这段存储器的特点是上电就可以用,不用初始化。

DMC0:这段地址空间就是核心板上的DDR3对应的存储空间(我的tiny4412有1GB的DDR3,所以地址空间是0x40000000-0x80000000),上电后需要初始化DRAM控制器才能使用。

  • exynos4412的启动

可以有几张图:

图一

图一中,iROM首先运行,然后根据OM的值判断从哪个存储设备加载BL1到iRAM,然后BL1再根据OM的值判断从哪个存储设备加载OS到DRAM中。注意:以tiny4412从sdcard启动为例,iROM固化在SOC内部,BL1是Samsung提供的镜像文件E4412_N.bl1.bin,OS在这里可以认为是BL2,这部分是u-boot代码中编译生成的SPL,BL2是由BL1加载到iRAM中运行的。最后,BL2再根据OM值,从sdcard中将u-boot代码拷贝到DRAM中。

图二

图二中,显示了iROM、BL1和BL2的运行地址空间,iRAM的地址空间是0x02020000-0x02060000。由于iROM是只读存储器,所以把iRAM的0x02020000-0x02021400的5KB地址空间分配给iROM用,用于存放iROM的全局变量(ZI/RW,分别存放全局未初始化变量、全局已初始化变量)、局部变量(stack)等等。从0x02021400-0x02023400的8KB地址空间属于BL1,可以认为BL1的第一条指令就存放在0x02021400地址单元。紧接着的0x02023400-0x02027400的16KB地址空间属于BL2,即:BL2的第一条指令存放的地址就是0x02023400,这个值很重要,如果我们的SPL中有“非位置无关码”,那么就必须将SPL加载到其运行地址处,否则在执行那些非位置无关码的时候会出错,我们知道,SPL这段程序是由BL1负责加载到iRAM的0x02023400地址处运行的,但是BL1是Samsung提供的,并没有源代码,只有二进制镜像,所以在SPL有“非位置无关码”的时候,必须将SPL的链接地址设置为0x02023400.

图三

图三中是从sdcard启动时,程序在sdcard中的布局。其中sdcard的扇区大小是512B。第0个扇区是保留扇区,第1到第16扇区共8KB的空间存放BL1(也就是:E4412_N.bl1.bin),从第17到第48扇区的16KB空间用于存放BL2(也就是u-boot-spl.bin),之后的扇区可以根据实际需求自己安排。

关于时钟、DRAM、串口的初始化请参考上面列出的参考资料。

有了上面的基础知识,下面开始移植。

基于tiny4412的u-boot移植(一)的更多相关文章

  1. 基于tiny4412的Linux内核移植(支持device tree)(三)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  2. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  3. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  4. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  5. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  6. 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. 基于tiny4412的Linux内核移植 -- PWM子系统学习(七)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  9. 基于tiny4412的Linux内核移植 -- SD卡驱动移植(五)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  10. 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

随机推荐

  1. PhotoSwipe中文API(五)

    Responsive Images PhotoSwipe不支持<图片>或srcset,因为它要求所定义的图像的尺寸,并使用延迟加载.但是,随着图像动态加载,它很容易切换人士透露,即便是在旧 ...

  2. (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API

    swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...

  3. 【转】Deep Learning(深度学习)学习笔记整理系列之(三)

    好了,到了这一步,终于可以聊到Deep learning了.上面我们聊到为什么会有Deep learning(让机器自动学习良好的特征,而免去人工选取过程.还有参考人的分层视觉处理系统),我们得到一个 ...

  4. idea中使用插件Grep Console在IDEA的log的不同的级别,可以设置不同的颜色。

    一.安装. 1. 2. 3. 二,使用. 1. 2.

  5. RC1意思

    软件各种版本的表示 alpha 内部测试版 beta 外部测试版 demo 演示版 Enhance 增强版或者加强版 属于正式版 Free 自由版 Full version 完全版 属于正式版 sha ...

  6. Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  7. linux第七周

    可执行程序的装载 一.预处理.编译.链接和目标文件的格式 可执行文件的创建——预处理.编译和链接 cd Code vi hello.c gcc -E -o hello.cpp hello.c -m32 ...

  8. 20145325张梓靖 《Java程序设计》第7周学习总结

    20145325张梓靖 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治时间,简称GMT时间,由观察太阳而得来:世界时,UT:国际原子时,TAI:世界协调时间,U ...

  9. ubuntu16.04安装tensorflow官方教程与机器学习资料【学习笔记】

    tensorflow官网有官方的安装教程:https://www.tensorflow.org/install/install_linux google的机器学习官方快速入门教程:https://de ...

  10. vim删除某一列

    step1.按键盘上的Esc按键进入vi的命令行模式 step2.点击Ctrl和v按键 step3.按上下左右键选中要删除的内容 step4.按d即可删除选中的列