Chinaunix首页 | 论坛 | 博客
  • 博客访问: 109354
  • 博文数量: 29
  • 博客积分: 447
  • 博客等级: 下士
  • 技术积分: 414
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-05 23:03
个人简介

整天捣鼓嵌入式,兼职搞搞iOS,这么折腾为了啥?都是为了俺的娃!

文章分类

分类: 嵌入式

2010-05-11 22:21:41

1.U-boot移植(u-boot-2009.08)

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

 源文件目录结构

U-boot源码结构:(粗体标注的文件夹跟移植相关

 /board:                跟开发板配置有关

/common:            实现uboot命令的程序文件目录

 /cpu:                   CPU体系相关的目录

 /disk:                   对磁盘的支持

 /doc:                   文档

 /driver:               设备驱动程序所在目录

 /fs:                      文件系统相关

 /include:             头文件

 /net:                    与网络协议相关代码

 /tools:                  生成U-boot镜像的工具,如mkimage,crc

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

U-boot编译的过程:

u-boot-1.1.6/board/configs/(BOARD).h 中定义各种宏开关,可以修改以打开或关闭某些功能,make tq2440_config 将传递定义的这些宏给顶层Makefile,之后make命令将递归调用各目录下需要编译的文件,根据各自目录下的Makefile来编译并链接成目标文件。

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

U-boot启动过程:

u-boot-1.1.6/cpu/(CPU)/start.S                                   _start:

u-boot-1.1.6/cpu/(CPU)/start.S                                     reset:

u-boot-1.1.6/cpu/(CPU)/start.S                                     cpu_init_crit:

u-boot-1.1.6/board/(BOARD)/lowlevel_init.S              lowlevel_init:

u-boot-1.1.6/cpu/(CPU)/start.S                                     relocate:

u-boot-1.1.6/cpu/(CPU)/start.S                                     _start_armboot:

u-boot-1.1.6/lib_arm/board.c                                         start_armboot();

u-boot-1.1.6/common/main.c                                         main_loop();

启动的过程基本上就包含在上面四个文件中。

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

移植需修改的文件(EmbedSky tq2440基于smdk2410板子)

1.)/board/samsung/smdk2410/*->/board/samsung/tq2440/*(板子相关)

修改其中smdk2410.c->tq2440.c(设置系统时钟及board_init()

Makefile(目标规则设置)

lowlevel_init.SSDRAM设置)

config.mk(bootloar镜像入口地址,一般不用设)

2.)/include/configs/smdk2410.h-à/include/configs/tq2440.h定义板子对应CONFIGu-boot编译开关)

3.)修改顶层目录Makefile,为新建板子增加编译规则,并设置交叉编译器

      157 # load ARCH, BOARD, and CPU configuration

    158 include $(obj)include/config.mk

    159 export  ARCH CPU BOARD VENDOR SOC

    160

    161 # set default to nothing for native builds

    162 ifeq ($(HOSTARCH),$(ARCH))

    163 CROSS_COMPILE ?=

164 endif

…..

2994 smdk2400_config :       unconfig

2995         @$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 samsung s3c24x0

2996 smdk2410_config :       unconfig

2997         @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

注意:通过L159,我们可以明白L2995L2998等参数的意义,其实整个工程是通过这些变量来指定编译的文件!

ARCH----------对应/lib_(ARCH)目录

CPU-------------对应/cpu/(CPU)目录

BOARD--------对应/board/(VENDOR)/(BOARD)目录,

                      同时对应/include/configs/(BOARD).h (全局配置文件)

VENDOR------对应/board/(VENDOR)目录

VENDORNULL,则对应/board/(BOARD)目录

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

Uboot移植步骤:

1)make disclean make clean 清除所有.depend文件确保源码无污染

2).在uboot/board/(VENDOR)/(board-name)下找到与你的板子硬件类似的文件夹,如移植tq2440的板子,找到uboot/board/samsung/smdk2410这个文件夹,复制并命名为tq2440,将其中的smdk2410.c改名为tq2440.c,并修改Makefile,目标文件也改成tq2440.o

3).复制uboot/include/configs/smdk2410.htq2440.h,并根据板子情况修改之

4).修改uboot/Makefile2998,为你新建的板子目录增加编译规则,对应伪目标名为

tq2440_config.

tq2440_config   :       unconfig

        @$(MKCONFIG) $(@:_config=) arm arm920t tq2440 samsung s3c24x0

并且修改CROSS_COMPILE交叉编译器(也可以在先设置环境变量或临时指定

make CROSS_COMPILE=/usr/local/arm/4.3.3/bin/arm-linux-)

5).回到uboot目录下,运行make tq2440_config就可以执行编译了.当然,对于自己设计的嵌入式系统,要使u-boot能完美的运行起来,还有许多艰巨的工作等着我们做,比如驱动,

U-boot功能的裁剪等等。

Uboot移植时要修改的地方主要有:

1.)U-boot中机器编号与Linux内核中机器编号要一致:

U-boot: include/asm-arm/mach-types.h

Kernel: arch/arm/tools/mach-type

2.)启动地址,NAND Flash支持,串口,网卡等驱动是移植的重点。

附:U-boot启动具体过程分析可查阅相关文档:如u-boot-1.1.6学习笔记.pdf,StudyARMBoot.pdfLinux移植的完整文档.pdf等。

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

上一篇:没有了

下一篇:gdb在arm-linux上的移植

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