BIOS关于网卡

网卡 Network Interface Card,简称NIC,网络适配器。
网卡
一块网卡包括OSI模型的两个层,物理层和数据链路层。
物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准,数据编码和电路等,并向数据链路层设备提供标准接口。
数据链路层则提供寻址结构、数据帧的构建。数据差错检查,传送控制,向网络层提供标准数据接口等功能。
网卡的功能:
将电脑的数据封装为帧,并通过网线将数据发送到网络上。
接收网络上其他设备传过来的帧,并将帧数据重新合成数据,发送到所在的电脑中。
总线接口:用于网卡与电脑相连,内置式网卡需要通过总线接口插在计算机主板扩展槽中。主要有ISA,PCI,PCMCIA和USB等,常见的是PCI总线接口的网卡。
网卡要承担串行数据或并行数据间的转换,数据在计算机总线中并行传输,而在网络的物理缆线中以串行的比特流传输。
以太网中数据链路层的芯片一般简称为MAC控制器,物理层的芯片简称PHY,许多网卡的芯片吧MAC控制器和PHY的功能做到了一颗芯片中,比如Intel82259网卡和3COM 3C905网卡。但是MAC和PHY的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MAC和PHY是分开做德,比如D-LINK的DFE-530TX。
网卡的供电:
大都是使用3.3V或更低的电压。有的是双电压,因此需要电源转换电路。
MAC地址
网络的物理地址,理论上应该全球唯一,出厂自带。
实际可能一批电脑出货MAC地址完全一样,出了生产事故,还有用户在刷新BIOS(实际上刷新了整个IFWI),MAC地址被清成全FF等等。
通常来说MAC地址存储在网卡MAC/PHY后面接的一块EEPROM/Flash上,二者用I2C或者SPI连接。该EEPROM中不仅存放MAC地址,一般还有网卡的ROM程序,配置参数等。
在MAC上电后,会自动从EEPROM读入信息,一般数据会映射到PCIe配置空间中,而程序会直接运行。
硬件上通常可以通过I2C或者SPI命令来更新Flash中MAC地址的部分。有些MAC控制器提供了相关寄存器,可以通过操作该寄存器来让MAC控制器代为完成这些操作。
个别主板厂家提供了MAC地址烧写工具,可以将MAC地址标签的地址烧入。如果实在找不到工具,在Windows下可以进行修改,但只在本操作系统有效。
BIOS与网卡
目前,我接触到的只有读MAC地址这一项。
在PCIe的配置空间,利用Class Code识别网卡。
配置空间
Class CodeBAR寄存器中存储的是MAC地址的位置。
我接触到的网卡有两种,一种是Intel的网卡,它的MAC地址存储在内存中;一种是RealTek网卡,MAC地址存储在IO空间中。
以下是我的代码:
读MAC地址注:Intel网卡的MAC地址存储位置有偏移。
通过设备的厂商来判断存储位置,换了其他品牌的网卡就不一定能查找到。
上述代码是在shell环境下执行的,开机工作已经完成,没有问题。
但当我将代码放在DXE阶段时,又出现了各种各样的问题。
我将代码放在没有依赖条件下执行,并没有读取到MAC地址,一开始找到的原因是,我执行的阶段没有总线分配,一些相关PCIe树还没有建立,加入PCIe分配代码后依旧无法查找到MAC地址。
后来我在代码中加入依赖,读取到了MAC地址。
我的疑惑点在,MAC地址不是会在上电后映射到PCIe的配置空间吗?为什么我找到PCIe网卡设备后依旧读取不到。

[Depex]
gAmiConInStartedProtocolGuid

我怀疑我的总线分配有问题,但还没有找到具体原因。
找个时间整理PCIe。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值