O cabeçalho PCI no meu laptop parece diferente do cabeçalho PCI dos elétrons livres

2

Estou tentando desenvolver um driver pci, mas não posso compilá-lo porque meu cabeçalho pci é bem diferente de livros e referências. Minha distribuição é 3.15.7-1-ARCH.

link

Quando o pci.h da referência parece completo, não consigo entender por que o cabeçalho do meu laptop está logo abaixo:

/*
 *  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 */
    
por snow 31.07.2014 / 20:31

1 resposta

1

O cabeçalho de elétrons livres é interno à fonte do kernel, e você o encontrará se procurar em [src]/include/linux ; se você está compilando o código do kernel, isso deve estar em jogo.

O cabeçalho que você colou é o cabeçalho do sistema, de /usr/include/linux . Isso é para o código do usuário terra que precisa de acesso às constantes e macros definidas nele.

Estes não entram em conflito. Observe no topo do kernel interno mais longo do kernel:

#include <uapi/linux/pci.h>

Esse caminho não existe no sistema normal, inclua diretórios, mas ele existe em [src]/include , e se você verificar lá para este arquivo, você notará que é praticamente idêntico ao /usr/include/linux/pci.h do seu sistema. É assim que o código do kernel pode acessar os mesmos valores, além de todo o material necessário internamente, já que o usual linux/pci.h foi substituído por algo como -I[src]/include , mas o código do kernel que contém #include <linux/pci.h> extrairá [src]/include/linux/pci.h puxa em [src]/include/uapi/pci.h que é idêntico a /usr/include/linux/pci.h .

    
por 31.07.2014 / 21:02