基于tiny4412的u-boot移植(一)
作者信息
作者:彭东林
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的命令行(如上图),其中至少涉及到了系统时钟初始化、内存初始化以及串口初始化,做到这三点,就为以后的各种工作铺平了道路。
下面是一些参考资料:
- 技术部落 (这个网站对tiny4412的启动、时钟、串口以及内存初始化进行了详细的讲解)
- 嵌入式Linux系统开发完全手册_基于4412_上册.pdf (这个文档是韦东山写的,讲的也非常好)
- Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf (这篇文档是Samsung的,详细介绍了这款SOC的启动)
- 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移植(一)的更多相关文章
- 基于tiny4412的Linux内核移植(支持device tree)(三)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(七)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- SD卡驱动移植(五)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
随机推荐
- wordpress的安装及使用
1.如何查看别人的wordpress站点所有的模板 2.如何使用自定义的模板
- 远程终端登录软件MobaXterm
提到SSH.Telnet等远程终端登录,我相信很多人想到的都是PuTTY[注A]. PuTTY足够成熟.小巧.专注核心任务,并且对编码等常见坑的处理并不缺乏,这其实都是优点.但PuTTY在额外功能上就 ...
- Linux系统——DNS
DNS系统的作用1. DNS服务器Internet中,大部分网站.邮件服务等服务器都使用了域名形式的地址,这种地址形式要比使用IP地址形式更加直观,更加容易被用户记住.FQDN格式(完整域名格式):在 ...
- C# 复杂格式多级深度XML序列化反序列化
default.xml 文件如下: <config><partnerships> <partnership name="Main_Listener" ...
- Linux 中的 Service
参考: cnblogs.com/xiaofan21 - linux service和daemon cnblogs.com/xuange306 - linux service命令常见使用方法 cnblo ...
- 38初识xml
XML(可扩展标记语言)是一种用于记录多种数据类型的标记语言.使用XML可以将各类型的文档定义为容易读取的格式,便于用户读取.而且,在应用程序中使用XML,可以轻松实现数据交换. QT中提供两种访问X ...
- web前端基础补充
1 布局和事件 布局效果如下(标题和内容都居中,两边留空白) 布局代码如下 <!DOCTYPE html> <html lang="en"> <he ...
- numpy模块学习笔记
# encoding=utf-8 import numpy as np from numpy.linalg import * def main(): # 1.最基本的array lst = [[1, ...
- PHP保存Base64图片base64_decode的问题 文件打不开的问题
PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码. 编码上,只要将图片流读取到,而后使用base64_encode进 ...
- css 文档流中块级非替换元素水平区域的计算规则(1)
最近在读<Basic Visual Formatting in CSS>,结合以前看的<css权威指南>和css标准.今天就做个笔记. 以前在遇到一些宽度不明确指明的一些布局的 ...