作者信息

作者:彭东林

邮箱: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. php中使用Curl、socket、file_get_contents三种方法POST提交数据

    抓取远程内容,之前一直都在用file_get_content函数,其实早就知道有curl这么一个好东西的存在,但是看了一眼后感觉使用颇有些复杂,没有file_get_content那么简单,再就是需求 ...

  2. Mac Atom的PHP插件

    首先,需要在 ~/.atom目录下创建 .atom文件,写入如下内容: strict-ssl = false http_proxy = socks5://127.0.0.1:16888 https_p ...

  3. 分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)

    MogileFS分布式文件系统特点: 1.具有raid的性能 2.不存在单点故障 3.简单的命名空间: 每个文件对应一个key:用于domain定义名称空间 4.不共享任何数据 5.传输中立,无特殊协 ...

  4. C语言头文件#include<stdlib.h>的作用

      stdlib 头文件即standard library标准库头文件 stdlib 头文件里包含了C.C++语言的最常用的系统函数 该文件包含了的C语言标准库函数的定义 stdlib.h里面定义了五 ...

  5. activiti整合spring

    activiti的配置文件其实就是一份spring的配置文件,只是默认将processEngineConfiguration做为一个bean来读取. 当和spring进一步整合时,需要使用 Sprin ...

  6. java第六天

    p37 1.java ant详解 练习8 /** * Created by xkfx on 2017/2/26. */ class A { static int i = 47; } public cl ...

  7. 20145315 《Java程序设计》第三周学习总结

    20145315 <Java程序设计>第三周学习总结 教材学习内容总结 第四章 4.1类与对象 4.1.1定义类: new clothes():新建一个对象. class clothes ...

  8. TCP状态迁移

    TCP的状态变迁图 CLOSED:表示初始状态.对服务端和C客户端双方都一样. LISTEN:表示监听状态.服务端调用了listen函数,可以开始accept连接了. SYN_SENT:表示客户端已经 ...

  9. POJ 1860 Currency Exchange(Bellman-Ford)

    https://vjudge.net/problem/POJ-1860 题意: 有多种货币,可以交换,有汇率并且需要支付手续费,判断是否能通过不断交换使本金变多. 思路: Bellman-Ford算法 ...

  10. 机器学习-ID3决策树算法(附matlab/octave代码)

    ID3决策树算法是基于信息增益来构建的,信息增益可以由训练集的信息熵算得,这里举一个简单的例子 data=[心情好 天气好  出门 心情好 天气不好 出门 心情不好 天气好 出门 心情不好 天气不好 ...