第一章、Tiny4412 U-BOOT移植一 说明

发布者:大树下的大白菜y最新更新时间:2021-12-08 来源: eefocus关键字:Tiny4412  U-BOOT  移植 手机看文章 扫描二维码
随时随地手机看文章

一、移植前说明:

1、  特别声明:此文档是我的学习文档,里面肯定有错误地方,仅供参考!

2、移植平台:友善之臂Tiny4412SDK1306平台。

3、移植系统:Ubuntu12.04

4、移植原始CODE:平台光盘中由Samsung提供的U-Boot-samsung-dev.tar.bz2。为什么用这个,只能说因为我也菜鸟,我找了u-boot官网最新的代码看了一下,我没有在boardsamsung目录下找到与Exynos4412芯片很相关的平台目录,估计是有的,只是由于我很菜,不清楚是那一个,为了省自学时间,还是用三星提供的U-Boot源码。

5、参考文档:各相关手册,主要手册是Exynos4412 RISC Microprocessor Revision 1.0 完整版,其实三星公司资料对个人来讲,挺难弄到手的,没有签署NDA,基本上很难从其官网上找到什么有用的资料,虽然他是为自己公司的种种利益,但对我们这些个人菜鸟来讲,没有找到好的手册,就是个恶梦呀,这里小小的鄙视一下三星!其他有一些芯片厂商的资料提供的好很多。但还好,谢谢网络的发达,有网友分享了一份完整版的手册。


另非常感谢作者:南山一梦的《Tiny210(S5PV210)U-BOOT》的移植说明,我也是刚学UBOOT移植,所有思路过程均参考此博文进行,部分原理说明内容也出自于此,所以,此文档也并非完全原创,本来这也是我自己学习记录的文档,这么多年我都是吸血的,本无意分享的,但网上关于exynos4412的学习资料太少,exynos4412学习起来诸多不易,我自己费了好多时间,走了好多弯路,才走到这一步,我想至少这份文档肯定会有一些参考价值的,整理后发出来仅供学习之用,请务商业化,谢谢!


博文网址:http://blog.csdn.net/mutemob/article/details/8708401。

汇总网址:http://www.cnblogs.com/cainiaoaixuexi/p/3431586.html。

      

6、备注:以下内容中我说手册的多少页,没有特殊说明手册名称的,一律都指Exynos4412 RISC Microprocessor Revision 1.0完整版手册。很多地方为省时省事,我也比较懒,敲不动中文了,直接就复制手册,上英文吧,大家也当练练英语嘛! 


对应的代码我稍后会整理发出,我会要一两个资源分。我会给出三个版本代码,V0.1对应第一章裁剪后的代码。v0.2对应第二章到第14章的代码。v0.3对应后面增加LCD驱动的代码,主要是第19章代码的变动,发出三个版本来是方便大家学习比较修改点。


V0.1大家可以不用下载吧,你买了tiny4412的板子,里面就有三星公司的源代码了,v0.1我也只是裁剪了一下,你完全可以参考下面的说明完成。


费话不多说,下面开始吧!说明一下UBOOT代码架构和进行一下简单裁剪。


二、U-BOOT简介

1、U-Boot简介以及源码获取

1.1 、U-Boot简介

这里对U-Boot做简单的介绍,对于新手来说,总不能对这个“敌人”一无所知吧,在此做一个小小的扫盲吧。


U-Boot全称UniversalBootLoader,即通用bootloader。它是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。


1.2 、U-Boot源码获取以及解压方法

U-Boot的代码可以从官方的FTP服务器上获取,地址是:ftp://ftp.denx.de/pub/U-Boot/。代码是按照一定时间周期更新的,命名方式由以前的数字命名更换为以时间的方式命名,笔者认为这样更直接更简单。当然,可以拿比较新的版本跟以前的老版本比较,结构和代码的具体实现是有很多差异的,笔者认为新版的U-Boot结构更合理,代码更简练,移植更方便。不管工程结构和代码怎么变,不变的是原理和整体框架,只要牢牢抓住这些本质的东西,你就能所向披糜。


