tiny210(s5pv210)移植u-boot(基于2014.4版本号)——移植u-boot.bin(打印串口控制台)

gccbuaa gccbuaa     2022-08-28     530

关键词:

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

在上节。我们看到调用 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有兴趣的朋友能够看看。帮忙一起完好。


























嵌入式开发(s5pv210)——u-boot的不同来源和目录结构

...去uboot的官网下载uboot,然后把此款Soc的开发板的uboot移植上去并开源,让买这款Soc的公司去参考移植上去的uboot,然后开发自己的产品。Soc产商推 查看详情

s5pv210中断体系结构分析

我们按照Tiny210官方的裸板程序来梳理S5PV210的中断体系。关于S5PV210的中断体系结构S5PV210的中断控制器是由4个向量中断控制器(VIC)、ARMPrimeCellPL192和4个TrustZoneInterruptController(TZIC)共同组成。S5PV210共支持93个中断源(具体见官方手册)... 查看详情

s5pv210移植minigui3.0.12

移植平台:ubuntu:14.04 开发板:s5pv210(A8) Minigui版本:3.0.12-----------------------------------------------------以下软件是开发板正常运行的必须安装包,在MiniGui官网可以下载http://www.minigui.org/zhcn/【已放在嵌入式软件组资料共享文件夹】--... 查看详情

嵌入式开发(s5pv210)——u-boot的头文件包含问题(代码片段)

...件的路径用链接来表示,这样的用意是为了程序的可移植性。uboot是高度可移植的,不同的配置和编译指令可以编译出不同Soc和开发板的程序,其中源码是没有改动的。不同的编译配置指令就是将链接指向不同的目录&... 查看详情

s5pv210开发系列八_yaffs的移植

S5PV210开发系列八Yaffs的移植象棋小子   1048272975Nand作为市面上最基本的非易失性闪存技术之中的一个,应用在各种固态大容量存储解决方式中。因为Nandflash自身的特点,Nand存储器往往须要一款专用的Nand文件系统进行... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层makefile分析(代码片段)

前言本文分析的是u-boot的主Makefile以及主Makefile调用到的一些关键文件,此Makefile可能和你手里的u-boot的Makefile不一样,这是正常的,但是从逻辑上都是一样的,无非就是把同样功能的脚本放在了不同的位置或者子Ma... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层mkconfig文件分析(代码片段)

mkconfig文件的调用#第一步:SRCTREE是源码的路径,也就是顶层的目录MKCONFIG :=$(SRCTREE)/mkconfigexportMKCONFIG#第二步:配置#$(@:_config=):作用是将x210_sd_config的_config去掉,得到x210_sdx210_sd_c 查看详情

s5pv210_uartstdio移植

...息等待输出putc:操控标准输出的硬件,将信息发送出去3、移植步骤:(1)解压printf.rar到uart_stdio目录,解压后会有include、lib两个目录,其中include放的是相关头文件,lib放的是printf、sc 查看详情

嵌入式开发(s5pv210)——u-boot的链接脚本分析(代码片段)

1、脚本内容OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm","elf32-arm","elf32-arm")*/OUTPUT_ARCH(arm)ENTRY(_s 查看详情

嵌入式开发(s5pv210)——u-boot中如何确定启动方式(代码片段)

1、嵌入式设备确认启动方式设备确认启动方式分为硬件方式和软件方式,硬件方式是通过芯片某几个引脚的高低电平来决定启动方式;软件方式就是通过代码设置来决定启动方式。(1)硬件方式:比如S5PV210芯片,... 查看详情

s5pv210移植无线wifi网卡mt7601

一、准备工作1、MT7601驱动下载点击下载2、插入usbWiFi启动开发板linux,lsusb查看usb驱动Bus001Device003:ID148f:7601看到的是该驱动的厂家设备信息3、解压源码到linux下,确认USB的VID和PID,在rtusb_dev_id.c中USB_DEVICE_IDrtusb_dev_id[]=#ifdefRT6570USB_D... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层config.mk分析(代码片段)

1、config.mk的作用config.mk的作用是配置uboot编译的,比如配置交叉编译工具链,链接地址,编译选项,指定头文件路径等,但是config.mk的配置是建立在顶层mkconfig、主Makefile等配置之上的。2、config.mk的调用#loadothe... 查看详情

移植tslib和qt5.6到三星s5pv210开发板

tslib1.4移植下载tslib1.4后1.cptslib-1.4.tar.bz2/home/gec2.tarjxvftslib-1.4.tar.bz23.sudo-s4.cdtslib-1.4/5../configure--host=arm-linux--prefix=/usr/local/armac_cv_func_malloc_0_nonnull=yes6.make7.makeinstal 查看详情

s5pv210-kernel-从三星官方的内核开始移植

1、拿到三星官方移植过的内核2、在Linux下解压一份在共享目录下,解压一份在Linux的源生目录下。一份编辑,一份编译3、建立SI工程,添加kernel源代码4、在Linux下先看makefile中的CROSS_COMPINE交叉编译工具链和ARCH的架构对不对5、在a... 查看详情

嵌入式开发(s5pv210)——u-boot中开启mmu(代码片段)

1、MMU介绍在uboot阶段并不是必须要开启MMU(内存管理单元),在没开启MMU前使用的是物理地址,开启MMU后使用的是虚拟地址。MMU就是在物理内存和应用程序之间添加了一个层次,专门用来管理内存,这样写应用程序... 查看详情

qt开发之移植qt5.6.2到s5pv210(代码片段)

1、移植前的准备工作 (1)确认已经烧录uboot,并设置环境变量bootcmd和bootargs从tftp、nfs启动; (2)zImage事先编译好的,文件夹形式的rootfs准备好,成功启动内核进入命令行; (3)ts驱动源码确认添加、设备文件确认OK(dev/input/event2... 查看详情

s5pv210——中断

1:s5pv210的中断步骤(1):建立异常向量表;(2):写入中断处理函数;(3):中断初始化;(4):建立中断号与中断处理函数的联系,使能中断;当中断发生时,中断处理函数会自动处理中断;流程如下: 2:建立异常向量表:s5pv21... 查看详情

嵌入式专题:s5pv210-mpeg4编码

我想说不台的平台,如tiny210和x210。它们的头文件是有稍微区别的。我这个是x210下的代码。但都须要注意的是NV12T与NV12的问题,默认要求输入的图片是NV12T,经过调整之后,能够同意用NV12。即便如此。NV12格式的图片也不好拿... 查看详情