先说下 我是结合yanghao和韦东山老师两位的博客文档自己移植U-boot来搭建整个系统,我用的u-boot-2010.09版本来移植的,对不同的开发板基本上是通用的,最多就是Not flash需要更改一些参数吧了,有可能文章写得不是很全,可以直接看补丁文件。 自己移植这一块确实挺幸苦的,今天在这里写出来,希望给大家带来帮助,同时也是给自己的一个总结,更方便查找笔记。在这里我讲写出U-boot,kernel,rootfs怎么的移植步骤,这是一个耗时间的过程,不急慢慢写,呵呵。这里面移植U-boot是最难的,你会学到很多东西,毕竟是跟硬件打交道,好了废话不多说。
虚拟机:VMWare--ubuntu9.0
开发板:SDRAM:64M ROM:NAND FLASH 256M
U-boot下载地址:u-boot-2010.09.tar.bz2
补丁文件下载地址:u-boot-2010.09_jz2440.patch
一 在Uboot中添加jz2440开发板的支持
#tar -xjvf u-boot-2010.09.tar.bz2 /*测试下自己的交叉编译器是否支持该版本的U-boot*/
#make smdk2410_config
make //如果编译不出错的话就可以开始移植了,我用的交叉编译器版本是一下是查看自己交叉编译器的版本
如果有错请更换交叉编译器版本。
#arm-linux-gcc -v //查看自己的交叉编译版本
/work/tools/gcc-3.4.5-glibc-2.3.6/lib/gcc/arm-linux/3.4.5/specs
# cd u-boot-2010.09.tar.bz2
#make distclean
二 u-boot移植步骤方向说明:
1.以SMDK2410为模板,建立好开发板相关的文件,并利用交叉编译器编译生成.bin文件;
2.再修改相关时钟频率使之适应开发板硬件配置,让uboot能在ram中运行调试成功(即串口能打印数据);
3.修改norflash相关配置,使uboot能支持norfalsh的读写,附:uboot默认支持从norflash启动;
4.修改nandflash相关配置,使uboot能支持nandflash的读写;使uboot能从nand flash启动;
5.增加uboot的功能,如网络(此开发板是DM9000A)、USB等(这个功能没实现);
6.修改相应配置,使uboot能引导Linux系统启动;
7。增加yaffs2文件系统的烧写;
三、让U-B00T在内存中运行起来
(一)创建开发板文件夹
1.进入board/samsung目录,拷贝目录中的smdk2410文件夹放在当前目录下,并重命名为jz2440(这是板子配置文件夹);
2.进入jz2440 ,把文件smdk2410.c重命名为jz2440 .c(uboot启动第二步执行的文件);打开Makefile,修改COBJS:=jz2440 .o flash.o
(二)创建配置文件
进到include/configs目录下,找到配置文件smdk2410.h,将其拷贝并重命名为jz2440.h(uboot相关各种宏定义,关键文件);
(三)创建编译规则
打开顶层Makefile(注意是在根目录下),修改(红色部分):
老版本:
1.添加编译板配置文件时用到的命令(即makejz2440 _config ;注意@之前加的是tab,不是空格)
smdk2410_config :unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
jz2440 _config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t jz2440 samsung s3c24x0 //命令前面一定留个tab行
新版本:
smdk2410 arm arm920t - samsung s3c24x0
jz2440 arm arm920t - samsung s3c24x0
四 编译U-boot
编译之前打开/include/configs/jz2440.h;增加宏定义
#define CONFIG_SKIP_LOWLEVEL_INIT 1 //跳过底层初始化,测试的u-boot.bin直接运行在SDRAM中
/*#define CONFIG_SKIP_RELOCATE_UBOOT 1 */ 这是针对Nor FLASH 运行的 注释掉u-boo才能初始化CPU 避免重新定位
1.make distclean //清空之前操作生成的各种文件
2. makejz2440_config //生成配置文件
3.make //编译.bin文件
若能成功编译出.bin文件,则说明交叉编译器没问题,初步移植也没问题,此时的.bin 文件只是基于smdk2410开发板的,在咱们的开发板是jz2440上不能适用的,所以在此基础上还要对相应的文件进行修改配置,例如要修改jz2440.c;jz2440.h等文件使其能支持本开发板,以上的步骤是很通用的。
到这里这个U-boot的模板就建立起来了,把u-boot.bin烧写在SDRAM中,但是不会显示任何信息,那是对的,我们还没有初始化时钟,下章我们主要在start.S中修改文件。