下载代码后,在Ubuntu中可以直接鼠标右键,使用归档管理器解压到当前目录下。当然也可以终端中,先使用cd命令切换到代码包的目录下,例如,如果源码包是U-Boot-2013.01.01.tar.bz2,那么应该使用:

sudo tar-xvf U-Boot-2013.01.01.tar.bz2,即可解压到当前目录下。


1.3、U-Boot代码结构介绍

解压后我们看看新版本U-Boot的代码结构,如下图1-6所示。那么我们就来逐一介绍一下各个目录的功能和内容。如果需要更详细的目录介绍信息,请参阅U-Boot根目录下的README文件。



图1-1、U-Boot框架图

1). api:一些系统调用,包含有显示用的api,网络部分的api,和一些跟平台相关但独立出来的api。是一个扩展应用的独立的api库。

2). arch:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm就是我们开发板上使用的硬件体系目录。而arch/arm/目录下的cpu目录就是对应ARM体系的cpu目录,里边的armv7就是我们此次移植的重点对象,s5pv210就是armv7架构的cpu。

3). board:和一些已有开发板有关的文件.每一个开发板都以一个子目录出现在当前目录中。例如,smdkc100就是官方以s5pc100为核心的开发板的相关文件。该目录和上一个arch目录是严重依赖硬件平台的,移植之初要改动最多的也是这两个目录。

4). common目录:主要实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c。

5). disk:对磁盘的支持。

6). doc:文档目录。Uboot的文档还是比较完善的,推荐大家参考阅读。

7). drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB。

8). dts:从U-Boot的readme文件中获取到的信息,我的理解是dts = device trees ,有兴趣的可以参考U-Boot的readme文件中对ONFIG_OF_IDE_FIXUP和CONFIG_OF_EMBED这两个宏的描述。

9). examples:一些独立运行的应用程序的例子。

10). fs:支持文件系统的文件,U-Boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。

11). Include:头文件,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。

12). lib:通用的多功能库函数实现。例如字符串的一些常用函数就在string.c中实

13). nand_spl:支持从nand flash启动,但支持的cpu的种类也不是很

14). net:与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。

15). post:上电自检程序。

16). spl:镜像分离的实现,一般用在SD卡启动。

17). test:测试命令的实现,测试系统是否运行正常时使用。

18). tools:创建S-Record格式文件和U-BOOT images的工具。

19). boards.cfg:目标板配置参数文件,里边有很多种目标板的配置参数。

20). config.mk:这个文件里面主要定义了交叉编译器及选项和编译规则。

21). COPYING:软件的使用条款声明。

22). CREDITS:U-Boot开发者的联系方式。

23). helper.mk:生成U-Boot.list文件,文件包含程序编译对象信息等。

24). MAINTAINERS:各个硬件架构软件维护者的联系方式。

25). MAKEALL:创建多个目标板的配置,一般用不到。

26). Makeflie:U-Boot的makefile,主要用来编译链接并生成U-Boot镜像。

27). mkconfig:建立工程需要的一些软链接并创建配置文件config.h。

28). README:U-Boot的介绍信息,最好能花点时间看看,多了解一些关于U-Boot的信息。

29). rules.mk:U-Boot工程编译依赖规则。

30). snapshot.commit:U-Boot序列号和发布时间的快照。


2、解压裁剪

解压三星光盘中U-Boot-samsung-dev.tar.bz2,由于U-Boot源码中其实有很多东西我们不需要的,可以适当进行裁剪,把我们不要的代码都给删除,其实不删除也没有什么关系的,U-boot在编译时会根据我们的配置要求,一一编译相应内核的代码,其他不相关的代码是不会被编译的。至少我认为是这样,如果大家能把makefile文件看的明明白白的话,就一定能很清楚的知道针对自己的板子,那些代码是有用的,那些代码是不会被编译进自己的内核的。我也只是简单的看了一下makefile文件,很多地方也不明白,这里不对makefile进行分析了。


