先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题
- 我们板子上的网卡用的是DM9000,查看driver/net下的Makefile,配置宏支持DM9000
COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
- 修改include\configs\smdk2440.h,去掉CS8900,支持DM9000,另外CONFIG_DM9000_BASE这个值应该设置为多少呢?
因为DM9000网卡将数据传给2440cpu,那么对于2440来说,就是一个数据传输,可以将
DM9000借口看做一个类似内存控制器的接口
2440cpu通过内存控制器访问DM9000网卡
a. 设置内存控制器,时序、位宽
b. 确定访问地址
c. 片选nGCS4接到了DM9000上,那么cpu发出什么地址的时候,会使得nGCS4被片选上了?
参考s3c2440芯片手册,可知当地址范围在0x20000000~0x28000000时,nGCS4会被片选上
/*
* Hardware drivers
*/
#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
#endif
- 修改board\samsung\smdk2440\lowlevel_init.S下面的内存控制器接口寄存器初始化,主要是寄存器BWSCON和BANKCON4
SMRDATA:
.long 0x22011110 //BWSCON
.long 0x00000700 //BANKCON0
.long 0x00000700 //BANKCON1
.long 0x00000700 //BANKCON2
.long 0x00000700 //BANKCON3
.long 0x00000740 //BANKCON4
.long 0x00000700 //BANKCON5
.long 0x00018005 //BANKCON6
.long 0x00018005 //BANKCON7
.long 0x008C04F4 // REFRESH
.long 0x000000B1 //BANKSIZE
.long 0x00000030 //MRSRB6
.long 0x00000030 //MRSRB7
- 修改board\samsung\smdk2440\smdk2440.c,支持DM9000初始化,DM9000.c中肯定会提供一个接口进行对DM9000的初始化
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
return rc;
}
- 移植修改好最新的代码之后,编译make
- 烧写到nor flash,在超级终端中输入如下命令
loady 30000000
protect off all
erase 0 7ffff
cp.b 30000000 0 80000
此时就能够识别到DM9000网卡了
7. 设置开发板的ip地址
set ipaddr 192.168.0.17
set ethaddr 00:0c:29:4d:64:f6 //第一个值是有含义的,参照我们pc真实板子的地址设置
- 测试和PC之间的网络连接
ping 192.168.0.108 //PC的ip地址
有下面的打印,说明板子和pc网络连接正常
9. 使用网络下载文件,需要打开tftpd32.exe,需要在板子上设置serverip地址
set serverip 192.168.0.108 //pc的ip地址
tftp 30000000 uImage //使用网络下载
bootm 30000000 //启动内核