Chinaunix首页 | 论坛 | 博客
  • 博客访问: 882458
  • 博文数量: 116
  • 博客积分: 3923
  • 博客等级: 中校
  • 技术积分: 1337
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 01:22
文章分类

全部博文(116)

文章存档

2013年(1)

2012年(17)

2011年(69)

2009年(29)

分类: WINDOWS

2011-05-31 00:43:20

上个星期主要一直在搞vivi这个bootloader东西,主要是针对QQ2440开发板,我要的是在Nor Flash上跑,一个星期过去,结果出来了,现在的vivi才是我想要的,我把menuconfig去掉,把非S3C2440的所有其他CPU干掉,同时把其他没用的宏干掉,修改makefile变得简单容易阅读的,同时,上个星期一直在ubuntu 10.04系统里调试,每次打开机器都要他妈的开个VirtualBox的虚拟机,加上笔记本不稳定,串口错误数据下子把笔记本弄的重启,受不了,就直接用windows下的GNU410版本进行编译,经修改后,完全可以编译vivi编码,这样就可以摆脱虚拟机的痛苦。。。。呵呵

下面是vivi主目录下的Makefile文件,已经调整过,支持CYGWINubuntu平台,不同ubuntu下用的是arm-gcc 3.4.2版本,就是Friendly那边下载的,直接解压就可以,在cygwin平台使用的是GNU410版本

FILE: Makefile

======================================================================

# cygwin
CYG_GNU410_INC    = '/cygdrive/c/Program Files/GNUARM.410/lib/gcc/arm-elf/4.1.0'
CYG_GNU410_CLIB   = '/cygdrive/c/Program Files/GNUARM.410/arm-elf/lib'
CYG_GNU410_GCCLIB = '/cygdrive/c/Program Files/GNUARM.410/lib/gcc/arm-elf/4.1.0'
CYG_GNU410_BIN    = '/cygdrive/c/Program Files/GNUARM.410/bin'

# vc6
GNU410_INC    = 'C:/Program Files/GNUARM.410/lib/gcc/arm-elf/4.1.0'
GNU410_CLIB   = 'C:/Program Files/GNUARM.410/arm-elf/lib'
GNU410_GCCLIB = 'C:/Program Files/GNUARM.410/lib/gcc/arm-elf/4.1.0'
GNU410_BIN    = 'C:/Program Files/GNUARM.410/bin'

# linux GCC 4.3.2
GNU432_INC    = '/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include'
GNU432_CLIB   = '/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib'
GNU432_GCCLIB = '/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t'
GNU432_BIN    = '/usr/local/arm/4.3.2/bin'


ifdef COMSPEC
ifdef _VBOOT_VC6_
# vc6
ARM_INCLUDE   ?=$(GNU410_INC)
ARM_C_LPATH   ?=$(GNU410_CLIB)
ARM_GCC_LPATH ?=$(GNU410_GCCLIB)
ARM_BIN_PATH  ?=$(GNU410_BIN)
VBOOT_ROOT    ?=E:/work/vivi_bakup/vboot
else   
# cygwin
ARM_INCLUDE   ?=$(CYG_GNU410_INC)
ARM_C_LPATH   ?=$(CYG_GNU410_CLIB)
ARM_GCC_LPATH ?=$(CYG_GNU410_GCCLIB)
ARM_BIN_PATH  ?=$(CYG_GNU410_BIN)
VBOOT_ROOT    ?=$(shell /bin/pwd)
endif
else
# linux
ARM_INCLUDE   ?=$(GNU432_INC)
ARM_C_LPATH   ?=$(GNU432_CLIB)
ARM_GCC_LPATH ?=$(GNU432_GCCLIB)
ARM_BIN_PATH  ?=$(GNU432_BIN)
VBOOT_ROOT    ?=$(shell /bin/pwd)
endif

ifdef COMSPEC
#cygwin, vc6
CROSS_COMPILE = $(ARM_BIN_PATH)/arm-elf-
else
#linux
CROSS_COMPILE = $(ARM_BIN_PATH)/arm-linux-
endif

LINUX_INCLUDE_DIR = $(ARM_INCLUDE)

TOPDIR = $(VBOOT_ROOT)

CONFIG_FILE = defconfig

ARCH = arm

include $(CONFIG_FILE)

VERSION     = 0
PATCHLEVEL     = 1
SUBLEVEL     = 4

VBOOTRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)

VBOOTPATH = '$(TOPDIR)/include'

MAKE        = make
AS              = $(CROSS_COMPILE)as
LD              = $(CROSS_COMPILE)ld
CC              = $(CROSS_COMPILE)gcc
CPP             = $(CC) -E
AR              = $(CROSS_COMPILE)ar
NM              = $(CROSS_COMPILE)nm
OBJCOPY         = $(CROSS_COMPILE)objcopy
MAKEFILES       = $(TOPDIR)/$(CONFIG_FILE)

export  TOPDIR LD CC

all: vboot


CPPFLAGS = -I$(VBOOTPATH) -I$(LINUX_INCLUDE_DIR)

CFLAGS = $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fPIC -fomit-frame-pointer

# cygwin platform
ifdef COMSPEC
CFLAGS += -D__GNU410__
endif

AFLAGS = -D__ASSEMBLY__ $(CPPFLAGS)

CORE_FILES    = init/main.o init/version.o lib/lib.o
LIBS            = lib/priv_data/priv_data.o
SUBDIRS         = drivers lib

DRIVERS-y :=
DRIVERS-$(CONFIG_SERIAL) += drivers/serial/serial.o
DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtd.o
DRIVERS := $(DRIVERS-y)

CLEAN_FILES = vboot.elf vboot.bin vboot.nm vboot.map

OBJCOPYFLAGS = -R .comment -R .stab -R .stabstr

CLIBS = -L$(ARM_GCC_LPATH) -L$(ARM_C_LPATH) -lgcc -lc

LINKFLAGS = -Tarch/vboot.lds -Bstatic


include arch/Makefile

export  CPPFLAGS CFLAGS AFLAGS DRIVERS LDFLAGS

vboot: include/version.h init/main.o init/version.o linuxsubdirs
    $(LD) -v $(LINKFLAGS) \
        $(HEAD) \
        $(CORE_FILES) \
        $(DRIVERS) \
        $(LIBS) \
        -o vboot.elf $(CLIBS)
    $(NM) -v -l vboot.elf > vboot.map
    $(OBJCOPY) -O binary -S vboot.elf vboot.bin $(OBJCOPYFLAGS)

linuxsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))

$(patsubst %, _dir_%, $(SUBDIRS)) : include/version.h
    $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C $(patsubst _dir_%, %, $@)


.PHONY: dummy

include/version.h: dummy


init/version.o: init/version.c
    $(CC) $(CFLAGS) -DUTS_MACHINE='"$(ARCH)"' -c -o init/version.o init/version.c

init/main.o: init/main.c
    $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o $<

clean:
    find . \( -name '*.o' -o -name core -o -name ".*.flags" \) -type f -print \
    | xargs rm -f
    rm -f $(CLEAN_FILES)

   
include Rules.make

======================================================================

同时在使用ViVi时,注意几个问题:

ViVi命令:

Flash erase  0x00000000(ADDR) 0x4000(LENGTH) ;

地址必须是Nor Flash的边界值,开发板上是amd160DBNor Flash, block信息是

1 x 8k, 2 x 4k, 1 x 16k, 32 x 64k,(总线是8-bit或者16-bit会有些变化),不过这里的的ADDRLENGTH都是以8-bit总线算的,可以查datasheet来获得地址信息。

Load flash  0x00000000(ADDR) 0x4000(LENGTH) x;

这里跟上面一样,因为这命令先把文件通过x-modem协议下载到地址RAM空间的基本地址,然后再把RAM的数据拷贝到Nor Flash中,写Nor Flash必须先擦除整块,所以这里ADDRLENGTH都必须块对齐,不过你可以使用分区表来定位信息,不过你的分区表必须都是块对齐,例如:Load flash vivi x

不爽一下自己:

1. 使用Nor FalshMTD时,就是因为不了解Nor Flash的使用,结果把head.S初始化看了好多遍,以为初始化时搞错了,然后把Nor Flashdatasheet看了一遍,最后发现原来是自己使用错误引起。。。

2. ViVi使用GNU410Cygwin下编译时,竟然出现使用x-modem下载屡次失败,移过来可能就几个小时,结果找x-modem这个错误找了好久,结果是定义数据类型时出错,我把__u8__s8类型搞反了,弄得我把x-modem协议和代码查了好多遍。

3. 编译器从arm-gcc 3.4.2换成GNU410时,被那个库依赖问题搞了半天,依赖的是c标准库和gcc库,不然报错,记得库依赖顺序不可以搞错。。。


======================================================================


(续) 今天也修改了Makefile,上面Makefile已经修正,支持VC6编辑器,不过还是使用make来处理,同时也改了编译出来的名字叫vboot,好听多了。。。


这里贴一下在调用上面Makefile的build.bat,其实跟cygwin差不多,主要是路径问题,cygwin的路径是/cygdriver/c改成C:/这样就可以啦,同时也把/cygwin/bin目录添加进来,因为要使用到mv, cp, rm等命令,而且值得注意的是,我把/cygwin/bin放到$PATH的最前,主要是我机器环境比较复杂,这样可以先调用/cygwin/bin里的工具,免得夜长梦多。。。。


FILE:build.bat

======================================================================


set PATH=D:\cygwin\bin;%PATH%;C:\Program Files\GNUARM.410\bin;C:\Program Files\GNUARM.410\arm-elf\bin;C:\Program Files\GNUARM.410\libexec\gcc\arm-elf\4.1.0;

make _VBOOT_VC6_=1 COMSPEC=1 -C .. -f Makefile


======================================================================

阅读(665) | 评论(0) | 转发(0) |
0

上一篇:SecureCRT的配置备份

下一篇:函数调用约定

给主人留下些什么吧!~~