因为板子一直没有网口,自己的板子还没画完,所以调试很不方便,于是就想用一个enc28j60的spi口的网络芯片来做为网口,想法是可以的,也看到别人移植成功,只不过不是at91sam9261,是其它的cpu,想法是有了,结果网上一搜,资料基本没有,看来是要自己去实践了.后来想了下,uboot首先要支持enc28j60,所以这样去做,资料又更少了,自己动手吧!
因为是SPI的接口,所以首先要分析uboot里面at91sam9261的spi驱动!刚开始看了下板子上不是有个SPI口的dataflash吗?但是打开文件一看,这个不适合驱动enc28j60,因为官方自己针对这个dataflash的spi的驱动,不是通用的,后来又找到atmel_spi.c这个驱动,看了下编译的结果,傻眼了,dataflash驱动根本不是用的这个驱动,看来难度有点大,对于我这个菜鸟来说!
以前移植uboot是按照文档去做,自己去做的东西比较少,uboot也没分析工作流程,今天看了下,大致的清楚了是怎么样组织文件的!越分析越觉得uboot的高深!感到自己太菜了!
我针对与自己现在的板子和理解,为什么那么多板子和驱动还有其它的文件不混淆了,uboot是通过makefile,config.mk来控制的!可以随便找个makfile文件打开来看下:
//u-boot-1.3.4/drivers/spi/makefile
include $(TOPDIR)/config.mk
LIB := $(obj)libspi.a
COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
COBJS-$(CONFIG_ATMEL_SPI) += atmel_spi.o
COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))
all: $(LIB)
$(LIB): $(obj).depend $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
#########################################################################
# defines $(obj).depend target
include $(SRCTREE)/rules.mk
sinclude $(obj).depend
#########################################################################
可以看到是怎么组织的了,上面有一个点,这个是用来到底uboot编译那些,不编译那些.
COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
COBJS-$(CONFIG_ATMEL_SPI) += atmel_spi.o
COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o
中的:
CONFIG_MPC8XXX_SPI,CONFIG_ATMEL_SPI,CONFIG_MXC_SPI
如果你想编译你需要的文件,你可以在你的板子的配置文件定义上面几个宏定义,uboot就是靠这个来管理文件的!
比如我现在想需要官方的那个spi驱动(atmel_spi.c),我可以在u-boot-1.3.4/include/configs/at91sam9261ek.h,找到你自己板子的配置,我的是at91sam9261ek.h
然后你在适当的地方加上宏定义:
#define CONFIG_ATMEL_SPI 1
这样你就可以将atmel_spi.c这个文件编译进uboot了!
现在就把spi驱动加进uboot了,但是这个驱动比较简单,不是很符合我的要求,还需要去完善修改,这个是后面的工作.
现在得到驱动后,后面的工作就是在2个文件上下工夫了,
u-boot-1.3.4/include/configs/at91sam9261ek.h和
u-boot-1.3.4/board/atmel/at91sam9261ek/at91sam9261ek.c这2个文件,主要是添加相关的宏定义和相关的函数!呵呵,这个说起来简单,做起来不是很好搞的,先不管了,首先理解概念和流程了再说.
为了不破坏原来的uboot架构,我重新建立了一个spi的驱动程序:
在u-boot-1.3.4/drivers/spi下建立这2个文件:
at91sam9261_spi.h和at91sam9261_spi.c
然后修改该目录下的makefile文件,添加选项:
COBJS-$(CONFIG_AT91SAM9261_SPI) += at91sam9261_spi.o
然后在u-boot-1.3.4/include/configs/at91sam9261ek.h中定义CONFIG_AT91SAM9261_SPI
这样这个驱动就添加进uboot了!接下来的工作就是自己编写驱动了!