在之前我们移植的代码中,都没看到明显的效果,这节我们实现控制台的信息打印。

在上节。我们看到调用 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(打印串口控制台)的更多相关文章

  1. tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 启动

    我们知道 s5pv210启动方式有非常多种,sd卡和nand flash 启动就是当中的两种,前面我们实现的都是基于sd卡启动,这节我们開始实现从nand flash 启动: 从 NAND 启动 u- ...

  2. tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 8位硬件ECC

    这节我们实现nand的ecc,保存环境变量到nand flash 中.然后把我们之前的led灯烧写到nand flash 中.开机启动.在 tiny210.h 中定义宏 CONFIG_S5PV210_ ...

  3. [学习资料] Tiny210(S5PV210) u-boot移植

    Tiny210(S5PV210) u-boot移植http://www.microoh.com/bbs/forum.php?mod=viewthread&tid=254&fromuid ...

  4. [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)

    建议参考文档: S5PV210-iROM-ApplicationNote-Preliminary-20091126 S5PV210_UM_REV1.1 项目介绍参考 [project X] tiny2 ...

  5. [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...

  6. Spring boot 基于Spring MVC的Web应用和REST服务开发

    Spring Boot利用JavaConfig配置模式以及"约定优于配置"理念,极大简化了基于Spring MVC的Web应用和REST服务开发. Servlet: package ...

  7. 基于FPGA的DW8051移植(三)

    总结一下问题: 1) http://www.cnblogs.com/sepeng/p/4137405.html  基于FPGA的DW8051移植(一)里面用modelsim观测波形发现程序进入了ida ...

  8. 基于STM32的uCOS-II移植详解

    百度:基于STM32的uCOS-II移植详解 源:基于STM32的uCOS-II移植详解

  9. 基于Groovy应用程序的spring boot

    spring boot CLI 它是使用Spring Boot的最简单的和快速的的方法.他是一个基于Groovy脚本的命令工具.可以按照以下步骤安装次工具: 1.去spring官网下载 http:// ...

随机推荐

  1. [BZOJ3638 && BZOJ3272]带修区间不相交最大K子段和(线段树模拟费用流)

    https://www.cnblogs.com/DaD3zZ-Beyonder/p/5634149.html k可重区间集问题有两种建图方式,可能这一种才可以被线段树优化. 换个角度看,这也是一个类似 ...

  2. Luogu 4492 [HAOI2018]苹果树 组合数

    https://www.luogu.org/problemnew/show/P4492 找每个编号的点的父边的贡献,组合数和阶乘就能算了. 我考场上怎么就是没想到呢. 调了好久好久好久好久调不出来,样 ...

  3. TSQL update 简单应用小总结

    UPDATE 有两种基本的格式.一种是用静态数据来修改表,另一种是用其他表中的数据来修改表.下面是第一种格式: UPDATE #famousjaycees SET jc = 'Jhony cash', ...

  4. Elasticsearch 横向扩容以及容错机制

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  5. python开发_configparser_解析.ini配置文件工具_完整版_博主推荐

    # # 最近出了一趟差,是从20号去的,今天回来... # 就把最近学习的python内容给大家分享一下... # ''' 在python中,configparser模块提供了操作*.ini配置文件的 ...

  6. sql中如何统计一字段中字符串的个数

    declare @s varchar(100)set @s='156434A27kAsdABCiosd-01&**('--找出现的次数select len(@s)-len(replace(@s ...

  7. .NET程序员提高效率的70多个开发工具

    工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节, ...

  8. vue各生命周期适合做的业务逻辑

    一.实际项目中使用最多的Vue生命周期大概是  created  mounted  updated 二.各自适合做的业务逻辑 1. created   相当于是页面刚开始加载的状态,此时不能操作实例的 ...

  9. 无法完成你的itunes store 请求发生未知错误50

    装上itunes登陆itunes store时遂发现"无法完成您的itunes store的请求,发生未知错误(-50)"跃入眼帘,卸载重装数次还是不见效果,难道是WIN7和itu ...

  10. WP8.1 VS iOS VS Android全方面大比拼

    众所周知,苹果的OS和谷歌的Android系统都有着相对成熟的设计和较好的用户体验,而随着WP8.1的发布,微软WP系统在交互方面也有了很多改进和提升,而今天小编便为大家全面对比一下这三大系统.   ...