整天捣鼓嵌入式,兼职搞搞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.S(SDRAM设置)
config.mk(bootloar镜像入口地址,一般不用设)
2.)/include/configs/smdk2410.h-à/include/configs/tq2440.h(定义板子对应的CONFIG,u-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,我们可以明白L2995,L2998等参数的意义,其实整个工程是通过这些变量来指定编译的文件!
ARCH----------对应/lib_(ARCH)目录
CPU-------------对应/cpu/(CPU)目录
BOARD--------对应/board/(VENDOR)/(BOARD)目录,
同时对应/include/configs/(BOARD).h (全局配置文件)
VENDOR------对应/board/(VENDOR)目录
若VENDOR为NULL,则对应/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.h为tq2440.h,并根据板子情况修改之
4).修改uboot/Makefile中2998行,为你新建的板子目录增加编译规则,对应伪目标名为
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.pdf,Linux移植的完整文档.pdf等。