요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
.. include:: ../disclaimer-ita.rst
:Original: Documentation/doc-guide/index.rst
=========================================
Includere gli i file di intestazione uAPI
=========================================
Qualche volta è utile includere dei file di intestazione e degli esempi di codice C
al fine di descrivere l'API per lo spazio utente e per generare dei riferimenti
fra il codice e la documentazione. Aggiungere i riferimenti ai file dell'API
dello spazio utente ha ulteriori vantaggi: Sphinx genererà dei messaggi
d'avviso se un simbolo non viene trovato nella documentazione. Questo permette
di mantenere allineate la documentazione della uAPI (API spazio utente)
con le modifiche del kernel.
Il programma :ref:`parse_headers.pl <it_parse_headers>` genera questi riferimenti.
Esso dev'essere invocato attraverso un Makefile, mentre si genera la
documentazione. Per avere un esempio su come utilizzarlo all'interno del kernel
consultate ``Documentation/userspace-api/media/Makefile``.
.. _it_parse_headers:
parse_headers.pl
^^^^^^^^^^^^^^^^
NOME
****
parse_headers.pl - analizza i file C al fine di identificare funzioni,
strutture, enumerati e definizioni, e creare riferimenti per Sphinx
SINTASSI
********
\ **parse_headers.pl**\ [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
Dove <options> può essere: --debug, --usage o --help.
OPZIONI
*******
\ **--debug**\
Lo script viene messo in modalità verbosa, utile per il debugging.
\ **--usage**\
Mostra un messaggio d'aiuto breve e termina.
\ **--help**\
Mostra un messaggio d'aiuto dettagliato e termina.
DESCRIZIONE
***********
Converte un file d'intestazione o un file sorgente C (C_FILE) in un testo
reStructuredText incluso mediante il blocco ..parsed-literal
con riferimenti alla documentazione che descrive l'API. Opzionalmente,
il programma accetta anche un altro file (EXCEPTIONS_FILE) che
descrive quali elementi debbano essere ignorati o il cui riferimento
deve puntare ad elemento diverso dal predefinito.
Il file generato sarà disponibile in (OUT_FILE).
Il programma è capace di identificare *define*, funzioni, strutture,
tipi di dato, enumerati e valori di enumerati, e di creare i riferimenti
per ognuno di loro. Inoltre, esso è capace di distinguere le #define
utilizzate per specificare i comandi ioctl di Linux.
Il file EXCEPTIONS_FILE contiene due tipi di dichiarazioni:
\ **ignore**\ o \ **replace**\ .
La sintassi per ignore è:
ignore \ **tipo**\ \ **nome**\
La dichiarazione \ **ignore**\ significa che non verrà generato alcun
riferimento per il simbolo \ **name**\ di tipo \ **tipo**\ .
La sintassi per replace è:
replace \ **tipo**\ \ **nome**\ \ **nuovo_valore**\
La dichiarazione \ **replace**\ significa che verrà generato un
riferimento per il simbolo \ **name**\ di tipo \ **tipo**\ , ma, invece
di utilizzare il valore predefinito, verrà utilizzato il valore
\ **nuovo_valore**\ .
Per entrambe le dichiarazioni, il \ **tipo**\ può essere uno dei seguenti:
\ **ioctl**\
La dichiarazione ignore o replace verrà applicata su definizioni di ioctl
come la seguente:
#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
\ **define**\
La dichiarazione ignore o replace verrà applicata su una qualsiasi #define
trovata in C_FILE.
\ **typedef**\
La dichiarazione ignore o replace verrà applicata ad una dichiarazione typedef
in C_FILE.
\ **struct**\
La dichiarazione ignore o replace verrà applicata ai nomi di strutture
in C_FILE.
\ **enum**\
La dichiarazione ignore o replace verrà applicata ai nomi di enumerati
in C_FILE.
\ **symbol**\
La dichiarazione ignore o replace verrà applicata ai nomi di valori di
enumerati in C_FILE.
Per le dichiarazioni di tipo replace, il campo \ **new_value**\ utilizzerà
automaticamente i riferimenti :c:type: per \ **typedef**\ , \ **enum**\ e
\ **struct**\. Invece, utilizzerà :ref: per \ **ioctl**\ , \ **define**\ e
\ **symbol**\. Il tipo di riferimento può essere definito esplicitamente
nella dichiarazione stessa.
ESEMPI
******
ignore define _VIDEODEV2_H
Ignora una definizione #define _VIDEODEV2_H nel file C_FILE.
ignore symbol PRIVATE
In un enumerato come il seguente:
enum foo { BAR1, BAR2, PRIVATE };
Non genererà alcun riferimento per \ **PRIVATE**\ .
replace symbol BAR1 :c:type:\`foo\`
replace symbol BAR2 :c:type:\`foo\`
In un enumerato come il seguente:
enum foo { BAR1, BAR2, PRIVATE };
Genererà un riferimento ai valori BAR1 e BAR2 dal simbolo foo nel dominio C.
BUGS
****
Riferire ogni malfunzionamento a Mauro Carvalho Chehab <mchehab@s-opensource.com>
COPYRIGHT
*********
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab@s-opensource.com>.
Licenza GPLv2: GNU GPL version 2 <https://gnu.org/licenses/gpl.html>.
Questo è software libero: siete liberi di cambiarlo e ridistribuirlo.
Non c'è alcuna garanzia, nei limiti permessi dalla legge.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
uAPI 헤더를 문서에 포함하는 이유
1-24이 페이지는 이탈리아어 번역 공통 고지 `../disclaimer-ita.rst`를 포함하며 원본 문서 위치를 `Documentation/doc-guide/index.rst`로 표시합니다. 내부 앵커 `it_parse_headers`는 뒤의 `parse_headers.pl` 설명을 참조하는 데 사용됩니다.
사용자 공간 API를 설명할 때 헤더 파일과 C 코드 예제를 문서에 직접 포함하면 코드와 설명 사이에 참조 링크를 만들 수 있습니다. 독자는 문서에서 심볼의 정의와 관련 API 설명을 오갈 수 있습니다.
uAPI 파일을 참조하면 유지보수 측면의 이점도 생깁니다. 문서에서 가리키는 심볼을 찾을 수 없을 때 Sphinx가 경고하므로, 커널 변경과 사용자 공간 API 문서가 어긋나는 문제를 빌드 단계에서 발견할 수 있습니다.
`parse_headers.pl`은 헤더의 C 심볼을 분석해 이런 참조를 생성합니다. 문서 생성 과정의 Makefile에서 호출해야 하며, 커널 트리의 실제 사용 예는 `Documentation/userspace-api/media/Makefile`에서 확인할 수 있습니다.
Makefile에 변환 단계를 넣으면 입력 헤더가 바뀔 때 출력 문서도 같은 빌드 흐름에서 다시 만들어집니다. 사람이 복사한 코드 조각을 별도로 관리하는 방식보다 실제 uAPI 선언과 문서의 차이를 줄일 수 있습니다.
소스와 문서를 연결했을 때 얻는 결과입니다.
Makefile이 변환기를 실행하고 Sphinx가 참조를 검증합니다.
.. include:: ../disclaimer-ita.rst
:Original: Documentation/doc-guide/index.rst
=========================================
Includere gli i file di intestazione uAPI
=========================================
Qualche volta è utile includere dei file di intestazione e degli esempi di codice C
al fine di descrivere l'API per lo spazio utente e per generare dei riferimenti
fra il codice e la documentazione. Aggiungere i riferimenti ai file dell'API
dello spazio utente ha ulteriori vantaggi: Sphinx genererà dei messaggi
d'avviso se un simbolo non viene trovato nella documentazione. Questo permette
di mantenere allineate la documentazione della uAPI (API spazio utente)
con le modifiche del kernel.
Il programma :ref:`parse_headers.pl <it_parse_headers>` genera questi riferimenti.
Esso dev'essere invocato attraverso un Makefile, mentre si genera la
documentazione. Per avere un esempio su come utilizzarlo all'interno del kernel
consultate ``Documentation/userspace-api/media/Makefile``.
.. _it_parse_headers:
parse_headers.pl
^^^^^^^^^^^^^^^^
이름, 명령 구문과 옵션
25-61`parse_headers.pl`은 C 파일을 분석해 함수, 구조체, 열거형, 정의를 식별하고 Sphinx 참조를 만드는 프로그램입니다.
명령 구문은 `parse_headers.pl [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]`입니다. 입력 C 파일과 출력 파일은 필수이고 예외 파일은 선택 사항입니다.
`--debug`는 상세 출력 모드를 켭니다. 파서가 어떤 심볼을 감지하고 어떤 참조로 바꾸는지 추적할 때 사용합니다.
`--usage`는 짧은 사용법을 출력하고 종료합니다. 필요한 인자 순서를 빠르게 확인할 때 적합합니다.
`--help`는 자세한 도움말을 출력하고 종료합니다. 지원되는 옵션과 처리 방식을 전체적으로 확인할 때 사용합니다.
parse_headers.pl - analizza i file C al fine di identificare funzioni,
strutture, enumerati e definizioni, e creare riferimenti per Sphinx
SINTASSI
********
\ **parse_headers.pl**\ [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
Dove <options> può essere: --debug, --usage o --help.
OPZIONI
*******
\ **--debug**\
Lo script viene messo in modalità verbosa, utile per il debugging.
\ **--usage**\
Mostra un messaggio d'aiuto breve e termina.
\ **--help**\
Mostra un messaggio d'aiuto dettagliato e termina.
필수 입력과 선택 입력을 구분합니다.
진단과 도움말 출력 모드를 정리합니다.
NOME
****
parse_headers.pl - analizza i file C al fine di identificare funzioni,
strutture, enumerati e definizioni, e creare riferimenti per Sphinx
SINTASSI
********
\ **parse_headers.pl**\ [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
Dove <options> può essere: --debug, --usage o --help.
OPZIONI
*******
\ **--debug**\
Lo script viene messo in modalità verbosa, utile per il debugging.
\ **--usage**\
Mostra un messaggio d'aiuto breve e termina.
\ **--help**\
Mostra un messaggio d'aiuto dettagliato e termina.
변환 결과와 인식 대상
62-80프로그램은 C 헤더 또는 소스인 `C_FILE`을 `.. parsed-literal` 블록으로 포함할 수 있는 reStructuredText로 변환합니다. 동시에 API 설명을 가리키는 참조를 심볼에 삽입합니다.
`parsed-literal`은 코드의 공백과 줄 구조를 리터럴처럼 보존하면서도 내부의 reStructuredText 참조를 해석할 수 있게 합니다. 단순 코드 블록과 달리 헤더 원문 모양과 클릭 가능한 API 링크를 함께 제공하는 선택입니다.
선택적인 `EXCEPTIONS_FILE`은 참조를 만들지 않을 항목과 기본값과 다른 대상을 가리킬 항목을 지정합니다. 생성 결과는 `OUT_FILE`에 기록됩니다.
파서는 `#define`, 함수, 구조체, typedef, 열거형, 열거형 값을 식별합니다. 각 종류에 맞는 Sphinx 참조를 만들며 Linux ioctl 명령을 정의하는 `#define`도 일반 매크로와 구별합니다.
변환의 목적은 C 코드를 다시 컴파일하거나 의미를 바꾸는 것이 아니라, 독자가 보는 헤더 표현에 문서 참조를 덧붙이는 것입니다. 따라서 생성 파일은 빌드 산출물로 취급하고 원본 API 정의는 계속 C 파일에서 관리합니다.
예외 파일에는 `ignore`와 `replace` 두 종류의 선언을 넣습니다. 하나는 참조 생성을 막고 다른 하나는 참조 대상을 바꿉니다.
입력에서 찾아 참조 후보로 만드는 심볼 범주입니다.
인식된 심볼에 기본 참조 또는 예외 규칙을 적용합니다.
DESCRIZIONE
***********
Converte un file d'intestazione o un file sorgente C (C_FILE) in un testo
reStructuredText incluso mediante il blocco ..parsed-literal
con riferimenti alla documentazione che descrive l'API. Opzionalmente,
il programma accetta anche un altro file (EXCEPTIONS_FILE) che
descrive quali elementi debbano essere ignorati o il cui riferimento
deve puntare ad elemento diverso dal predefinito.
Il file generato sarà disponibile in (OUT_FILE).
Il programma è capace di identificare *define*, funzioni, strutture,
tipi di dato, enumerati e valori di enumerati, e di creare i riferimenti
per ognuno di loro. Inoltre, esso è capace di distinguere le #define
utilizzate per specificare i comandi ioctl di Linux.
Il file EXCEPTIONS_FILE contiene due tipi di dichiarazioni:
\ **ignore**\ o \ **replace**\ .
ignore와 replace 선언
81-98`ignore` 구문은 `ignore type name`입니다. 지정한 `type`에 속하는 `name` 심볼에는 어떤 참조도 만들지 않습니다.
이 규칙은 헤더 가드처럼 문서 링크가 필요 없는 정의, 내부 전용 값, 또는 Sphinx에서 연결할 적절한 공개 대상이 없는 심볼에 사용합니다.
`replace` 구문은 `replace type name new_value`입니다. 심볼을 그대로 표시하되 기본 대상 대신 `new_value`가 가리키는 문서에 연결합니다.
대체 규칙은 여러 심볼이 하나의 형식 설명에 속하거나 자동 추론한 링크가 잘못된 대상을 선택할 때 유용합니다. `new_value`에는 필요하면 Sphinx 역할을 명시할 수 있습니다.
예외 선언의 `type`은 파서가 판정한 심볼 종류와 일치해야 합니다. 같은 이름을 적더라도 `define` 규칙은 열거형 `symbol`이나 `typedef`에는 적용되지 않습니다.
`ignore`와 `replace`는 입력 C 파일을 수정하지 않습니다. 두 선언은 문서 출력에서 링크를 만들지 여부와 목적지만 조정하므로 ABI 정의나 컴파일 결과에는 영향을 주지 않습니다.
La sintassi per ignore è:
ignore \ **tipo**\ \ **nome**\
La dichiarazione \ **ignore**\ significa che non verrà generato alcun
riferimento per il simbolo \ **name**\ di tipo \ **tipo**\ .
La sintassi per replace è:
replace \ **tipo**\ \ **nome**\ \ **nuovo_valore**\
La dichiarazione \ **replace**\ significa che verrà generato un
riferimento per il simbolo \ **name**\ di tipo \ **tipo**\ , ma, invece
di utilizzare il valore predefinito, verrà utilizzato il valore
\ **nuovo_valore**\ .
심볼 표시와 링크 생성 결과가 다릅니다.
기본 추론을 명시한 대상으로 덮어씁니다.
La sintassi per ignore è:
ignore \ **tipo**\ \ **nome**\
La dichiarazione \ **ignore**\ significa che non verrà generato alcun
riferimento per il simbolo \ **name**\ di tipo \ **tipo**\ .
La sintassi per replace è:
replace \ **tipo**\ \ **nome**\ \ **nuovo_valore**\
La dichiarazione \ **replace**\ significa che verrà generato un
riferimento per il simbolo \ **name**\ di tipo \ **tipo**\ , ma, invece
di utilizzare il valore predefinito, verrà utilizzato il valore
\ **nuovo_valore**\ .
예외 규칙의 심볼 유형
99-150`type`에는 `ioctl`, `define`, `typedef`, `struct`, `enum`, `symbol` 중 하나를 사용합니다. 같은 이름이라도 심볼 종류가 다르면 별개의 규칙으로 처리됩니다.
`ioctl`은 `_IOW`, `_IOR`, `_IOWR` 같은 Linux ioctl 명령 정의에 적용됩니다. 예제의 `VIDIOC_DBG_S_REGISTER`처럼 매크로 형태지만 일반 `define`과 구분해 문서 대상 유형을 다르게 관리합니다.
`define`은 `C_FILE`에서 발견한 일반 `#define`에 적용됩니다. 헤더 가드나 보조 매크로처럼 문서에서 링크할 필요가 없는 정의를 제외할 수 있습니다.
`typedef`는 입력 파일의 typedef 선언 이름에 적용됩니다. `replace`를 사용하면 해당 자료형이 설명된 다른 C domain 형식으로 연결할 수 있습니다.
`struct`는 구조체 이름에, `enum`은 열거형 이름에 적용됩니다. 태그 이름과 typedef 이름이 같은 경우에도 정확한 종류를 지정해야 합니다.
`symbol`은 열거형 내부의 개별 값 이름에 적용됩니다. 공개하지 않을 값은 무시하고 여러 값을 공통 열거형 설명으로 대체 연결할 수 있습니다.
`replace`의 `new_value`는 `typedef`, `enum`, `struct` 유형에서 기본적으로 `:c:type:` 참조를 사용합니다. C 자료형 문서가 Sphinx C domain에 등록되기 때문입니다.
반면 `ioctl`, `define`, `symbol`은 기본적으로 `:ref:`를 사용합니다. 선언에 참조 역할을 직접 적으면 이 자동 선택을 덮어쓸 수 있습니다.
\ **ioctl**\
La dichiarazione ignore o replace verrà applicata su definizioni di ioctl
come la seguente:
#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
\ **define**\
La dichiarazione ignore o replace verrà applicata su una qualsiasi #define
trovata in C_FILE.
\ **typedef**\
La dichiarazione ignore o replace verrà applicata ad una dichiarazione typedef
in C_FILE.
\ **struct**\
La dichiarazione ignore o replace verrà applicata ai nomi di strutture
in C_FILE.
\ **enum**\
La dichiarazione ignore o replace verrà applicata ai nomi di enumerati
in C_FILE.
\ **symbol**\
La dichiarazione ignore o replace verrà applicata ai nomi di valori di
enumerati in C_FILE.
Per le dichiarazioni di tipo replace, il campo \ **new_value**\ utilizzerà
automaticamente i riferimenti :c:type: per \ **typedef**\ , \ **enum**\ e
\ **struct**\. Invece, utilizzerà :ref: per \ **ioctl**\ , \ **define**\ e
\ **symbol**\. Il tipo di riferimento può essere definito esplicitamente
nella dichiarazione stessa.
각 키워드가 입력 파일의 어느 요소와 일치하는지 보여줍니다.
자료형과 그 밖의 심볼을 서로 다른 Sphinx 역할에 연결합니다.
Per entrambe le dichiarazioni, il \ **tipo**\ può essere uno dei seguenti:
\ **ioctl**\
La dichiarazione ignore o replace verrà applicata su definizioni di ioctl
come la seguente:
#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
\ **define**\
La dichiarazione ignore o replace verrà applicata su una qualsiasi #define
trovata in C_FILE.
\ **typedef**\
La dichiarazione ignore o replace verrà applicata ad una dichiarazione typedef
in C_FILE.
\ **struct**\
La dichiarazione ignore o replace verrà applicata ai nomi di strutture
in C_FILE.
\ **enum**\
La dichiarazione ignore o replace verrà applicata ai nomi di enumerati
in C_FILE.
\ **symbol**\
La dichiarazione ignore o replace verrà applicata ai nomi di valori di
enumerati in C_FILE.
Per le dichiarazioni di tipo replace, il campo \ **new_value**\ utilizzerà
automaticamente i riferimenti :c:type: per \ **typedef**\ , \ **enum**\ e
\ **struct**\. Invece, utilizzerà :ref: per \ **ioctl**\ , \ **define**\ e
\ **symbol**\. Il tipo di riferimento può essere definito esplicitamente
nella dichiarazione stessa.
예외 파일 작성 예
151-179`ignore define _VIDEODEV2_H`는 입력 파일의 헤더 가드 `_VIDEODEV2_H`에 참조를 만들지 않습니다. 헤더 가드는 API 심볼이 아니므로 문서 링크에서 제외하는 대표 사례입니다.
`ignore symbol PRIVATE`는 열거형 `enum foo { BAR1, BAR2, PRIVATE };`의 `PRIVATE` 값에 링크를 만들지 않습니다. 값 자체는 코드 예제에 남지만 문서 참조만 생략됩니다.
`replace symbol BAR1 :c:type:`foo``와 `replace symbol BAR2 :c:type:`foo``는 두 열거형 값을 C domain의 `foo` 형식 문서로 연결합니다.
이 방식은 개별 열거형 값마다 별도 문서 대상이 없을 때 유용합니다. 값의 의미를 설명하는 상위 열거형으로 링크를 모아 독자가 관련 정의를 찾게 합니다.
예외 파일을 검토할 때는 더 이상 존재하지 않는 심볼 규칙과 자동 참조로 충분해진 대체 규칙을 함께 정리해야 합니다. 오래된 규칙이 남으면 새 API 링크가 불필요하게 숨겨지거나 잘못된 문서로 연결될 수 있습니다.
ignore define _VIDEODEV2_H
Ignora una definizione #define _VIDEODEV2_H nel file C_FILE.
ignore symbol PRIVATE
In un enumerato come il seguente:
enum foo { BAR1, BAR2, PRIVATE };
Non genererà alcun riferimento per \ **PRIVATE**\ .
replace symbol BAR1 :c:type:\`foo\`
replace symbol BAR2 :c:type:\`foo\`
In un enumerato come il seguente:
enum foo { BAR1, BAR2, PRIVATE };
Genererà un riferimento ai valori BAR1 e BAR2 dal simbolo foo nel dominio C.
각 선언이 최종 문서의 링크에 미치는 영향을 정리합니다.
개별 값에서 상위 C 형식 문서로 참조를 모읍니다.
ESEMPI
******
ignore define _VIDEODEV2_H
Ignora una definizione #define _VIDEODEV2_H nel file C_FILE.
ignore symbol PRIVATE
In un enumerato come il seguente:
enum foo { BAR1, BAR2, PRIVATE };
Non genererà alcun riferimento per \ **PRIVATE**\ .
replace symbol BAR1 :c:type:\`foo\`
replace symbol BAR2 :c:type:\`foo\`
In un enumerato come il seguente:
enum foo { BAR1, BAR2, PRIVATE };
Genererà un riferimento ai valori BAR1 e BAR2 dal simbolo foo nel dominio C.
버그 보고, 저작권과 보증
180-195오류와 오동작은 저자인 Mauro Carvalho Chehab의 문서에 기재된 연락처로 보고하라고 안내합니다.
저작권은 2016년 Mauro Carvalho Chehab에게 있으며, GNU GPL version 2인 GPLv2 조건으로 배포됩니다.
GPLv2에 따라 이 소프트웨어를 변경하고 재배포할 수 있습니다. 다만 법이 허용하는 범위에서 어떠한 보증도 제공하지 않습니다.
이 보증 부인은 도구가 모든 C 구문이나 프로젝트별 확장을 완벽히 처리한다고 약속하지 않는다는 의미입니다. 생성 결과와 경고는 문서 빌드에서 검토하고 필요한 예외 규칙을 유지해야 합니다.
문서 끝의 권리와 책임 고지를 요약합니다.
BUGS
****
Riferire ogni malfunzionamento a Mauro Carvalho Chehab <mchehab@s-opensource.com>
COPYRIGHT
*********
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab@s-opensource.com>.
Licenza GPLv2: GNU GPL version 2 <https://gnu.org/licenses/gpl.html>.
Questo è software libero: siete liberi di cambiarlo e ridistribuirlo.
Non c'è alcuna garanzia, nei limiti permessi dalla legge.
요약·해설
parse-headers.rst:1-195`parse_headers.pl`은 uAPI 헤더의 함수, 매크로, ioctl, 구조체, typedef, 열거형과 값을 찾아 Sphinx 참조가 포함된 reStructuredText를 생성합니다. 문서 빌드에 통합하면 커널에서 사라진 심볼을 Sphinx 경고로 발견할 수 있습니다.
선택적 예외 파일은 `ignore type name`으로 불필요한 링크를 없애고 `replace type name new_value`로 참조 대상을 교정합니다. 자료형은 기본적으로 `:c:type:`, ioctl·정의·열거형 값은 `:ref:` 역할을 사용합니다.