2012-03-21 1 views
6

Mentre eseguivo delle letture sulle chiamate di sistema, ho effettuato una ricerca per syscalls.h per trovare il file di intestazione in LXR. I risultati della ricerca mi hanno perplesso. Esiste una dozzina di file syscalls.h provenienti da directory in arch/_arch_name_/include/asm. Questi sono ok, sono definizioni specifiche dell'architettura o qualcos'altro necessario. La domanda è: perché abbiamo due diverse intestazioni syscalls.h sotto sia include/linux e include/asm-generic?Organizzazione delle intestazioni del kernel Linux

Inoltre, voglio scoprire che cosa sono le intestazioni di include/linux e le intestazioni di include/asm-generic. Come si differenziano tra loro? Qual è la logica dietro avere due cartelle di intestazione separate? Come si relazionano tra loro?

Grazie

+1

Hai guardato all'interno di questi file? –

+1

In /include/linux/syscalls.h, ci sono diverse dichiarazioni di chiamata di sistema. In /include/asm-generic/syscalls.h, tutte le chiamate di sistema sono dichiarate con le definizioni di macro di accompagnamento. Ma questo vale solo per syscalls.h, tuttavia, mi piacerebbe capire il quadro generale. – dirtybit

risposta

6

Ho fatto questa domanda su Kernel Newbies ML. Ho ricevuto la seguente risposta che rende le cose chiare:

Cihangir Akturk ha scritto:

per quanto ne so, le intestazioni si trovano in/include/asm-directory generica è per architechture indipendente (probabilmente condiviso tra architetture) del codice. Molto probabilmente non è necessario includere queste intestazioni direttamente, invece includiamo queste intestazioni indirettamente tramite le intestazioni dell'architetto .

OTOH, la directory/include/linux è per i file di intestazione generici per definire le interfacce tra i componenti del kernel. Nella maggior parte delle situazioni, l'utente troverà tutte le funzionalità del kernel necessarie in queste intestazioni.

saluti, chngr.

1

Le intestazioni in indirizzari arch/_arch_name_/include/asm sono specifica architettura dipendenti, come ad x86, architetture ARM. Quindi la logica interna è specifica per la piattaforma e dipende molto dall'hardware sottostante. Includerai solo l'architettura della tua piattaforma.

Le intestazioni in include/linux sono comuni e indipendenti dalla piattaforma. Sono logiche comuni e saranno condivise con architetture incrociate.

+0

L'altra domanda è quale sia la ragione di avere include/asm-generic oltre alle intestazioni include/linux? Qual è la relazione tra loro? – dirtybit

+0

La mia opinione è 'include/asm-generic' fornisce un'interfaccia comune e uniforme per accedere alla struttura dei dati relativa all'hardware. 'include/asm-generic' consente agli sviluppatori di controllare l'hardware sottostante molto più facilmente e non è necessario scavare nel dettaglio delle specifiche hardware. Ad esempio, 'include/asm-generic/rtc.h' fornisce un'interfaccia uniforme per recuperare le informazioni rtc, ma la sua implementazione include codice dipendente dall'architettura, come' CMOS_WRITE' e 'CMOS_READ'. – Wayne