为什么要在自制操作系统上写网卡驱动?请看这里:
如何在自制操作系统写网卡驱动程序 (1)
配置信息
参考:https://blog.csdn.net/qq_31799983/article/details/106976145?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8-106976145-blog-80163665.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8-106976145-blog-80163665.pc_relevant_default&utm_relevant_index=11
通过读这个配置信息的 class_code 字段,我们就知道 PCI 连接的设备是网卡?还是显卡?还是硬盘?还是声卡?
这个配置信息的 Device ID,Vendor ID, 表明 PCI 连接的设备的型号和制造厂商.
这个配置信息的 Base Address 0 里存储了 PCI 连接的设备的地址映射内存中的地址。
总之,只要读到这个配置信息,我们就可以找到网卡,找到网卡,才能控制网卡向外发送信息,接收信息等。
那么具体如何读取这个配置信息呢?通过 I / O 口 0xCF8 和 0xCFC, 通过这两个端口,就可以读取到配置信息了。如下两行代码:
io_out32(0xCF8, addr);// 把配置信息的地址 addr 输出到 I / O 端口 0xCF8indata = io_in32(0xCFC); // 从 I / O 端口 0xCFC 获取到配置信息。
这里面的 addr 是什么?是配置信息所在的地址,可以这样生成:
unsigned int bus_max=0xff; unsigned int dev_max=0x1f; unsigned int func_max=0x07; // 遍历配置信息 for(bus=0;bus