基于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 要移植的内核版本 ...
随机推荐
- PhotoSwipe中文API(五)
Responsive Images PhotoSwipe不支持<图片>或srcset,因为它要求所定义的图像的尺寸,并使用延迟加载.但是,随着图像动态加载,它很容易切换人士透露,即便是在旧 ...
- (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...
- 【转】Deep Learning(深度学习)学习笔记整理系列之(三)
好了,到了这一步,终于可以聊到Deep learning了.上面我们聊到为什么会有Deep learning(让机器自动学习良好的特征,而免去人工选取过程.还有参考人的分层视觉处理系统),我们得到一个 ...
- idea中使用插件Grep Console在IDEA的log的不同的级别,可以设置不同的颜色。
一.安装. 1. 2. 3. 二,使用. 1. 2.
- RC1意思
软件各种版本的表示 alpha 内部测试版 beta 外部测试版 demo 演示版 Enhance 增强版或者加强版 属于正式版 Free 自由版 Full version 完全版 属于正式版 sha ...
- Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...
- linux第七周
可执行程序的装载 一.预处理.编译.链接和目标文件的格式 可执行文件的创建——预处理.编译和链接 cd Code vi hello.c gcc -E -o hello.cpp hello.c -m32 ...
- 20145325张梓靖 《Java程序设计》第7周学习总结
20145325张梓靖 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治时间,简称GMT时间,由观察太阳而得来:世界时,UT:国际原子时,TAI:世界协调时间,U ...
- ubuntu16.04安装tensorflow官方教程与机器学习资料【学习笔记】
tensorflow官网有官方的安装教程:https://www.tensorflow.org/install/install_linux google的机器学习官方快速入门教程:https://de ...
- vim删除某一列
step1.按键盘上的Esc按键进入vi的命令行模式 step2.点击Ctrl和v按键 step3.按上下左右键选中要删除的内容 step4.按d即可删除选中的列