多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
先说下  我是结合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 ](http://download.csdn.net/detail/qq_21792169/9248959) 补丁文件下载地址:[u-boot-2010.09_jz2440.patch](http://download.csdn.net/detail/qq_21792169/9340099) ## 一, 在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中修改文件。