我们把不相关的代码裁剪了,有什么的具体的好处呢,我想可能无非就是不碍眼,改起来代码少,拷贝方便等等,废话就此为止,建议删除前先留下个备份,下面删除过程仅供参考,我没有完全按此进行,我只做了第1步、第6步和第7步和第8步。


1、删除:/arch/目录下,与arm无关的代码文件夹,其他文件夹都是与其他内核相关,所以可以删除。

2、进入/arch/arm/目录下,可以删除dts和imx-common两个目录。

3、进入/arch/arm/cpu目录下,可以删除与armv7无关的其他arm内核版本的文件夹,如有其他非文件夹文件留下不要删除。为什么只留下armv7呢,Exynos4412是armv7版本核。

4、进入/arch/arm/cpu/armv7/目录下,留下exynos和s5p-common文件夹和该目录下的文件,其他文件夹可以删除,他们分别是其他厂商生厂的armv7版本的内核。

其实这一步我不是很清楚s5p-common有没有用,不过为了不除错,还是先留着吧。

5、进入/arch/arm/include/asm目录下,留下arch-armv7、arch-exynos和proc-armv文件夹和此文件夹下的文件,其它文件夹可以删除。

6、进入/board/目录下,删除samsung以外的所有目录,因为我们移植的板子是三星的,所以其他的全部可以删除。

7、进入/board/Samsung/目录下,留下smdk4212目录文件,其他的全部可以删除,我们将与这个目录下的文件来进行移植,针对Tiny4412的电路板,我复制了/board/samsung/smdk4212的代码进行移植,为什么用smdk4212文件夹呢,我们知道SMDK4212,SMDK4412是三星自家的评估板,这两个板子都是用这个文件夹下的代码,其评估板所用的CPU也是Exynox4412,这一点可以从UBOOT根目录下的boards.cfg文件可以确定,打开看看下面的截图,可见,用smdk4212这个文件夹进行移植,会相对简单一些。一会大家可以复制一份进行修改移植,也可以直接在此文件上进行修改移植,建议重新复制一份。


如果大家是从uboot官网下载的代码,那么建议留下smdkv310和common。其他的可以删除,我用的是三星公司的一个版的uboot内部文件夹可能不太一样,大家根据自己手上的uboot版本进行修改吧,建议从uboot的官网上下载最新的uboot进行学习移植。


8、进入到/include/configs/目录下后,留下smdk4212.h和smdk4412.h即可,如果是从uboot官网下载,留下smdkv310.h。


3、创建平台

1、进入/board/Samsung/目录下,复制smdk4212为zthtiny4412。进入zthtiny4412进行如下文件名字修改:

clock_init_smdk4212.S  ―――》  clock_init_zthtiny4412.S

mem_init_smdk4212.S  ―――》  mem_init_zthtiny4412.S

smdk4212.c  ―――》  zthtiny4412.c

smdk4212_val.h  ―――》  zthtiny4212_val.h

smdk4412_val.h  ―――》  zthtiny4412_val.h

2、修改clock_init_zthtiny4412.S

定位到16行,修改为:

#ifdef CONFIG_EXYNOS4412

#include"zthtiny4412_val.h"

#else

#include"zthtiny4212_val.h"

#endif

3、修改lowlevel_init.S

定位到17行,修改为:

#include

#ifdefCONFIG_EXYNOS4412

#include "zthtiny4412_val.h"

#else

#include "zthtiny4212_val.h"

#endif

4、修改zthtiny4212_val.h

定位到13行,修改为:

#ifndef_VAL_ZTHTINY4212_H

#define_VAL_ZTHTINY4212_H

5、修改zthtiny4412_val.h

定位到13行,修改为:

#ifndef_VAL_ZTHTINY4412_H

#define_VAL_ZTHTINY4412_H

6、修改makefile

定位到33到38行,修改为:

COBJS-y   := zthtiny4412.o

COBJS-y   += pmic.o

COBJS-y   += smc.o

SOBJS       := lowlevel_init.o

