|
由于EB40没有网卡驱动,因此只好自己增加配置.具体是redboot_ROM.ecm中增加: package -hardware CYGPKG_DEVS_ETH_RLTK_ISA8019AS current ; package -hardware CYGPKG_DEVS_ETH_NS_DP83902A current package CYGPKG_IO_ETH_DRIVERS current ; 然后在文件ecos/packages/devs/eth/rltk/isa8019as/current/include/devs_eth_rltk_isa8019as.inl中修改网卡的起始地址和中断: static dp83902a_priv_data_t dp83902a_eth0_priv_data = { base: (cyg_uint8*) 0x03210000, interrupt: 17, tx_buf1: 0x40, tx_buf2: 0x48, rx_buf_start: 0x50, rx_buf_end: 0x80, hardwired_esa: false, }; 然后编译,烧录,运行.但运行到网卡时就没有反应了.网卡能检测到. 此时只好调试原代码,打开了dp83902a驱动的开关.发现发送数据包时,就不动了.经过检查其代码,发现mac地址有二种方式,一种是从网卡 eprom中取,另一种就是指定,于是我就把配置改成了指定: static dp83902a_priv_data_t dp83902a_eth0_priv_data = { base: (cyg_uint8*) 0x03210000, interrupt: 17, tx_buf1: 0x40, tx_buf2: 0x48, rx_buf_start: 0x50, rx_buf_end: 0x80, hardwired_esa: true, esa: {0x00, 0x05, 0x0c, 0x04, 0x05, 0x06}, }; 但效果仍然一样. 通过多次调试和分析, 想起了寄存器偏移量的问题. 我在EV40板子上用uclinux驱动网卡时也是同样的问题,后来把所有寄存器的偏移量*2就可以了.于是动手将全部寄存器偏移量*2.这样呢, 网卡驱动就可以了, 并能发送和接收数据包了.【这个呢,我自己也不太明白,是不是跟硬件的设置有关?】 但redboot启动时, 经过很长时间才到redboot提示符出来.原来是redboot启动时,自动通过bootp去取的IP地址,由于没有bootp服务器,因此要等待一段时间才出现超时, 让我误以为死机了. 建立好bootp服务器, redboot就正常启动,并且配置了ip地址. 然后ping也通了. 此时大功告成.!!!
十 启动uclinux uclinux编译时必须注意的是: 由于 redboot运行时,必须要是使用部分内存,你可以用version命令看出使用了什么内存, 因此uclinux的入口地址就不能是0x2000000, 我选择了0x2010000, 前面留了64K. 将linux.elf拷贝到bootp和tftp服务器的/tftpboot下. 运行: > load –m tftp linux.elf > go 0x2010000 注意: 由于redboot串口使用38400波特率,而uclinux采用9600波特率,因此uclinux启动后出现乱码,没有关系,把波特率改成9600, 然后重新连接终端就可以了.
附: 修改的patch. Patch是针对WX10板子的. 由于我修改的ecos是cvs版本,每次checkout的不一定一样.因此patch就不一定能够直接使用, 另外呢,我的patch中也有一些我增加的调试语句,如果你要产品中使用,建议删除好了 | |