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