Uboot2010.03移植笔记

来源:互联网 发布:怎样学c语言 编辑:程序博客网 时间:2024/05/22 23:22

移植UBOOT之前看了好多资料,迟迟没有下手,最近终于动手了大笑

新手一个,笔记之中难免有许多错误的地方,希望大神们能够指正!!!

本人语文比较烂,组织的不好请见谅!!偷笑


建议的资料:

韦东山老师的第一期视频的UBOOT移植部分

《mini2440之U-boot移植详细手册》

《OK6410的u-boot2010.03移植过程》

个人觉得都是挺不错uboot移植资料


废话不多说了,开始移植吧!!

开发板:OK6410

256M   MDDR                      EDD10163BBH-5BLS-F

1G             SLC-NAND                  MT29F8G08ABABAWP

Uboot版本:2010.03

SourceInsight版本:3.5 (简称SI)

 

UBOOT文件结构

移植之前先看看UBOOT的文件结构如何,打开uboot的README

找到这样的介绍:



其中board、cpu、drivers是与我们板子关联比较大的代码

进入uboot后发现以lib_开头的文件夹应该是与架构有关的库


如lib_arm   lib_i386  lib_avr………

但也不全是如lib_generic

由于我们使用的是ARM架构CPU所以基本上可以将除lib_arm,lib_generic ,libfdt以外的文件夹都删除掉

Cpu文件夹也是这样的结构,arm1176文件夹其他无关的都可以删掉

继续看其他文件夹发现board里面是板级文件,里面有一个Samsung文件夹留着其他删掉。

Include里面一些以asm-开头的文件件也可以删除,保留asm-arm和asm-generic


再进入asm-arm里,发现有有许多文件夹,只保留arch-s3c64xx文件夹,其他以arch-开头的全删掉

删掉一些文件夹后发现清爽多了。

在进入board/samsung后发现只有6400 2440 2410….几个文件夹,看来这个版本的uboot并未支持6410,不过不要紧6400看起来就和6410很近,那我们先将6400 copy一份改为6410

再进入6410目录,将smdk6400.h改为smdk6410.h

打开smdk6410.h发现里面包含了smdk6400.h,我是6410怎么能够包含6400的头文件,马上改成6410。将里面所有文件中包含的smdk6400改为smdk6410,既然没有6410的文件夹,那么我想也应该没有6410的头文件。那赶快去arm/arch目录下找找吧!。。。。。。怎么没发现这个路径呢?(该包含路径是配置后生成的连接路径)那么smdk6400.h放在哪呢?看看u-boot的目录就清楚了吧!对,就是include文件夹中,进去后发现有个asm-arm继续在发现一个arch-s3c64xx,在进去发现s3c6400.h,copy为s3c6410.h

(当然你可以搜索文件,这样是最快的,哈哈)

配置sdmk6410

打开顶层Makefile,搜索smdk6400,找到这样一段


我们照葫芦画瓢copy一下然后把里面的6400全改成6410


由上面可知配置6410是会在/nand_spl/board/Samsung建立smdk6410的文件夹

我们进入那个文件夹,吧6400复制为6410,然后删除所有6400文件夹

提示:Makefile详细解释请参照http://blog.chinaunix.net/uid-11319766-id-3050283.html

感觉博主分析的很好


试编译

将文件清理修改之后,看看能不能编译出一个uboot(至少让编译器不报错,不管编译出的文件能不能运行)我们试着去编译一下,将u-boot的文件夹拷贝到虚拟机上,进入该目录执行

make smdk6410_config 


出现这句话说明配置成功

接着执行make

发现有错


第一行提示:没有找到configs目录下的smdk6410.h,既然没有那我们再copy一个呗

进入include/configs目录将smdk6400.h复制为smdk6410.h(命令mv smdk6400.h smdk6410.h)

改好后继续make

又发现一个错误


这个和上面的错误不同的是:这个提示的是”没有规则……”,而不是上面的error,那就应该不是编译器报错,而可能是Makefile提示的错误,那我们进到/board/Samsung/smdk6410中看看,打开其中的Makefile,发先其中COBJS-y:=smdk6400.o

既然生成的目标是smdk6400.o那么依赖的文件应该是smdk6400.c我们将其改为smdk6410.o保存,再次make

发现又有一个错误


提示没有FPGA这个目录,其中没有error字样,应该是Makefile提示的

是不是我们将FPGA这个无关项删掉了呢!确实 删了  那怎么办难道要重新解压 更改 吗??

既然FPGA是无关的那他为什么要将其编译进去呢?

FPGA目录删掉了,那就不存在FPGA目录里面的MAKEFILE报错可能,而drives目录没有Makefile所以只能是顶层目录将其添加进去了,搜索顶层Makefile发现这样的一句


在其前面加上“#”将其注释


再次编译

问题又来了


发现进入死循环了,(Ctrl+c停掉)提示找不到目录,不慌,进去/nand_spl/board/Samsung/smdk6410一探究竟执行(ls –l)命令,发现里面是连接文件


而lowlevel_init.s连接到了一个被删除了的文件夹中,这个错误又没有error字样,看这个目录下的Makefile吧  打开搜索lowlevel_init发现


这个文件来自smdk6400的目录,改成6410再来编译

(这就是为什么要将原来的smdk6400文件夹删除的原因,否则这个地方没问题,但是你发现你修改了smdk6410下的lowlevel_init.s却没效果,那时这个问题就难找了。应为连接的根本不是smdk6410文件夹下的lowlevel_init.s)


大功告成,,编译成功!但是这个u-boot只是编译成功了,能不能用不知道

试下吧,(结果可想而知,当然没反应啊!如果你的板子有反应那当然更好)

注意修改代码后要保持虚拟机和windows中的代码的一致性,否则可能将你搞混

好今天先写到这,,,下次分析代码,并移植到OK6410上!



0 0
原创粉丝点击