- 论坛徽章:
- 0
|
原帖由 Godbach 于 2009-4-16 17:11 发表
RTL8139中进行probe的函数如下:
上面贴出的部分代码,rtl8139_init_board完成对网卡的一些初始化。然后表示网卡的结构体dev->base_addr指向了网卡的寄存器空间的起始地址。该地址开始的前6个字节是网卡的 ...
注意:对于网卡来说,有2个地址。一个是IO读写的地址(这个所有得外设都有),还有一个是网卡特有的 MAC地址。
dev 是一个net_device结构。它的->base_addr保存的是IO读写地址。而它的dev_addr保存的是MAC地址。2个是不一样的。
具体可以参考LINUX DEVICE DRIVER 3RD EDITION, CHAPTER 17. PAGE 507
其实现在的 8139TOO.C 支持debug输出。在加载的时候,可以用这句:
modprobe 8139too debug=3
同时改 /etc/syslogd.conf,把里面的默认DEBUG输出的值改成“debug”,而不是“info". 就可以在 /var/log/messages里看到 8139TOO的输出了。
下面是在我的QEMU虚拟机里的输出:
eth0: RealTek RTL8139 at 0xf89c000, 52:54:00:12:34:56, IRQ 10.
上面的输出是由8130TOO.C里的这句打出来的:
1028 printk (KERN_INFO "%s: %s at 0x%lx, "
1029 "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, "
1030 "IRQ %d\n",
1031 dev->name,
1032 board_info[ent->driver_data].name,
1033 dev->base_addr,
1034 dev->dev_addr[0], dev->dev_addr[1],
1035 dev->dev_addr[2], dev->dev_addr[3],
1036 dev->dev_addr[4], dev->dev_addr[5],
1037 dev->irq);
PS:如果只想看上面的输出的话,MODPROBE时不带参数,不改SYSLOGD.CONF都可以。
目前我的测试环境:QEMU 0.10.2, GUEST OS:CentOS 5.3
另外,现在的在QEMU上的centos默认的是用8139CP.C来作为驱动的,大概因为QEMU模拟的8139比较新。如果想试8130too.c的话,需要先卸载8139cp
[ 本帖最后由 accessory 于 2009-4-21 23:26 编辑 ] |
|