중복 가능성:
커널 소스 트리에는 무엇이 포함되어 있나요? 이것은 Linux 커널 헤더 파일과 관련이 있습니까?
내 자신의 Linux 커널을 컴파일하려면 Linux 커널 헤더 파일이 필요하다는 것을 알고 있지만 정확히 무엇을 위한 것입니까?
/usr/src/
아래에 수십 개의 C 헤더 파일이 있는 것 같습니다 . 하지만 그 목적은 무엇입니까? 커널 소스 코드에 직접 포함되어 있지 않습니까?
답변1
헤더 파일은 인터페이스를 정의합니다. 즉, 소스 파일의 함수가 정의되는 방식을 지정합니다.
함수 시그니처(반환 값 및 매개변수)가 헤더 파일에 존재하므로 컴파일러에서 함수가 올바르게 사용되고 있는지 확인할 수 있도록 사용됩니다. 이 작업에서는 실제로 기능을 구현할 필요가 없습니다.
전체 커널 소스로 동일한 작업을 수행할 수 있지만 불필요한 파일이 많이 설치됩니다.
예: 해당 기능을 사용하고 싶은 경우
int foo(double param);
프로그램에서 구현 방법을 알 필요는 없으며 단일 매개변수( )를 받아들이고 정수를 반환한다는 foo
것만 알면 됩니다 .double
답변2
위에서 언급했듯이 헤더 파일은 프로그램에서 사용되는 기능과 구조에 대한 인터페이스를 정의합니다.
커널 헤더 파일의 경우 이러한 기능과 구조는 커널 자체 내에 있습니다.
완전한 커널을 구축하려면 헤더뿐만 아니라 완전한 소스 파일도 필요합니다. 그러나 커널에 연결된 장치 드라이버나 기타 로드 가능한 모듈을 컴파일하는 경우 헤더 파일만 필요하므로 전체 소스 코드를 설치하지 않고도 공간을 절약할 수 있습니다.
패키지를 분리하면 헤더 파일만 설치할 수 있습니다. 이는 디스크가 더 작을 때 디스크 사용량의 차이가 중요한 고려 사항이었기 때문에 다소 역사적입니다. 오늘날 전체 소스 파일을 (불필요하게) 디스크에 저장하는 것은 더 이상 주요 디스크 공간 고려 사항이 아닙니다.
답변3
"헤더 파일"이라는 용어는 다음에서 유래되었습니다.씨Linux 커널을 작성하는 데 사용되는 프로그래밍 언어입니다.
아주 높은 수준에서 설명하자면...
C 언어에서는전방 선언기능을 사용하기 전에. 즉, 함수, 해당 매개변수 및 함수가 반환하는 데이터 유형에 대한 설명입니다. 일반적인 관행은 모든 전방 선언을 다음과 같은 파일에 넣는 것입니다.머리글. 다른 프로그램의 소스 코드 파일은 이 헤더를 사용할 수 include
있으며 컴파일 후 결과 실행 프로그램의 모든 기능에 액세스할 수 있습니다.
.h
Linux 헤더 파일은 다른 프로그램에서 호출할 수 있는 Linux 커널에서 제공하는 기능을 포함하는 모든 파일입니다.