DM9000网卡移植
u-boot默认的网卡是CS8900,而DM9000拥有高性价比,在嵌入式领域广泛被采用。uboot对DM9000支持的已经很完善,稍作修改,就可以使用。
1、修改:/home/eric/Documents/u-boot-2013.04-rc1/include/configs/smdk6410.h,屏蔽CS8900相关定义,增加DM9000支持
/*
* Hardware drivers
*/
#if 0 //eric++ 2017-11-12
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x18800300
#define CONFIG_CS8900_BUS16 /* follow the Linux driver */
#endif
#define CONFIG_DM9000 /* we have a DM9000 on-board */
#define CONFIG_DM9000_BASE 0x18800300
#define CONFIG_DM9000_USE_16BIT /* follow the Linux driver */
#define CONFIG_DM9000_NO_SROM 1
#define CONFIG_DRIVER_DM9000 1
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_ETHADDR 00.20.40.80.0a.0b
#define CONFIG_NET_MASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.2
#define CONFIG_SERVERIP 192.168.1.136
#define CONFIG_GATEWAYIP 192.168.1.1
注意:其中服务器IP要为电脑的IP,因为稍后会用电脑模拟服务器,而本机IP要和服务器IP位于同一网段。这样才可以在局域网内进行通讯。
2、修改:/home/eric/Documents/u-boot-2013.04-rc1/board/samsung/smdk6410/smdk6410.c
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
#ifdef CONFIG_DM9000 //eric++ 2017-11-12
rc = dm9000_initialize( bis );
#endif
return rc;
}
3、编译启动!
U-Boot 2013.04-rc1 (Nov 12 2017 - 13:45:23) for SMDK6410
CPU: S3C6410@533MHz
Fclk = 533MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode)
Board: SMDK6410
DRAM: 128 MiB
WARNING: Caches not enabled
Flash: *** failed ***
NAND: 256 MiB
MMC: Samsung Host Controller: 0,3.6 GiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x60000, size 0x1c0000
1835008 bytes read: OK
Wrong Image Format for bootm command
ERROR: can't get kernel image!
网卡已成功切换成DM9000
4、设备接上网线,连接路由,保证和电脑在同一局域网内,用ping命令测试,是否连通:
SMDK6410 # ping 192.168.1.136
dm9000 i/o: 0x18800300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
Using dm9000 device
host 192.168.1.136 is alive
SMDK6410 #
如果网络配置不对,或者网络没有连接好,则会ping failed;
SMDK6410 # ping 192.168.1.136
dm9000 i/o: 0x18800300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
could not establish link
Using dm9000 device
ping failed; host 192.168.1.136 is not alive
SMDK6410 #
6、利用tftp进行下载u-boot到nand flash中,Linux配置tftp服务器,或者window开启tftp32;
原理:从tftp服务器下载u-boot-nand.bin到RAM中,再烧写nand flash。
开启windows中tftp32,模拟一个tftp服务器,Current Directory中放入u-boot-nand.bin文件。
执行如下命令:
SMDK6410 # tftp 50008000 u-boot-nand.bin
dm9000 i/o: 0x18800300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.136; our IP address is 192.168.1.2
Filename 'u-boot-nand.bin'.
Load address: 0x50008000
Loading: ####################
444.3 KiB/s
done
Bytes transferred = 280712 (44888 hex)
SMDK6410 #
SMDK6410 # nand erase.chip
NAND erase.chip: device 0 whole chip
Skipping bad block at 0x02960000
Skipping bad block at 0x06860000
Skipping bad block at 0x07220000
Skipping bad block at 0x08d00000
Skipping bad block at 0x0df60000
Skipping bad block at 0x0fc40000
Erasing at 0xffe0000 -- 100% complete.
OK
SMDK6410 # nand write.uboot 50008000 0 0
NAND write: device 0 offset 0x0, size 0x0
516096 bytes written: OK
SMDK6410 #
经过以上三个命令顺利将服务器中的u-boot-nand.bin烧录至nand flash中。和用SD卡进行烧写nand相比,方便很多!