开发环境:主机:Window XP SP2;linux:VMware7.01+ubuntu9.10;目标板:扬创utu2440-F开发板

交叉编译器:arm-linux-gcc4.3.2(一开始用的是编译内核的版本arm-linux-gcc3.4.1,但出现了软浮点问题,于是换成了现在用的版本,当然本人编译内核的时候还是用3.4.1版本)。

摘要:按照上一篇(方法与步骤2)的操作后,u-boot-2011.03可通过tftp下载到SDRAM中跑起来了,并可看到熟悉的启动信息。

由于后续的移植和调试很大程度上都依赖于网络,因此,在u-boot可以初步启动后,就得移植网卡驱动了,使网络可以用起来。utu2440-F板载的网卡是CS8900A。

在 S3C24XX系列中,u-boot默认对CS8900网卡进行配置使用,只是在个别地方要根据开发板的具体网卡片选进行设置,就可以对S3C24XX系列中CS8900网卡的支持使用。所以需要修改的地方不多。由于数据通过总线传送,所以要注意地址空间的配置和总线的配置。

1. CS8900A网卡驱动配置

1)修改u-boot板级配置文件/include/configs/reille2440.h:

在大概103行左右,修改和配置好网络配置,如下:

#define CONFIG_ETHADDR      00:0c:20:02:0a:5b
#define CONFIG_NETMASK      255.255.255.0
#define CONFIG_IPADDR       192.168.1.168
#define CONFIG_SERVERIP     192.168.1.125

CONFIG_ETHADDR :是网卡的MAC地址;CONFIG_IPADDR :是板的IP地址;CONFIG_SERVERIP:TFTP服务器的IP地址。

2)配置CS8900基地址:

同样在板级配置文件reille2440.h中,找到关于CS8900网卡的配置,如下:

#define CONFIG_NET_MULTI
#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 */

这里注意CONFIG_CS8900_BASE的值。

在utu2440-F板中,CS8900A的SA0-SA19连接到 S3C2440的ADDR0-ADDR19位置(但仅SA0-SA15被真正使用),使用的片选为nGCS3,即CS8900A被映射到S3C2440的BANK3,起始地址为0x18000000;而在reille2440.h的配置文件中看到CS8900A的基地址为0x19000300.,这与具体的开发板电路连接有关,这里以utu2440-F板为例说明:

CS8900被连接到S3C2440 nGCS3组,nGCS3的起始地址为0x18000000,addr24被用来控制I/O或者MEM模式的读写操作,当addr24为1时,可以确保CS8900 I/O模式有效,并且MEM模式有效。所以此处addr24=1表示我们的u-boot中的CS8900可以I/O模式读写。

所以会有0x19000000如下:0001  1001 (addr24=1) 0000  0000  0000  0000  0000  0000

CS8900A(在datasheet中可以查找到):上电后,CS8900的基地址默认是300H。因此CS8900A的基地址为0x19000300。

3)添加网络ping命令支持:

u-boot中默认是没有配置ping命令的,因此需要用户在移植u-boot时自已配置网络ping命令的支持。

同样在u-boot板级配置文件中,在大概90—100行之间,有关命令支持的配置,如下:

/*
* Command line configuration.
*/
#include

#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ELF
/****** add command by guoyirong 2011.06.18 ******/
#define CONFIG_CMD_PING
/*************************************************/

#include 这个文件包含了u-boot默认的标准的必须的命令配置支持。

4)屏蔽“raise:signal # 8 caught”打印信息

如果不进行操作,用ping命令ping IP地址时,会在串口中出现大量的“raise:signal # 8 caught”打印信息。

找到打印该语句的地方,arch/arm/lib/eabi_compat.c,如下:

int raise (int signum)
{
/* del by guoyirong 2011.6.19
printf(“raise: Signal # %d caught/n”, signum);
*/
return 0;
}

屏蔽后对运行没有影响。

5)重新编译并测试网络

重新编译u-boot,然后下载到内存中运行,并用ping命令测试网卡。

使用ping命令ping 1的IP地址,一直出现如下提示而不动:

[reille2440]# ping 192.168.1.1

Using CS8900-0 device

ping 192.168.1.1确实就是这样,停在这里不动;但如果ping其它IP地址就可以,如ping 192.168.1.125,而且tftp下载内核可以成功。如下所示:

[reille2440]# ping 192.168.1.125
Using CS8900-0 device
host 192.168.1.125 is alive

 

[reille2440]# tftp 30008000 uImage
Using CS8900-0 device
TFTP from server 192.168.1.125; our IP address is 192.168.1.168
Filename ‘uImage’.
Load address: 0x30008000
Loading: #################################################################
##############################################################
done
Bytes transferred = 1856616 (1c5468 hex)

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:
推荐阅读相关文章:

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

   
© 2012 velep.com | reille blog | 管理| 粤ICP备12094833号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量