03 UGW6.1.1 uboot分析

 

/*****************************************************************************************************************

  

                                                       Document Author : ELvins Fu

                                           Digtal technology park, A3 -06 , shenzhen, China   

                                                                             

      *************************************************************************************************************

      Module : Unversion Gateway Application 

      Software Version : 6.1.1

      Date : 2015-2016

      Description: the document include the uboot programm modifiled by special needs.

                      

********************************************************************************************************************/  

 

论述

 

    下列给出了从uboot根据硬件的需求,更改软件的具体过程:

 

    

驱动环境uboot说明

Version :0.1

 

篇 一

篇一介绍的内容为Uboot的分析,有这些基础对uboot的启动过程,有着一定的参考意义,这文档中的内容分析的只是一部分内容,具体的uboot代码不算很多,但是分析起来比较麻烦,故而选取重要的部分进行介绍。

一:uboot的环境介绍

UGW 6.1.1编译之后的uboot的目录如下:

 

u-boot-2010.06及以后版本常用目录分析

\

├── api                 存放uboot提供的接口函数

├── arch               与体系结构相关的代码,uboot的重头戏

├── board              根据不同开发板定制的代码,代码也不少

├── common             通用的代码,涵盖各个方面,已命令行处理为主

├── disk                磁盘分区相关代码

├── doc                 文档,一堆README开头的文件

├── drivers           驱动,很丰富,每种类型的设备驱动占用一个子目录

├── examples           示例程序

├── fs                    文件系统,支持嵌入式开发板常见的文件系统

├── include            头文件,已通用的头文件为主

├── lib                  通用库文件

├── nand_spl           NAND存储器相关代码

├── net                  网络相关代码,小型的协议栈

├── onenand_ipl

├── post                 加电自检程序

└── tools               辅助程序,用于编译和检查uboot目标文件

移植工作涉及的目录情况

从uboot代码根目录,可以看出其已经非常庞大,功能也很丰富。

移植工作最主要的是看对应的处理器和开发板代码,2010.06版本以后处理器相关的代码集中在arch、board目录。(以前版本主要在cpu和board目录)

先看一下arch目录:

arch

arch目录内容比以前的版本干净,每个子目录代表一个处理器类型,子目录名称就是处理器的类型名称。

我们移植的是mips的处理器,所以参考一下arch/mips目录:

arch/mips

├── cpu

├── include

└── lib

arch/mips目录下有三个目录,其他的处理器目录下也是这个结构:

cpu子目录对应一种处理器的不同产品型号或者系列;

include子目录是处理器用到的头文件;

lib目录对应用到处理器公用的代码;

 

下面看看cpu下的内容,arch/mips/cpu目录下的内容:

arch/mips/cpu/vr9

目前最新版本(2011.6版本开始)中cpu目录中建立mips32目录,把u-boot.lds是ld程序也就是连接器的脚本文件,这个文件描述了如何连接目标文件,ld程序会根据这个文件的指示按照需求把不同的目标文件连接在一起生成供烧写到开发板的程序。该文件放在board对应的目录中。

注意:如果公司需要升级U-Boot,则源代码下载地址

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /pub/u-boot/

或 http://linux.linuxidc.com/pub/u-boot/

用户名与密码都是www.linuxidc.com

所有版本的u-boot源代码压缩包都可以在ftp://ftp.denx.de/pub/u-boot/下载。

关于u-boot源代码的信息,看http://www.denx.de/wiki/U-Boot/SourceCode码下载

 

二:uboot参考修改

大麦盒子用的uboot用的是vr9的标准板,其实不用更改,如果想要自己参考vr9的信息,我们可以做出一款自己的标准板,如(dm1),

 

$ cd board/vr9/

$ cp ../vr9 ../dm1 –a

$cd dm1

$ mv vr9.c dm1.c

$ vim Makefile

****************************

 24 include $(TOPDIR)/config.mk                                                                                   

 25

 26 LIB = $(obj)lib$(BOARD).a

 28 COBJS   = $(BOARD).o

 29 SOBJS   = lowlevel_init.o

************************************

查看config.mk

********************************

 24 -include $(TOPDIR)/.config

 25

 26 TEXT_BASE = $(CONFIG_RAM_TEXT_BASE)

***********************************

查看Kconfig

*********************************

把VR9的字符全都换成md1

********************************

修改u-boot顶层目录下的Makefile按照vr9的内容添加md1的内容

*****************************

3423 vr9_config: unconfig                                                                                      

3424     @$(MKCONFIG) $(@:_config=) mips mips vr9

3425     @ln -s -f vr9_cfg.h include/configs/lq_cfg.h

3426     @ln -s -f vr9_cfg.h include/configs/ifx_cfg.h

****************************

在这后面添加同样的信息,把vr9改为md1

 

修改编译器 u-boot顶层目录下的Makefile

*************************************