SOBJS       += mem_init_zthtiny4412.o

SOBJS       += clock_init_zthtiny4412.o

7修改u-boot.lds

定位到40行,修改为:

board/samsung/zthtiny4412/libzthtiny4412.o(.text)

8、复制include/configs/smdk4412.h为zthtiny4412.h

9、修改主目录下的makefile

定位到24行,修改为:

VERSION = 2014

PATCHLEVEL = 01

10、修改根目录下的/boards.cfg的文件,既然是针对自己的板子进行修改,此文件中的其他设置可以不用了,增加自己板子的设置后,删除其他设置。这里我保留了三行,如下图1-2所示。



图1-2 boards.cfg示意图

简要的载剪工作到此为此,下一章说明启动过程。

10、编译

这一步主要是查看我们平台搭建成了没有:进入linux进行编译:

可能用到的命令并列如下以供参考

cp -R /media/sf_sharelinux/test/zhang_new_uboot/u-boot_zth/.

chmod -R 777 /u-boot_zth /

cd /u-boot_zth /

make zthtiny4412_config

make

结果如下图1-3所示,由下图结果所示,已看到了其产生了u-boot.bin文件了,后面的错误是由于目录下的mkbl2执行来产生BL2文件的错误,此错误我们搭建移植平台无关,可以打开主目录下的makefile,定位到350行左右注释了以下代码:

#ifeq ($(CONFIG_S5PC210),y)

#            ./mkbl2u-boot.bin bl2.bin 14336

#endif

 

#ifeq ($(CONFIG_CPU_EXYNOS5250),y)

#            ./mkbl2u-boot.bin bl2.bin 14336

#endif

也可以去include/configs/zthtiny4412.h文件下,把CONFIG_S5PC210和CONFIG_CPU_EXYNOS525给注释了。

下一节,开始分析启动过程。



图1-3 编译结果程序图

关键字:Tiny4412  U-BOOT  移植 引用地址:第一章、Tiny4412 U-BOOT移植一 说明

上一篇:第九章、Tiny4412 U-BOOT移植九 DDR工作时序与原理 一
下一篇:第二章、Tiny4412 U-BOOT移植二 启动分析

推荐阅读最新更新时间:2024-11-07 18:46

