os:centos x86_64
以太网驱动程序:E1000
root@localhost e1000]# cat /proc/ioports | grep e1000
2000-203f : e1000
[root@localhost e1000]# cat /proc/iomem | grep e1000
fd5c0000-fd5dffff : e1000
fdff0000-fdffffff : e1000
给出了上述信息和物理卡(英特尔公司82545EM),如何更好地了解IO_PORTS或IO_MEM与Intel Corporation 82545EM卡?
例如,如何在哪种情况下使用io_port vs io_mem地址?我可以使用某种类型的API列表每个端口地址的目的以及如何使用它们吗?
IO_MEM地址与DMA地址有何关系?
谢谢
编程接口(包括端口做什么)应由英特尔记录;他们通常在记录其硬件的编程界面方面相当好(与一些仅提供驱动程序的供应商不同。尽管开源Linux驱动程序通常对哪些端口有相当不错的评论)。
但是不,硬件不是 self 以这种详细信息记录。相反,HW供应商发布文档(通常在线)。它将增加额外的硬件复杂性,以使硬件标准API告诉您如何告诉您如何对其进行编程,并且仅了解每个MMIO或编程端口号的名称不会告诉您如何使用它们的语义。<<<<<<<<<<<<<</p>
>在x86 上,IO端口是与内存的单独地址空间,由in
和out
指令而不是mov
Load/Store/Store。
现代硬件主要使用内存映射的I/O,其中普通的负载/存储在设备上的特殊地址访问IO寄存器。(被翻译成PCI/PCIE消息后)。
我只是要在https://en.wikipedia.org/wiki/memory-mapped_i/o上指向您,而不是为此写一个巨大的答案。o vs. DMA,带有更多内容的链接。
一个合理的尺寸,因此答案将无法教您有关驾驶员如何与硬件互动的所有知识,对不起。有关于这个主题的全部书籍,但是除了书籍外,我不确定要指出什么资源。http://wiki.osdev.org/有很多好东西,例如,它具有多种以太网卡的编程详细信息。http://wiki.osdev.org/intel_ethernet_i217很长。它开始:
我正在写这篇Wiki,以证明我自己为Intel I217和82577LM网卡提供工作驱动程序的经验,以在真正的本机裸机硬件上,
这是Linux使用e1000e
的卡,而不是E1000。看看其他NIC有有关文章的文章,看看其中一张是否是e1000
卡,是否对自己的硬件特别感兴趣。(像NE2000这样的简单硬件可能比Fancy Intel NIC更好。)