191

 192 # set default to nothing for native builds

 193 ifeq ($(HOSTARCH),$(ARCH))

 194 CROSS_COMPILE ?=    添加你所用到的编译器)

****************************

编译u-boot-2010.06   u-boot顶层目录

***************************

$ make distclean

$ make md1_config

$ make

***************************

这个时候我们就可以得到一个u-boot.bin也就是我们的目标文件,但是这个文件通常情况下是不能够正常工作的,我们还需要对u-boot源代码进行进一步的修改。

 

注意:下面的修改我只提供具体的修改办法,因为这个我没有继续修改下去,不过这个方法是验证过的。

1、u-boot源码中的中断屏蔽位的修改

问题:在md1中的子中断屏蔽位是否和vr9相同?

如果不同,则将arch/mips/cpu/vr9/start.S修改

  1. 修改配置文件include/configs/vr9.h
  2. 命令行提示符的修改:

**********************

 

112 #define CONFIG_SYS_LONGHELP             /* undef to save memory      */

113 #define CONFIG_SYS_PROMPT       "VR9 # "    /* Monitor Command Prompt    */

114 #define CONFIG_SYS_CBSIZE       1024        /* Console I/O Buffer Size   */

115 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)  /* Print Buffer Size *

*********************

vr9# 改为md1#

  1. 网络参数设置

Ip地址、启动参数、延迟等

  1. 内核加载地址的修改

这个就很简单了 load_addr 在哪,改你想要的

  1. Nand功能添加

对照include/config_cmd_default.hinclude/config_cmd_all.h添加我们需要的相应功能。

  1. 同时支持nand、nor和spi启动

/include/configs/vr9.h

265 #ifdef CONFIG_BOOT_FROM_NOR

266 #define IFX_CFG_FLASH_DDR_CFG_START_ADDR      0xB000FFE0

267 #define IFX_CFG_FLASH_DDR_CFG_SIZE            32

268 #define IFX_CFG_FLASH_DDR_CFG_END_ADDR        0xb000ffff

269 #elif defined(CONFIG_BOOT_FROM_SPI)                                                                                 

270 #define IFX_CFG_FLASH_DDR_CFG_START_ADDR      0x0000FFE0

271 #define IFX_CFG_FLASH_DDR_CFG_SIZE            32   //32字节的启动

这个十分关键,如果第二次启动失败,则是这里的问题。

272 #define IFX_CFG_FLASH_DDR_CFG_END_ADDR        0x0000ffff

  1. 环境变量保存位置

ENV变量是否正确

  1. USB功能的添加

这个我没做,有必要可以做。

********************

#define CONFIG_CMD_FAT  ???????????????/* FAT support*/

#define CONFIG_CMD_USB   ????????????????/* USB support*/

#if defined(CONFIG_CMD_USB)

#define CONFIG_DOS_PARTITION

#define CONFIG_USB_OHCI

#define CONFIG_USB_STORAGE

#define CONFIG_SUPPORT_VFAT

#define LITTLEENDIAN

#endif

Ping命令的添加

#define CONFIG_CMD_PING   ????????????????/* ping support*/

***************************

再给出一些参考的信息,这是我调试的一部分,具体验证根据各平台的不同验证。

 

/*********************设计 MIPS GRX390****************/

/****************************/

3、添加Nand启动功能 start.S

u-boot默认情况下是nand启动,这里我们添加nand启动的内容:

iq_xrx200_vrx288_gw_he_vdsl_lte/u-boot-2010.06/arch/mips/cpu/ar10$ ls

cache.c  interrupts.c       start_nand_spl.S

clock.c  Makefile           start.S

cpu.c    start_bootstrap.S  start_uncomp.S

1)添加头文件

 26 #include <config.h>

 27 #include <version.h>

 28 #include <asm/regdef.h>

 29 #include <asm/mipsregs.h>

 30 #include <asm/cacheops.h>

 31 #include <asm/addrspace.h>

 32 #include <asm/yamon.h>

2)添加nand启动标志位

3)添加BWSCON寄存器的定义(加粗字体为添加内容)

4)添加启动模式判断Nor启动还是nand启动(加粗字体为添加内容)

5)添加NAND启动自搬移代码(在上一步代码下添加)

4、添加nand_read.c为nand启动做支持

5、修改board/ar10/?支持 nor flash芯片

x200_vrx288_gw_he_vdsl_lte/u-boot-2010.06/board/ar10$ ls

ar10.c         ddr2_16bit.conf    Kconfig           sfddr_board.c

bootstrap.lds  ddr2_8bit.cmm      lowlevel_init.S   start_sfddr.S

config.mk      ddr2_8bit.conf     Makefile          stools.c

ddr1           ddr.h              Makefile.lq       u-boot.lds

ddr2           gphy_firmware.img  nand_spl_board.c

6、修改common/env_flash.c,为nor flash保存环境变量做准备

7、修改common/env_nand.c添加n

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值