STM32学习记录13 ucosII移植
关于如何移植,建立工程的问题已经有很多文档说明了,此处只是说明一下需要修改的文件及修改的原因。 1:os_cpu.h 我们需要对此文件进行修改: 1) void OS_CPU_PendSVHandler(void) 需替换成 void PendSV_Handler(void) 一般我们自己开发基于 stm32 芯片的软件,都会使用标准外设库 CMSIS 中提供的启动文件,比如 startup_stm32f10x_hd.s,而 Micrium 官方没有用 ST 的标准启动文件,而且分开写成了两个.s 文件,即 init.s 和 vectors.s (Micrium\Software\EvalBoards\ST\STM3210B
[单片机]
基于STM32平台的μC/OS-II上的μC/GUI移植过程解析
μC/GUI是一种专为嵌入式应用设计的通用图形接口软件。本文详细介绍了μC/GUI的结构框架和基于STM32平台的μC/OS-II上的μC/GUI移植过程,并在此基础上进行图形界面设计;阐述了μC/GUI的窗口管理机制,提出了实现μC/GUI中文小型字库的两种方法并采用存储设备解决了图形显示的闪烁问题。 嵌入式系统的图形用户界面,要求具有占用资源少、性能高、可靠性高、可移植、可配置等特点,μC/GUI就是这样一种专门为嵌入式应用设计的图形用户界面软件。μC/GUI可应用于多任务环境中,同时使用实时操作系统与μC/GUI,既可以发挥优先级的实时性,又能实现良好的人机界面。本文使用Cortex-M3内核的STM32平台,介绍了基于
[单片机]
基于STM32平台的μC/OS-II上的μC/GUI<font color='red'>移植</font>过程解析
LPC17XX 学习之 uCOS-II 移植实例
1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移植几乎都是一样的,要想了解Cortex-M3内核,推荐《ARM Cortex-M3权威指南》(宋岩译); (2)ucos-ii内核原理,推荐《嵌入式实时操作系统uC/OS-II(第2版)》(邵贝贝译)。 2. 下载文件 ucos-ii移植过程主要涉及三个文件:os_cpu.h, os_cpu_a.asm和os_cpu_c.c 实际上,一般情况下,我们想要移植的目标芯片前辈们都已经移植成功过了,我们需要做的就是下
[单片机]
S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
uboot启动内核分析 进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm(): int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv ) { boot_os_fn *boot_fn; //boot_fn是个数组函数 ... .. boot_fn(0, argc, argv, &images); //调用数组函数 ... ... } boot_os_fn是个typedef型,如下图所示: 由于定义了宏CONFIG_BOOTM_LINUX,最终会跳转到do_bootm - do_bootm_linu
[单片机]
LPC1768 SPI模式下SD卡FatFs文件系统移植
最近在LPC1768 SPI模式下移植SD卡FatFs(版本R0.09a)文件系统成功,总结一下移植过程。 一、底层驱动 使用的SSP0的SPI模式驱动,SSP时钟开始使用的25M。SD卡驱动测试完成,可读写擦除测试没有问题之后开始文件系统移植。 要用到的底层驱动函数有: MMCSD_TYPE MMCSD_Init(void) BOOL MMCSD_EraseBlocks(uint32_tblkStart,uint32_t blkEnd) BOOL MMCSD_ReadSingleBlock(uint32_tblkIndex,uint8_t *pBytes) uint32_t MMCSD_ReadMul
[单片机]
arm移植ssh,实现远程root登录和sftp登录
主机:ubuntu16.04 64bit 目标板:mini2440 交叉编译工具:4.4.3 1. 下载需要的源码: mkdir -p ~/arm/fs ;mkdir -p ~/arm/source 下载zlib-1.2.3: wget -c http://www.zlib.net/fossils/zlib-1.2.3.tar.gz 下载openssl-0.9.8d: wget -c http://www.openssl.org/source/openssl-0.9.8d.tar.gz 下载openssh-4.6.tar.gz 上面三个源码打包下载链接:https://download.csdn.net/down
[单片机]
arm<font color='red'>移植</font>ssh,实现远程root登录和sftp登录
带全速USB接口的PIC18F4550应用设计
引 言 随着USB(Universal Serial Bus)技术的发展,特别是高速(480 Mbps)USB2.0协议的出现,几乎所有的PC外设都可以移植到USB上,所以USB的PC外设的发展空间是巨大的,甚至在不久的将来,USB将完全取代异步串口和打印机并口,PC机厂商将不会再生产机箱上带异步串口和打印机并口的PC机了,机箱上也不会再有那么多的连线了。 USB是一种快速的、双向同步传输的、廉价并可以进行热插拔的串行接口。利用USB总线技术,开发适用于科学研究和工业牛产的各种仪器仪表设备,借以取代传统计算机测控系统中采用串行RS232或并行接口的仪器仪表设备,使计算机测控系统更加高效实时,方便灵活。 利用USB总线的数据采
[单片机]
VxWorks移植到AT91RM9200的BSP定制过程
    VxWorks是嵌入式实时操作系统,具有高性能、可裁减性好等特点,能支持多种微处理器(如PowerPC、X85、ARM、SPARC);自问世以来,以其良好的町靠性和卓越的实时性被广泛地应用于通信、航空、航天等高精尖技术及实时性要求极高的领域中。BSP(Board Support Package,板级支持包)的作用是针对特殊的硬件平台,为操作系统内核提供操作接口,使操作系统能够独立于底层硬件。对上层应用屏蔽具体硬件,VxWorks的高可移植性就是通过BSP实现的。AT91RM9200是Atmel公司生产的一款ARM9核芯片,本文重点介绍将VxWorks移植到该芯片过程中BSP的定制过程。   1 BSP概念     BS
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved