我的笔记本电脑中的 PCI 接头看起来与 Free-Electronics 的 PCI 接头不同

我的笔记本电脑中的 PCI 接头看起来与 Free-Electronics 的 PCI 接头不同

我正在尝试开发一个 pci 驱动程序,但无法编译它,因为我的 pci 标头与书籍和参考文献有很大不同。我的发行版是 3.15.7-1-ARCH。

http://lxr.free-electrons.com/source/include/linux/pci.h

当参考的 pci.h 看起来完整时,我无法理解为什么我的笔记本电脑的标题就在下面:

/*
 *  pci.h
 *
 *  PCI defines and function prototypes
 *  Copyright 1994, Drew Eckhardt
 *  Copyright 1997--1999 Martin Mares <[email protected]>
 *
 *  For more information, please consult the following manuals (look at
 *  http://www.pcisig.com/ for how to get them):
 *
 *  PCI BIOS Specification
 *  PCI Local Bus Specification
 *  PCI to PCI Bridge Specification
 *  PCI System Design Guide
 */

#ifndef LINUX_PCI_H
#define LINUX_PCI_H

#include <linux/pci_regs.h> /* The pci register defines */

/*
 * The PCI interface treats multi-function devices as independent
 * devices.  The slot/function address of each device is encoded
 * in a single byte as follows:
 *
 *  7:3 = slot
 *  2:0 = function
 */
#define PCI_DEVFN(slot, func)   ((((slot) & 0x1f) << 3) | ((func) & 0x07))
#define PCI_SLOT(devfn)     (((devfn) >> 3) & 0x1f)
#define PCI_FUNC(devfn)     ((devfn) & 0x07)

/* Ioctls for /proc/bus/pci/X/Y nodes. */
#define PCIIOC_BASE     ('P' << 24 | 'C' << 16 | 'I' << 8)
#define PCIIOC_CONTROLLER   (PCIIOC_BASE | 0x00)    /* Get controller for PCI device. */
#define PCIIOC_MMAP_IS_IO   (PCIIOC_BASE | 0x01)    /* Set mmap state to I/O space. */
#define PCIIOC_MMAP_IS_MEM  (PCIIOC_BASE | 0x02)    /* Set mmap state to MEM space. */
#define PCIIOC_WRITE_COMBINE    (PCIIOC_BASE | 0x03)    /* Enable/disable write-combining. */

#endif /* LINUX_PCI_H */

答案1

自由电子头位于内核源代码内部,如果您查看 ,您会发现它[src]/include/linux;如果您正在编译内核代码,那么它应该起作用。

您粘贴的标头是系统标头,来自/usr/include/linux.那是为了用户土地需要访问其中定义的常量和宏的代码。

这些其实并不冲突。请注意较长的内核内部部分的顶部:

#include <uapi/linux/pci.h>

该路径在正常系统包含目录中不存在,但它确实存在于 中[src]/include,如果您检查该文件,您会发现它与系统的/usr/include/linux/pci.h.这就是内核代码如何访问相同的值,加上它内部需要的所有内容,因为通常的内容linux/pci.h会被类似的东西覆盖-I[src]/include,但是包含 will pull in 的内核代码#include <linux/pci.h>会拉入与 相同的[src]/include/linux/pci.h内容。[src]/include/uapi/pci.h/usr/include/linux/pci.h

相关内容