分类: LINUX
2009-03-20 14:43:32
一. 根据原理图,确认网卡的地址和中断号
地址:0x19000000
中断号: EINT9
二. 修改drivers/net/cs89x0.c,指定CS
#elif defined(CONFIG_ARCH_S
#include
#include
#define S
static unsigned int netcard_portlist[] __initdate = {0, 0};
static unsigned int cs8900_irq_map[] = {IRQ_EINT9, 0, 0, 0};
#else
三. 修改入口函数cs89x0_probe
1. 定义变量,用来保存寄存器的值:
int irq;
int io;
#if defined(CONFIG_ARCH_S
unsigned int oldval_bwscon;
unsigned int oldval_bankcon3;
#endif
2. 设置MAC,总线宽度等:
io = dev->base_addr;
irq = dev->irq;
#if defined(CONFIG_ARCH_S
if(netcard_portlist[0])
return -ENODEV;
netcard_portlist[0] = (unsigned int)ioremap(S
dev->dev_addr[0] = 0x08;
dev->dev_addr[1] = 0x89;
dev->dev_addr[2] = 0x89;
dev->dev_addr[3] = 0x89;
dev->dev_addr[4] = 0x89;
dev->dev_addr[5] = 0x89;
oldval_bwscon = *((volatile unsigned int *)S
*((volatile unsigned int *)S
oldval_bankcon3 = *((volatile unsigned int *)S
*((volatile unsigned int *)S
#endif
if (net_debug)
printk("cs89x0:cs89x0_probe(0x%x)\n", io);
3. 出错退出
out:
#if defined(CONFIG_ARCH_S
iounmap(netcard_portlist[0]);
netcard_portlist[0] = 0;
*((volatile unsigned int *)S
*((volatile unsigned int *)S
#endif
free_netdev(dev);
四. 注册中断处理程序,指定中断触发方式,修改net_open函数
#if 0
writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
#endif
write_irq(dev, lp->chip_type, dev->irq);
#if defined(CONFIG_ARCH_S
ret = request_irq(dev->irq, &net_interrupt, IRQF_TRIGGER_RISING, dev->name, dev);
#else
ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
#endif
五. 在drivers/net/cs89x0.c中适当的位置加上CONFIG_ARCH_S
1. net_open(struct net_device *dev)
{
struct net_local *lp = netdev_priv(dev);
int result = 0;
int i;
int ret;
#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S
if (dev->irq < 2) {
2. #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S
if (((1 << dev->irq) & lp->irq_map) == 0) {
printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
dev->name, dev->irq, lp->irq_map);
ret = -EAGAIN;
goto bad_out;
}
#endif
3. #if defined(CONFIG_ARCH_PNX010X) || defined(CONFIG_ARCH_S
result = A_CNF_10B_T;
#endif
六. 全局变量static int io;改为static unsigned int io;
七. 内核配置文件修改:
修改drivers/net/kconfig中的描述
config CS89x0
tristate "CS89x0 support"
depends on (NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)) || ARCH_S
八. 使用CS
九. 设置从NFS启动:
ckz24x0 > set bootargs noinitrd root=/dev/nfs console=ttySAC0 nfsroot=192.168.6.240:/home/ckz/work/src/fs_mini ip=192.168.6.239:192.168.6.240:192.168.6.1:255.255.255.0::eth0:off
以上的命令意思:
Ip=