zoukankan      html  css  js  c++  java
  • Tiny4412 U-BOOT移植(转)

    http://blog.csdn.net/eshing/article/details/37520291(转)

     

    一、移植前说明:

    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<asm/arch/s5p_nand.h>

    #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 编译结果程序图

  • 相关阅读:
    常用正则表达式应用
    iOS 通知推送APNS
    IOS生活圈开发练习记录
    [转]定时器
    JavaScript如何在webView跳转到指点的位置
    用imageNamed加载图片产生的问题
    如何再分类中添加属性
    CADisplayLink定时器
    自定义UIBtton类后,在@implementation重写方法的作用
    CAAnimationGroup(组合动画)创建
  • 原文地址:https://www.cnblogs.com/lys0827/p/5805625.html
Copyright © 2011-2022 走看看