tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——移植u-boot.bin(打印串口控制台)
在之前我们移植的代码中,都没看到明显的效果,这节我们实现控制台的信息打印。
在上节。我们看到调用 relocate_code 重定位。在 u-boot 的帮助文档 doc/README.arm-relocation 中对重定位有说明。
u-boot 为了生成位置无关码,在链接时指定了-pie 选项,这个选项在 u-boot-2014.04/arch/arm/config.mk 中指定:
当使用-pie 选项后。链接器会生成一个修正表(fixup tables)。在终于的二进制文件 u-boot.bin 中表现为多了 2 个段 .rel.dyn 和 .dynsym。还须要在链接脚本文件里添加这 2 个段,u-boot.bin 的链接脚本文件为 u-boot-2014.04/arch/arm/cpu/u-boot.lds。有了这 2 个段,u-boot 能够依据这 2 个段的信息将重定位后的代码的链接地址修正为其执行地址。这样
u-boot 就能够重定位到不论什么地址。
在 crt0.S 中调用 relocate_code 完毕重定位,并进行地址修正,返回后进行清 BSS 操作,然后跳转到 board.c 中的 board_init_r 函数。进行更进一步的初始化。比方网卡,然后进入 main_loop 循环。重定位后的 u-boot 内存布局例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2loYWlsaW4xOTkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
如今运行 make all 编译 u-boot.bin 和 u-boot-spl.bin,可是编译错误:
在clock.c的 s5pv210_get_arm-clk中使用了samsung_get_base_clock这个宏和相关的寄存器,由于之前我们的时钟代码是用汇编实现的。所以我们在arch/arm/include/asm/arch-s5pc1xx/clock.h来定义这些寄存器:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2loYWlsaW4xOTkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
终于生成了 u-boot.bin 和 spl/tiny210-spl.bin。查看一下 u-boot.bin 的大小:
有201588B,换成块大小201588/512 =393 我们须要改动 u-boot-spl.bin 中的 BL2 拷贝函数copy_bl2_to_ram,其定义在 u-boot-2014.04/board/samsung/tiny210/tiny210.c 将拷贝大小改为 400,拷贝 400 块,保存后再次运行 make all.使用dd命令烧写到sd卡中:
打开串口终端。选择从sd卡启动,令人兴奋的事情发生了:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2loYWlsaW4xOTkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
可是却卡在这里不走了。通过跟踪代码发现,在 board.c 中的 board_init_r 函数调用了 enable_caches。如今已经能够使用 puts、 printf等函数了,我们能够通过信息打印来推断程序卡在哪里了。
一路调试下去。终于发现程序卡在
onenand_init 里:
这个宏 CONFIG_CMD_ONENAND 在 tiny210.h 中定义。我们的 tiny210 开发板没有 onenand,所以将这个宏屏蔽掉:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2loYWlsaW4xOTkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
另外,另一些和单板相关的信息,我们能够改动一下,改动 tiny210.h
与 onenand 相关的,我们查看 u-boot-2014.04/common/Makefile,看下 env_onenand.c 是怎么被编译进u-boot.bin 的是因为定义了 CONFIG_ENV_IS_IN_ONENAND 这个宏,这个宏在 tiny210.h 中定义,我们将它屏蔽掉:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2loYWlsaW4xOTkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
可是编译,还是出错:
我们查看 u-boot-2014.04/common/cmd_nvedit.c说明必须指定环境变量保存位置。我们能够将环境变量保存到 SD 卡或 NAND,可是如今还没移植好,所以先临时将 CONFIG_CMD_ONENAND 和 CONFIG_ENV_IS_IN_ONENAND 这 2 个宏打开,然后在 board.c 中屏蔽 onenand 初始化代码。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2loYWlsaW4xOTkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
再次编译,成功。
因为这次的改动仅仅针对 u-boot.bin。对 u-boot-spl.bin 没有影响。因此能够仅仅烧写 u-boot.bin 到 SD 卡的扇
区 32。
好了,移植了这么久。控制台最终能够看到效果了。试试主要的u-boot命令可不能够用:
弄了这么多天,最终有了效果,之后的事情就是在这基础上进行完好了。我把这个版本号的代码放在这:tiny210_u-boot_201404_v1.1.tar.bz2有兴趣的朋友能够看看。帮忙一起完好。
tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——移植u-boot.bin(打印串口控制台)的更多相关文章
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 启动
我们知道 s5pv210启动方式有非常多种,sd卡和nand flash 启动就是当中的两种,前面我们实现的都是基于sd卡启动,这节我们開始实现从nand flash 启动: 从 NAND 启动 u- ...
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 8位硬件ECC
这节我们实现nand的ecc,保存环境变量到nand flash 中.然后把我们之前的led灯烧写到nand flash 中.开机启动.在 tiny210.h 中定义宏 CONFIG_S5PV210_ ...
- [学习资料] Tiny210(S5PV210) u-boot移植
Tiny210(S5PV210) u-boot移植http://www.microoh.com/bbs/forum.php?mod=viewthread&tid=254&fromuid ...
- [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)
建议参考文档: S5PV210-iROM-ApplicationNote-Preliminary-20091126 S5PV210_UM_REV1.1 项目介绍参考 [project X] tiny2 ...
- [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)(转)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...
- Spring boot 基于Spring MVC的Web应用和REST服务开发
Spring Boot利用JavaConfig配置模式以及"约定优于配置"理念,极大简化了基于Spring MVC的Web应用和REST服务开发. Servlet: package ...
- 基于FPGA的DW8051移植(三)
总结一下问题: 1) http://www.cnblogs.com/sepeng/p/4137405.html 基于FPGA的DW8051移植(一)里面用modelsim观测波形发现程序进入了ida ...
- 基于STM32的uCOS-II移植详解
百度:基于STM32的uCOS-II移植详解 源:基于STM32的uCOS-II移植详解
- 基于Groovy应用程序的spring boot
spring boot CLI 它是使用Spring Boot的最简单的和快速的的方法.他是一个基于Groovy脚本的命令工具.可以按照以下步骤安装次工具: 1.去spring官网下载 http:// ...
随机推荐
- Struts2 (中)
Struts中API介绍 ServletAPI 在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的. 在实际开发中,经常使用到Servlet的API,比如进行登录 ...
- [xsy2913]enos
题意:一棵树,点有$0,1,2$三种颜色,支持路径修改颜色和查询点所在同色连通块的大小 lcm太可怕了,于是去问了sk,得到一个优质做法 考虑lct维护子树信息,$vs_{x,i}$为$x$的虚儿子中 ...
- 51Nod 快速傅里叶变换题集选刷
打开51Nod全部问题页面,在右边题目分类中找到快速傅里叶变换,然后按分值排序,就是本文的题目顺序. 1.大数乘法问题 这个……板子就算了吧. 2.美妙的序列问题 长度为n的排列,且满足从中间任意位置 ...
- bzoj 2555
暴力. 收获: 1.第一道后缀自动机,大概知道怎么写了,有一些原理性的东西还要理解. 2.计算right集合的大小 /***************************************** ...
- Hihocoder #1082 : 然而沼跃鱼早就看穿了一切 暴力
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...
- 开发移动端web页面click事件失效问题
这两天在做一个WAP页面,在chrome上模拟移动端的时候,都好好的,然而放到手机上测试时, 发现有些点击事件直接无反应,但是有些有反应: 难道是由于我页面上有用到滚动插件,里面的touch事件的pr ...
- AbstractAction
package cn.tz.action.abs; import java.io.File; import java.io.IOException; import java.text.SimpleDa ...
- python编译模块为2禁制
编译模块为2禁制yum -y install python26-setuptoolseasy_install -U setuptools# cd /usr/lib64/python2.6# easy_ ...
- android点滴之ContentObserver的使用
一概念 ContentObserver用于观察(捕捉)特定Uri引起的数据的变化,继而做一些对应的处理,当ContentObserver所观察的Uri发生变化时,便会触发它. 从概念看ContentO ...
- Tasker to stop Poweramp control for the headset while there is an incoming SMS - frozen
If you usually like to use Poweramp or any other media player to enjoy the music with headset plugge ...