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 内存布局例如以下图:

如今运行  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来定义这些寄存器:

终于生成了 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卡启动,令人兴奋的事情发生了:

可是却卡在这里不走了。通过跟踪代码发现,在 board.c 中的 board_init_r 函数调用了 enable_caches。如今已经能够使用 puts、 printf等函数了,我们能够通过信息打印来推断程序卡在哪里了。

一路调试下去。终于发现程序卡在

onenand_init 里:

这个宏 CONFIG_CMD_ONENAND 在 tiny210.h 中定义。我们的 tiny210 开发板没有 onenand,所以将这个宏屏蔽掉:

另外,另一些和单板相关的信息,我们能够改动一下,改动 tiny210.h

与 onenand 相关的,我们查看 u-boot-2014.04/common/Makefile,看下 env_onenand.c 是怎么被编译进u-boot.bin 的是因为定义了 CONFIG_ENV_IS_IN_ONENAND 这个宏,这个宏在 tiny210.h 中定义,我们将它屏蔽掉:

可是编译,还是出错:

我们查看 u-boot-2014.04/common/cmd_nvedit.c说明必须指定环境变量保存位置。我们能够将环境变量保存到 SD 卡或 NAND,可是如今还没移植好,所以先临时将 CONFIG_CMD_ONENAND 和 CONFIG_ENV_IS_IN_ONENAND 这 2 个宏打开,然后在 board.c 中屏蔽 onenand 初始化代码。

再次编译,成功。

因为这次的改动仅仅针对 u-boot.bin。对 u-boot-spl.bin 没有影响。因此能够仅仅烧写 u-boot.bin 到 SD 卡的扇

区 32。

好了,移植了这么久。控制台最终能够看到效果了。试试主要的u-boot命令可不能够用:

弄了这么多天,最终有了效果,之后的事情就是在这基础上进行完好了。我把这个版本号的代码放在这:tiny210_u-boot_201404_v1.1.tar.bz2有兴趣的朋友能够看看。帮忙一起完好。

时间: 2024-07-30 13:52:26

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-boot,须要 BL1 初始化 NAND 控制器,然后从 NAND 拷贝 BL2 到 DDR 内存.这里的BL1 即我们移植的 u-boot-spl.bin,BL2 即我们移植的 u-boot.bin.在 u-boot.bin 中的 NAND 驱动比較大,它包括了非常多功能,而 u-boot-spl

tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植NAND FLASH

这节我们开始移植nand flash:通过查看帮助文档 doc/README.nand,要支持 NAND,需要配置CONFIG_CMD_NAND我们修改 tiny210.h,把 CONFIG_CMD_ONENAND 屏蔽掉,同时加上CONFIG_CMD_NAND: 编译出错 ,没有定义 CONFIG_SYS_MAX_NAND_DEVICE,最大 NAND 设备数,我们的板子只有 1 个 NAND,将其 定义为 1 再次编译,出错:未定义 NAND 的基地址,查看 S5PV210 手册, NAND

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.

基于mini2440的Qt移植

花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程. 移植环境: win7系统,虚拟机是ubuntu12.04 友善之臂mini2440开发板 Qt版本:4.8.6   交叉编译器版本:4.4.3 一.虚拟机Qt开发环境的搭建 1.上Qt的官网下载Qt的源码包:http://qt-project.org/downloads,下载版本是4.8.6,也可以下载其他的版本 2.安装Qt所需要支持的文件 sudo a

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

Spring Boot利用JavaConfig配置模式以及"约定优于配置"理念,极大简化了基于Spring MVC的Web应用和REST服务开发. Servlet: 1 package org.windwant.spring.servlet; 2 3 import javax.servlet.Servlet; 4 import javax.servlet.ServletConfig; 5 import javax.servlet.ServletException; 6 import j

基于FPGA的DW8051移植(三)

总结一下问题: 1) http://www.cnblogs.com/sepeng/p/4137405.html  基于FPGA的DW8051移植(一)里面用modelsim观测波形发现程序进入了idata区间初始化循环中跳转不出来,没有进入用户程序这一块. 2) http://www.cnblogs.com/sepeng/p/4141072.html 基于FPGA的DW8051移植(二)里面将idata区间初始化去掉,程序进入了用户程序却发现在执行DelayMs 函数的时候,循环执行完毕,在最后

如何进行基于am335的boa移植?

基于am335进行boa移植,一共需要五步,下面是详细的步骤,对这方面知识比较陌生的小伙伴,可以学起来啦. 1.准备开发环境: (1)VMware 10.0 (2)Ubuntu 14.04 64bit (3)Sail335开发板 (4)交叉编译器:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux 2.源码: (1)Boa源码:boa-0.94.13.tar.gz (2)Boa测试页面:index.html 3.移植过程: (1)移植Boa ①解压缩

如何进行基于am335的vsftpd移植?

在之前的文章中我们已经讲解过如何基于am335进行boa移植,相信大家在看过后一定都掌握啦,那么在此基础上,vsftpd移植又需要我们如何做呢?接下来我们一起看看吧! 1 下载 下载最新版本源码包,下载地址:https://security.appspot.com/vsftpd.html#download.本文以 vsftpd-3.0.2.tar.gz 版本为例. 如果以上下载地址无法访问,也可以本地下载vsftpd-3.0.2.tar.gz. 2 解压 $ mkdir ~/vsftpd $ c

【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 本课程重点是给大家讲解嵌入式linux系统移植的开发方法,采用理论与实践,硬件与软件相结合的方法. 1.在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念.技术要点,设计实现思路等内容,最后总结本次课程的要掌握的要点. 2.在讲课的过程中对关键技术