내 노트북의 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포함된 커널 코드는 와 #include <linux/pci.h>동일한 [src]/include/linux/pci.h콘텐츠를 가져오기 때문입니다.[src]/include/uapi/pci.h/usr/include/linux/pci.h

관련 정보