BootRom的生成过程

来源:互联网 发布:中文语音朗读软件( 编辑:程序博客网 时间:2024/05/18 02:42

Vxworks5.5命令行方式编译config.rom过程中涉及到的文件的结构如下所示:

Make_5980_28_52T_configrom.bat

tovarsPPC_2.2.1.bat

BSP/makefile

/mpc834x/makefile

BaseDir.def

Def.bsp

Make.PPC603gnu

Def.x86-win32

Board.def

Rules.bsp

Rules_dcn.bsp


 

 

 

 

 

 

 

 

执行批处理文件Make_5980_28_52T_configrom.bat,首先保存当前的环境变量,然后调用tovarsPPC_2.2.1.bat为接下来的编译过程设置环境变量,这些环境变量包括:

path_save=%PATH%                  #保存当前的环境变量

WIND_HOST_TYPE=x86-win32        //HOST主机类型

           WIND_BASE=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc //wind内核

           TOR221=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc

GCC_VER=296                   //编译器版本

DIABLIB=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc/host/diab

DIAB_HOST_TYPE=WIN32

PATH=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc/host/diab/WIN32/bin;E:/SVN_VIEW/compiler/Tornado2.2.1_ppc/host/x86-win32/bin;%PATH%

//以下参数需要用户配置,说明编译结果存放的目标、生成类型、编译选项等。

                   OBJ_BASE=E:/SVN_VIEW/code_ivy6.1/BSP/Build

                   SDK_BASE=E:/SVN_VIEW/code_ivy6.1/Driver_Zoma/SDK

BUILD_TYPE=ROM

配置好环境后进入BSP编译的总控Makefile,它包含了DCN的所有编译目标,包括:config.romboot.romloader.romnos.imgconfig_harddebug.oboot_harddebug.osdk.img等在这里我们以config.rom的编译为例进行说明。

 

config.rom : config

         make -C Target/config/$(ROUTER_CPU_PATH) $@ OUTER_CPU_TYPE=$(ROUTER_CPU_TYPE)

         cmd /C "copy $(OBJ_DIR)/config.rom $(BIN_DIR)/$(ROUTER_BOARD_TYPE)_config.rom"

通过config.rom的编译规则,可以看出它依赖的文件是目标config,生成config.rom的方法是通过调用BSP/target/config/mpc834x/目录中的Makefile,并把生成的目标config.rom拷贝到目的目录中。

 

首先看一下依赖目标config

config:

ifndef ROUTER

         @echo "The *ROUTER* environment variable is not set!"

         @exit 1

endif

ifeq ($(BUILD_TYPE),ROM)

         @if not exist $(subst /,/,$(BIN_DIR)) mkdir $(subst /,/,$(BIN_DIR))

endif

         @if not exist $(subst /,/,$(OBJ_DIR)) mkdir $(subst /,/,$(OBJ_DIR))

         wtxtcl makeconfig.tcl > $(OUTPUT_DIR)/BaseDir.def

该目标主要是为后期的编译做一些准备工作。

接下来看BSP/target/config/mpc834x/目录中的Makefile,该文件中定义了mpc834x BSP的具体编译规则,而DCN特有的编译规则通过头文件的形式包含进来:

include $(TGT_DIR)/h/make/rules_dcn.bsp

其中的编译规则如下所示:

clean_all :

         - @ cd $(subst /,/,$(OBJ_DIR)) && @ del /S *.o *.a *.h *.c *.dep

 

config.rom boot.rom : clean_all $(BSP_DEFINES_HDR_FILE) $(OBJ_DIR)/bootrom_release.rom $(BOOT_LOADER) $(CONFIG_WITH_HWCFG)

#bootrom_release.rom重命名

         -$(MV) $(OBJ_DIR)/bootrom_release.rom $(OBJ_DIR)/$@

         -$(RM) $(OBJ_DIR)/bootrom_release.rom

ifneq ($(BOOT_LOADER),)

## romloader以及跳转指令合并的批处理

         -$(MAKE_ROM_WITH_LOADER)

endif

ifneq ($(POST_MAKE_BOOTROM),)

## bootrom添加header的批处理

         -$(POST_MAKE_BOOTROM)

endif

 

$(OBJ_DIR)/bootrom_release.rom : bootrom.hex

         - @ $(RM) $@

         $(HEXTOBIN) bootrom.hex -a -l $(ROM_START_ADRS) -u $(ROM_END_ADRS)

         $(MAKEBOOTROM) bootrom.bin

##生成的rom默认名为nos.rom

         - @ $(MV) nos.rom $@           

         - @ $(RM) bootrom.bin

         - @ $(RM) bootrom.hex

         - @ $(RM) nos.rom

至此,就完成了整个编译过程,对于上文中提到的文件的详细目录以及宏的定义见附录A

 

VxWorks6.7命令行方式编译config.rom过程中涉及到的文件的结构如下所示:

# +-> defs.bsp

# |   +-> defs.link

# |   |   +-> defs.option

# |   +-> make.PPC604diab

# |   |   +-> defs.ppc

# |   |       +-> defs.diab

# |   |           +-> defs.common

# |   +-> defs.x86-linux2

# |       +-> defs.unix 

# +-> rules.bsp

#     +-> rules.memory

#     |   +-> defs.memory

#     +-> rules.x86-linux2

#     +-> rules.fs

对于各个文件的详细目录及宏定义见附录B

总的来说,VxWorks6.7VxWorks5.5的编译过程基本上相同,微小的区别有以下几点:

1.  通过D:/WindRiver_ocd/wrenv.exe -p vxworks-6.7来设置环境变量。

2.  涉及到目录操作时,要把路径中的”/”改为”/”

3.  Vxworks5.5defs.x86-win32中定义了编译目标过程中需要的目录、文件、objdumpppc工具等信息,在vxworks6.7中这些定义都在defs.unix中。

4.  利用hex2bin.exe生成bin文件时生成的bin文件只有1k大小,存在着问题。

5.  cpcddel等指令执行失败.

 

 

附录C中说明了在从VxWorks5.5升级到VxWorks6.7的编译过程中遇到的一些问题. 

附录A

/BSP/make_5980_28_52T_configrom.bat

path_save=%PATH%                   #保存当前的环境变量

 

// 设置环境变量

/BSP/torVarsPPC_2.2.1.bat

           WIND_HOST_TYPE=x86-win32        //HOST主机类型

           WIND_BASE=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc //wind内核

           TOR221=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc

GCC_VER=296                   //编译器版本

DIABLIB=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc/host/diab

DIAB_HOST_TYPE=WIN32

PATH=E:/SVN_VIEW/compiler/Tornado2.2.1_ppc/host/diab/WIN32/bin;E:/SVN_VIEW/compiler/Tornado2.2.1_ppc/host/x86-win32/bin;%PATH%

        

         //以下参数需要用户配置,说明编译结果存放的目标、生成类型、编译选项等。

         OBJ_BASE=E:/SVN_VIEW/code_ivy6.1/BSP/Build

         SDK_BASE=E:/SVN_VIEW/code_ivy6.1/Driver_Zoma/SDK

BUILD_TYPE=ROM

         ROUTER=DCRS5980  ROUTER_CPU_TYPE=PPC8347  OBJ_BASE=%OBJ_BASE%

        

         //Makefile是编译BSP的总控Makefile,包含DCN的所有编译目标。

         /BSP/makefile

                   WTXTCL = wtxtcl.exe

                   /BSP/router_bsp.def

                            ROUTER_PRJ_TYPE= DCRS5980

                            ROUTER_BOARD_TYPE = box_hummer

                            ROUTER_CPU_PATH = mpc834x

                   OBJ_DIR = BSP/Build/DCRS5980/PPC8347/obj

OUTPUT_DIR = BSP/Build/DCRS5980/PPC8347

BIN_DIR = BSP/Build/DCRS5980/PPC8347/bin

BSP_DEFINES_HDR_FILE = BSP/Build/DCRS5980/PPC8347/obj/bsp_cfg_defines.h

调用wtxtcl makeconfig.tcl生成BSP/Build/DCRS5980/PPC8347/BaseDir.def

 

// mpc834x BSPMakefile

make -C Target/config/ mpc834x $@ ROUTER_CPU_TYPE= PPC8347

BSP/TARGET/config/mpc834x/makefile

         CPU  = PPC603

         TOOL  = gnu

        

         //make config生成该文件。(该文件时自动生成的)

         BSP/Build/DCRS5980/PPC8347/BaseDir.def

                   BSP_BASE=E:/SVN_VIEW/code_ivy6.1/BSP

                   RS_DRV_DIR=E:/SVN_VIEW/code_ivy6.1/Driver_Zoma/Aladdin

                   PLATFORM_INCLUDE_BASE=E:/SVN_VIEW/code_ivy6.1/Systems/vxworks

 

         WIND_PROJECT_MAKEFILE = TRUE

         TGT_DIR = BSP /target

        

 

         //该文件定义了BSP默认的Makefile配置。

         BSP/TARGET/h/make/defs.bsp

                  TOOL_FAMILY  = gnu

                   .SUFFIXES:  .cpp .out .cxx

                   default : exe     // exe target is the cannonical starting point.

                   DEFAULT_RULE= vxWorks// most targets will make vxWorks by default

                   BSP_NAME       = $(TARGET_DIR)

                   //配置一些编译选项,包括编译器、连接器、flags

                   CFLAGS=$(CC_ARCH_SPEC) $(CC_COMPILER) $(CC_OPTIM) $(CC_WARNINGS)  $(CC_INCLUDE) $(CC_DEFINES) $(ADDED_CFLAGS) $(CC_SOFT_FLOAT)

                   ……….

                   ROM_LINK_ADRS = $(ROM_TEXT_ADRS)

                   // standard list of BSP modules 标准库

MACH_DEP= $(OBJ_DIR)/sysALib.o $(OBJ_DIR)/sysLib.o $(MACH_EXTRA) $(ADDED_MODULES)

RELEASE_PRJ   = prj_default prj_diab

                           

                            //这里的工作很多赋值跟defs.bsp中式重复的

                            BSP/TARGET/h/make/make.PPC603gnu

                                     # SETUP install directory

SETUP_INSTALL_DIR = C:/Tornadoppc

 

//该文件包含了ppc603的默认的GNU工具链的配置信息

BSP/TARGET/h/tool/gnu/make.PPC603gnu

// 该文件包含了GNU工具链默认的编译配置信息

BSP/TARGET/h/tool/gnu/defs.gnu

                           

                            //该文件中定义了主机在编译目标是的默认配置

                            BSP/TARGET/h/make/defs. x86-win32

        

         TARGET_DIR    = mpc834x

VENDOR           = Motorola

BOARD              = mpc834x

DCN_BIN_DIR = E:/SVN_VIEW/code_ivy6.1/BSP/TARGET/bin

                           

                            //common目录定义以及依赖搜索路径定义

                            E:/SVN_VIEW/code_ivy6.1/BSP/TARGET/config/misc/ common_file_path.def

 

                            //板子相关的定义,比如:内存地址、板子特有的宏定义等。

E:/SVN_VIEW/code_ivy6.1/BSP/TARGET/config/mpc834x/box_hummer/board.def

         //用来生成config.rom

         MAKEBOOTROM = $(DCN_BIN_DIR)/makenoscfg_5980.exe

MAKEBOOTROM = $(DCN_BIN_DIR)/makenosrom.exe//生成boot.rom SDK

 

VMA_START = 0x$(ROM_TEXT_ADRS)

USR_ENTRY   = usrInit

## hex2bin工具

HEXTOBIN = $(DCN_BIN_DIR)/Hex2bin.exe

 

//头文件搜索路径

EXTRA_INCLUDE += -I$(PLATFORM_INCLUDE_BASE)/os_ppc /

                   -I$(BSP_BASE)/../Platform/INCLUDE

-I$(DCN_COMMON_INCLUDE)-I$(DCN_COMMON_DIR) -I$(ROUTER_BOARD_TYPE)          $(SDK_INCLUDE_FLAG)

                            //编译规则定义

                            E:/SVN_VIEW/code_ivy6.1/BSP/TARGET/h/make/rules.bsp

                            E:/SVN_VIEW/code_ivy6.1/BSP/TARGET/h/make/rules_dcn.bsp//DCN独有的规则

                                     

//把生成的config.rom拷贝到目标地址。

cmd /C "copy……..”

  

附录B

D:/WindRiver_ocd/vxworks-6.7/target/config/ads834x/Makefile

         CPU  = PPC32

CPU_VARIANT = _ppc603_83xx

TOOL  = diab

WIND_BASE=D:/WindRiver_ocd/vxworks-6.7

WIND_HOST_TYPE=x86-win32

WIND_HOME=D:/WindRiver_ocd

TGT_DIR = D:/WindRiver_ocd/vxworks-6.7/target

TARGET_DIR  = ads834x

VENDOR      = Freescale

BOARD       = ads834x

USR_ENTRY   = usrInit

WRVX_COMPBASE=D:/WindRiver_ocd/components

COMP_IPNET2=ip_net2-6.7

 

//BSP Makefile文件的默认配置

D:/WindRiver_ocd/vxworks-6.7/target /h/make/defs.bsp

         BSP_NAME       = ads834x

        

//在该文件中定义了OS库文件路径VX_OS_LIBS以及要搜索的库文件路径//LD_LINK_PATH

         D:/WindRiver_ocd/vxworks-6.7/target /h/make/defs.link

                  

                   // This file is included in Makefiles to establish information related to option builds

                   D:/WindRiver_ocd/vxworks-6.7/target /h/make/defs.option

 

// 用于组件的编译

                   D:/WindRiver_ocd/vxworks-6.7/target /h/make/defs.comps

 

          //diab编译工具的定义和编译选项

          D:/WindRiver_ocd/vxworks-6.7/target/h/tool/diab/make.PPC32diab

 

// hostwin32主机的默认配置

         D:/WindRiver_ocd/vxworks-6.7/target/h/make/defs.x86-win32

                   MAKESHELL = sh.exe

                  

// 编译目标文件的默认定义。包括:目录、doc文件、工具、宏定义等。

                   D:/WindRiver_ocd/vxworks-6.7/target/h/make/def.unix

                  

         D:/WindRiver_ocd/setup/make/defs.resourcelist

 

// This file contains rules used in building targets.该文件只作用于在BSP目录下命令行方式编译,它对project或者component编译不起作用。Rule.project文件作用域project编译。

D:/WindRiver_ocd/vxworks-6.7/target/h/make/rules.bsp

        

         // define macros that pertain to IPCOM requirements

         D:/WindRiver_ocd/components/ip_net2-6.7/osconfig/vxworks/make/efs.ipcom

 

// For now this files only contains the adrsMacros rule which prints the list of ADRS //macros needed by the kernel files.

D:/WindRiver_ocd/vxworks-6.7/target/h/make/rules.memory

 

// This file contains rules used for embedding a filesystem within vxWorks image.

D:/WindRiver_ocd/vxworks-6.7/target/h/make/rules.fs

  

附录C

1.  D:/WindRiver_ocd/vxworks-6.7/target /config/misc/rules_bsp.def

通配符和引号问题

$(BSP_DEFINES_HDR_FILE) :

         @echo /* This is a auto generated file, do not modify it /*/ > $(BSP_DEFINES_HDR_FILE)

ifeq ($(BSP_CONFIG_BOOT),y)

  ifeq ($(BSP_CONFIG_COMMAND_DEFAULT),y)

         @echo "#define INCLUDE_CMD_DEFAULT" >> $(BSP_DEFINES_HDR_FILE)

  endif

  endif

2.  D:/WindRiver_ocd/vxworks-6.7/target /config/all/bootconfig.c

头文件由target/h/目录到Systems/vxworks/os_ppc

3.  函数参数的个数变化:

bsp/target/src/config/usrmmuinit.c

mmuPpcLibInit()

vmBaseGlobalMapInit()

bsp/target/src/config/usrkernel.c

IMPORT Q_HEAD readyQHead;

taskLibInit()

eventLibInit ()

workQInit ()

bsp/target/config/misc/boot/bootconfigfunc.c

IMPORT char * creationDate;

bsp/target/config/all/bootconfig.c

kernelInit();//参数变为两个,把参数都封装到结构体_KERNEL_INIT_PARAMS中。

memInit();//增加了options参数,暂且设置为MEM_PART_DEFAULT_OPTIONS

excInit ();

target/h/pciClass.h 中宏定义改变了不少导致pciConfigFuncShow()中的case语句出错。

D:/WindRiver_ocd/vxworks-6.7/target/h/end.h 中多了jobQueueLib.h头文件,该头文件变化比较大。

Bsp/target/config/mpc834x/syslib.c sysHwInit()调用vxPowerModeSet ()

vxPowerModeSet (); //函数参数的宏定义位置发生变化

4.  链接错误: 这是一个兼容性错误,这个错误出现的原因是,在glibc 2.3.2-11及其之后的C库版本,移除了__ctype_b和相关symbal的定义。(http://blog.csdn.net/noodies/archive/2009/07/28/4386280.aspx

ldppc -o tmp.o -X -N  -e usrInit /

    -Ttext 02f00000   partialImage.o symTbl.o ctdt.o  /

    -T D:/WindRiver_ocd/vxworks-6.7/target/config/BSP/target/h/tool/gnu/ldscripts/link.RAM

partialImage.o: In function `bootCmdMain':

(.text+0x517a): undefined reference to `__ctype_tolower'

partialImage.o: In function `bootCmdMain':

(.text+0x517e): undefined reference to `__ctype_tolower'

partialImage.o: In function `BSP_do_case':

(.text+0x1416a): undefined reference to `__ctype_toupper'

5.  编译错误:这也是编译器的一个bug

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30761

Error: unsupported relocation against _PPC_MSR_FP

6.  Target/h/make/rules.bspbootrom.Z.s生成过程中

$(MKSYMTBL) tmp.o symTbl.c

sysTbl.c的生成中standTblstandTblSize出现重复的声明,手动删除解决。

7.  Hex2bin.exe生成的bin文件不正确。

原创粉丝点击