| |
 |
|
 |
 |
|
 |
移植U-Boot.1.3.1到S3C24X0(补:DM9000网卡移植)
|
|
|
移植U-Boot.1.3.1到S3C24X0(补:DM9000网卡移植)
对于U-Boot1.2.0和U-Boot1.3.1,DM9000的驱动有一点小变化,就是添加了从U-Boot的参数中提取MAC地址的语句(应该是可以避免网卡的MAC地址与设置的不同的情况)。具体修改如下: 在/include/configs/tekkaman2440.h文件中修改添加对DM9000的支持,屏蔽CS8900:
|
/* * Hardware drivers */ //#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
//#define CS8900_BASE 0x19000300
//#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
#define CONFIG_DRIVER_DM9000 1 #define CONFIG_DM9000_BASE 0x20000300 #define DM9000_IO CONFIG_DM9000_BASE #define DM9000_DATA (CONFIG_DM9000_BASE+4) #define CONFIG_DM9000_USE_16BIT
|
在这里#define CONFIG_DM9000_BASE 的定义最为重要。不同的板子只要修改这个参数即可。友善之臂的SBC2440V4上的DM9000在BANK4上所以定义为“0x20000300”。有的板子是在BANK1上,就为“0x08000300”。
这样定义完之后,就可以“make”,然后下载到板上运行。ping和tftp都可以实现。但是有些问题:
(1)网卡的MAC地址与你设置的不一样(在U-boot1.3.1中可能不会出现,没有试验过) (2)会有“could not establish link” 的提示,而且在显示MAC地址后很久后才响应。
追踪源码可以知道:这些都是发生在int eth_init(bd_t * bd)初始化时的问题。
修正BUG(修改/drivers/dm9000.c文件)
(1)网卡MAC地址错误的解决方法:
|
/* Initilize dm9000 board */ int eth_init(bd_t * bd) { ......
//tekkamanninja
/* Set Node address */ /* for (i = 0; i < 6; i++) ((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);
if (is_zero_ether_addr(bd->bi_enetaddr) || is_multicast_ether_addr(bd->bi_enetaddr)) { */ /* try reading from environment */ // u8 i;
char *s, *e; s = getenv ("ethaddr"); for (i = 0; i < 6; ++i) { bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0; if (s) s = (*e) ? e + 1 : e; } // }
//tekkamanninja
printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", bd->bi_enetaddr[0], bd->bi_enetaddr[1], bd->bi_enetaddr[2], bd->bi_enetaddr[3], bd->bi_enetaddr[4], bd->bi_enetaddr[5]); ......
|
红色的字符是要做的修改:功能是屏蔽原有获取MAC地址的语句,直接使用从U-Boot的参数区读取数据并存到bd->bi_enetaddr[i]中。
(2)“could not establish link” 提示和慢响应的解决方法:
|
/* Initilize dm9000 board */ int eth_init(bd_t * bd) { ......
DM9000_iow(DM9000_RCR, RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN); /* RX enable */ DM9000_iow(DM9000_IMR, IMR_PAR); /* Enable TX/RX interrupt mask */
#if 0 i = 0; while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */ udelay(1000); i++; if (i == 10000) { printf("could not establish link\n"); return 0; } printf(" link=%d\n",i); } #endif ...... }
| 屏蔽检测和延时的语句。
|
回目录 移植U-Boot.1.3.1到S3C2410和S3C2440
|
|
发表于: 2008-03-03,修改于: 2008-03-03 00:36,已浏览979次,有评论0条
推荐
投诉
|
|
 |
|
 |
|  |
|
 |
 |
|
 |
网友评论
 |
|
 |
 |
网友:
刚学嵌入式的菜鸟 | 时间:2008-03-05 17:36:09 IP地址:58.49.224.★ |
|
|
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-03-16 15:59:18 IP地址:59.173.129.★ |
|
|
|
I have a problem with DM9000.Can I look at your file lowlevel_init.S?
my E-mail chensi_04@126.com
Thank you!
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-04-02 23:36:19 IP地址:210.76.98.★ |
|
|
|
我的nand flash是三星的64m,移植成功,但是saveenv出错。
puts ("Writing to Nand... ");没执行。
估计是前面的nand_legacy_erase错误。请问怎末解决?谢谢
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-04-02 23:42:40 IP地址:210.76.98.★ |
|
|
|
惭愧,搞定了。居然忘记屏蔽return 1了。呵呵。
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
conding
| 时间:2008-04-08 10:48:24 IP地址:59.54.98.★ |
|
|
|
楼上的兄弟屏蔽return 1干什么?那 应该是出错返回阿?
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-05-11 16:41:21 IP地址:59.173.130.★ |
|
|
|
楼主,你好。我也是SBC2440 V4的板子,由于原有的VIVI好像不能用了,U-boot弄了几天没跑起来,不知道板子是不是有问题(买回放了大半年)。可不可以把你的SBC2440 v4的u-boot的bin文件发给我。
chensi_04@126.com 万分感激
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-05-26 20:14:36 IP地址:124.64.177.★ |
|
|
|
楼主,您好。能不能把uda1341驱动的文件先发一份给我,谢谢!
zhj8407@163.com
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-06-08 17:02:20 IP地址:121.28.194.★ |
|
|
|
老兄按你的方法移植了boot,结果网卡灯点亮了,可ping不到,ping自己也ping不到,是什么原因阿,启动信息如下:
U-Boot 1.1.3 (Jun 5 2008 - 11:52:08)
U-Boot code: 33F80000 -> 33FA7974 BSS: -> 33FEA100
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 2 MB
In: serial
Out: serial
Err: serial
dm9000 i/o: 0x10000300, id: 0x90000a46
MAC: ff:ff:ff:ff:ff:ff
operating at unknown: 15 mode
Hit any key to stop autoboot: 0
KILL2440 #
有时还为:
U-Boot code: 33F80000 -> 33FA7890 BSS: -> 33FEA000
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 2 MB
In: serial
Out: serial
Err: serial
dm9000 i/o: 0x10000300, id: 0x90000a46
could not establish link
Hit any key to stop autoboot: 0
请给予解答,谢谢了,
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-06-12 16:02:04 IP地址:118.26.196.★ |
|
|
|
博主,你好,看了你关于u-boot的文章收获颇多,按照你的方法移植了u-boot可以启动了,但是还有个问题希望向博主请教。u-boot启动后进入命令行,网卡的灯不亮,在ping一次,或者是tftp链接一下灯就会亮起,此后一切正常,是不是在uboot启动的时候没有默认激活网卡?查看了板子上带的u-boot的启动,灯会自动亮起的。
比较了各种情况后发现,当启动命令行出现
dm9000 i/o: 0x19000300, id: 0x90000a46
MAC: 01:02:03:04:05:06
后网卡灯即亮起。查看了代码不知道这一功能应该在何处加入,请问博主有没有这种经历,请赐教,谢谢
|
|
|
|
 |
|
 |
|  |
|
 |
|