x210v3开发板u-boot-2012.10移植之十一---添加DM9000网卡支持
来源:互联网 发布:php木马图片制作 编辑:程序博客网 时间:2024/05/17 03:23
疯雨-版权所有,转载请注明【http://blog.csdn.net/u010346967】
为了后面的nfs文件系统挂载做必要的准备,这里必须添加对网卡的支持,通过查原理图可以知道x210v3开发板网卡型号是DM9000AE。
网卡同sd卡一样国际通用,所以uboot对其的支持也是很完美的,只需添加进编译即可。
如果你对uboot的启动流程有一定了解,你一定会去arch/arm/lib/board.c文件去找网卡初始化,找到如下内容:
616 #if defined(CONFIG_CMD_NET)617 puts("Net: ");618 eth_initialize(gd->bd);
显然,我们美柚看到串口打印出 Net:字符,所以应该先去配置CONFIG_CMD_NET宏,去哪里配置呢,当然是配置文件x210v3.h啦!
修改配置问件:
83 //#undef CONFIG_CMD_NET重新编译烧写,看到串口打印信息如下:
果然跟预想的一样,为什么出现没网卡找到呢?uboot又不是神仙,它怎么知道我们用的什么网卡,所以得我们自己添加支持,
前面注意到一个函数eth_initialize,这个函数就是完成初始化网卡功能,那么它在哪里定义的呢?找找看,如果有sourceinsight应该很容易找到,我在linux下也能用ctags很容易找到,就在net/eth.c文件里,并且找到如下信息:
312 if (board_eth_init != __def_eth_init) {313 if (board_eth_init(bis) < 0)314 printf("Board Net Initialization Failed\n");315 } else if (cpu_eth_init != __def_eth_init) {316 if (cpu_eth_init(bis) < 0)317 printf("CPU Net Initialization Failed\n");318 } else319 printf("Net Initialization Skipped\n");320 321 if (!eth_devices) {322 puts("No ethernet found.\n");
最后两条信息是不是很眼熟呢?如果不眼熟,我会怀疑你是不是适合做这行。说明一切的源头就是board_eth_init 和 __def_eth_init这两个函数,从输出信息来看这两个相等了而且和另一个函数也相等。先看第二个函数:简单啊,直接返回-1.
108 static int __def_eth_init(bd_t *bis)109 {110 return -1;111 }
再看第一个函数:
113 int board_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init"))) ;学了这么多年c语言还是有看不懂的,百度吧,找到一个好东西:__attribute__ 之weak,alias属性 不懂的可以看看这篇文章,其实就是如果board_eth_init美柚定义的话就给board_eth_init取了个小名叫__def_eth_init 。难怪前面会相等,board_eth_init没定义。终于发现问题所在了。那么去哪里定义呢?这个函数跟board相关我们就把它放到board/samsung/x210v3/x210v3.c文件里吧。在文件最后添加如下代码:
145 int board_eth_init(bd_t *bis)146 {147 return dm9000_initialize(bis);148 }
make 一下出错,关键错误信息如下:
board/samsung/x210v3/libx210v3.o: In function `board_eth_init':/home/uboot/u-boot-2012.10/board/samsung/x210v3/x210v3.c:147: undefined reference to `dm9000_initialize'好奇怪,查找下这个函数,
root@xjg:/home/uboot/u-boot-2012.10# grep -r "dm9000"
看到drivers/net/dm9000x.c:int dm9000_initialize(bd_t *bis),说明是在这里定义的,那么就是说这个文件没有编译进工程,肯定是少了宏定义,去这个文件所在的makefile里面看看,
38 COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
不用说,赶紧定义这个宏,还是去配置文件x210v3.h里面定义吧。
66 /* DM9000 */ 67 #define CONFIG_DRIVER_DM9000
make 一下,发现又是一些东西没定义,DM9000_DATA,DM9000_IO,CONFIG_DM9000_BASE三个。
接着在配置文件里面添加这三个宏定义:
66 /* DM9000 */ 67 #define CONFIG_DRIVER_DM9000 68 #define CONFIG_DM9000_BASE 0x88000000 69 #define DM9000_IO CONFIG_DM9000_BASE 70 #define DM9000_DATA (DM9000_IO+0x4)
再make就没错了。当然还得添加一些网卡配置,还要支持tftp和ping命令:
啰嗦一下,下面的地址:其实这里需要查的就几个,第一 CONFIG_DM9000_BASE这个要看你接到哪个bank,通过底板原理图查dm9000芯片:
注意的就是CSn1(从名字上看像是bank1)看接到哪了,去核心板看看:
发现接到了s5pv210的Xm0CSn1/MP01_1引脚。再看看datasheet你就清楚了,这是个片选引脚,表示接到SROM的bank1,好查看bank1的基地址0x88000000
mac地址(ETHADDR)随意给定一个,serverip就是我主机的ip,然后ipaddr是开发板ip地址,这个必须设置为和主机在同一网段,也就是除了最后一个小数点后的数不同外,其他的都要相同。子网掩码一般都是那个,好像还一个gateway你自己指定一个吧,同一网段就可以,要自己添加哦,我就不加了。
66 /* DM9000 */ 67 #define CONFIG_DRIVER_DM9000 68 #define CONFIG_DM9000_BASE 0x88000000 69 #define DM9000_IO CONFIG_DM9000_BASE 70 #define DM9000_DATA (DM9000_IO+0x4) 71 #define CONFIG_ETHADDR 08:00:3E:26:0A:5B 72 #define CONFIG_IPADDR 10.0.3.2 73 #define CONFIG_NETMASK 255.255.255.0 74 #define CONFIG_SERVERIP 10.0.3.1 75 #define CONFIG_CMD_PING 76 #define CONFIG_CMD_TFTP
再次编译烧写,结果如下:
启动时按空格键进入uboot控制台,ping 10.0.3.1发现如下错误:
打开调试宏 CONFIG_DM9000_DEBUG,哈哈看不懂,对我没啥用,还是关了吧。百度算了,发现6410和210网卡配置有个区别,就是210必须配置一个寄存器SROM_BW,去试试配置下,网卡是接在bank1,设置第4位和第五位为1就可以了,第4位表示数据位数,看原理图就知道16bit,第五位我也不清楚,但是要设置为1,否则不行。有知道它含义的可以在下面评论。。。。
就这样了,我在lowlevel_init.S里面设置的这个寄存器:
45 lowlevel_init: 46 mov r11, lr 47 48 /* set srom_bw */ 49 ldr r0, =0xE8000000 50 ldr r1, =0x30 51 str r1,[r0] 52
好了,大功告成,重新编译烧写,ping命令和tftp都可以使用了。。。
能使用tftp传文件是因为我主机已经搭建好了tftp服务器。然后将要传到开发板的文件复制到tftp服务器的共享目录(我设置的是/tftpboot),然后就是注意修改文件权限。不会搭建的看我的另一篇文章tftp服务器搭建。就可以在uboot控制台传输文件了,传输命令:tftp 文件名 内存地址 ,不如:tftp uImage 0x20008000
有图有真相:
- x210v3开发板u-boot-2012.10移植之十一---添加DM9000网卡支持
- 移植u-boot-2012.04----支持DM9000网卡
- x210v3开发板u-boot-2012.10移植之四---完善开发板配置,建立x210v3_config配置
- x210v3开发板u-boot-2012.10移植之二---如何学习uboot,掌握uboot结构
- x210v3开发板u-boot-2012.10移植之三---mkconfig分析
- x210v3开发板u-boot-2012.10移植之五---点亮led进行调试
- x210v3开发板u-boot-2012.10移植之七---六步轻松搞定串口初始化
- x210v3开发板u-boot-2012.10移植之六---系统时钟初始化
- x210v3开发板u-boot-2012.10移植之八---DDR2初始化我也能搞定
- x210v3开发板u-boot-2012.10移植之十---串口摇身一变控制台
- x210v3开发板u-boot-2012.10移植之补充篇---uboot启动流程详解
- x210v3开发板u-boot-2012.10移植之十二---启动内核
- u-boot-2014.10移植第17天----添加DM9000网卡支持(一)
- u-boot-2014.10移植第18天----添加DM9000网卡支持(二)
- fl2440 移植u-boot-2010.09全纪录3----------DM9000网卡支持
- u-boot-2016.05移植:(5)、支持DM9000网卡
- u-boot移植(十二)---代码修改---支持DM9000网卡
- 移植u-boot-2015.07-rc3之修改代码支持DM9000网卡(七)
- js实现的省市县三级联动的最新源码
- 多线程例子
- 第七章作业
- CXF restful webserice同时支持几种协议 json, xml
- vs2010高亮
- x210v3开发板u-boot-2012.10移植之十一---添加DM9000网卡支持
- 初识JAVA
- 深入理解Android的startservice和bindservice
- Qt之QLineEdit之插入图标及位置设置
- linux 下 mysql-python 安装
- WPF内建面板之——DockPanel
- Remove Element
- Andy Chen Java
- Linux网络应用综合项目(6.15)