커널 소스 트리에는 무엇이 포함되어 있나요? 이것은 Linux 커널 헤더 파일과 관련이 있습니까?

커널 소스 트리에는 무엇이 포함되어 있나요? 이것은 Linux 커널 헤더 파일과 관련이 있습니까?

나는 책에서 보통 Linux 소스 트리와 /usr/src/linux일반적인 하위 디렉터리 세트( arch, block, crypto, ...)에 대한 참조를 읽습니다.

나는 이 트리에 커널을 구성하는 바이너리가 포함될 것으로 기대합니다. 내 시스템(Ubuntu 10.04)에서...

  1. 내가 가지고 있는 다양한 커널의 경우(수동 설치가 아닌 자동 소프트웨어 다운로드 사용) 이 위치에서 각 커널에 대해 다음과 같은 두 개의 하위 디렉터리를 찾습니다.

    /usr/src/linux-headers-2.6.32-22
    /usr/src/linux-headers-2.6.32-22-generic
    
  2. 하위 디렉터리에는 바이너리 등이 있을 것으로 예상됩니다. 그러나 트리의 상당 부분을 검사한 결과 항상 여기 마지막 하위 디렉터리에 하나가 있는 것 같습니다 Makefile(읽을 때 일반적으로 구성 파일, 그 다음에는 설치 파일처럼 들립니다). 때로는 독립 실행형 파일도 있습니다. 기타 파일(대부분 Kconfig).

내 질문이 순진할 수도 있지만 조금 혼란스럽습니다. (2) 커널 소스 트리에서 보아야 할 것이 있습니까? "제목"을 명시적으로 인용해야 하는 이유는 무엇입니까? 몇 가지 추가 소프트웨어를 설치해야 하는데 linux-generic-headers이것이 관련되어 있는지 확실하지 않습니다. makefile을 사용하는 데에는 타당한 이유가 있다는 것을 알고 있습니다(예: /driver 하위 디렉터리에 모듈 설치). 하지만 (거의) makefile만 사용합니까?

답변1

kernel-header이름에서 알 수 있듯이 배포 패키지에는 커널 모듈과 같은 소프트웨어를 구축하는 데 필요한 커널 헤더 파일(및 필요한 파이프)만 포함되어 있습니다.

커널에서 바이너리를 찾을 것이라고 기대해서는 안 됩니다.원천빌드 출력을 제외한 디렉터리입니다. (커널을 직접 구성하고 빌드한 경우 커널 소스 디렉토리에는 컴파일된 개체, 모듈, 빌드된 커널 자체 및 커널을 작동시키는 기타 일부 항목도 포함됩니다.)
KConfig파일은 커널 구성에 대한 설명입니다. 특정 디렉터리/모듈에 사용할 수 있는 옵션(및 해당 종속성)입니다.
그 외에는 모두 (주로) C 소스 코드, 헤더 파일 및 Makefilesc 파일입니다. 여기저기에 몇 가지 도우미 스크립트와 어셈블리 소스 코드가 있습니다.

헤더 패키지(귀하가 설치한 것)에만 포함됩니다.머리글위의 일부(모두는 아님 - 단지 "내보낸" 헤더) 및 일부 빌드 인프라. 그래서 당신이 보는 것이 예상됩니다. 헤더 패키지원하지 않는다C 소스 코드가 포함되어 있습니다(일부 스텁 및 빌드 인프라 코드 제외). 이러한 유형의 패키지를 갖는 요점은 공간(및 대역폭)을 절약하는 것입니다. 전체 Linux 커널 소스 트리는 상당히 크고 커널을 직접 컴파일할 계획이 없다면 완전히 불필요합니다. 헤더 패키지는 모듈을 빌드하는 데 필요한 올바른 콘텐츠를 제공하기 위해 배포판에서 빌드되고 제공되지만 그 이상은 제공되지 않습니다. (물론 컴파일된 커널은 포함되어 있지 않습니다.)

귀하의 의견을 해결하려면 헤더 패키지가 어디에도 재배치되지 않습니다. 특정 버전의 커널용으로 구축되어 특정 디렉토리에 패키지되어 있습니다. 그것은 단지 파일 세트일 뿐입니다. (헤더 패키지가 현재 안정적인 커널 바이너리 패키지와 반드시 동일한 버전일 필요는 없습니다. 헤더 패키지는 일반적이며 실행 중인 실제 커널보다 뒤떨어질 수 있습니다. 그러나 현재 설치보다 오래된 커널에서 제공되어서는 안 됩니다. 대상) 커널 업데이트 버전).

설치된 커널 바이너리/boot일반적으로 부트로더 바이너리 및 구성 파일과 함께 이 디렉터리에 설치됩니다. (때때로 이는 기본적으로 마운트되지 않는 별도의 파일 시스템입니다.) 파일의 정확한 이름은 커널 및 배포판에 따라 다릅니다. (부트로더도 마찬가지입니다.)

설치된 커널 모듈다음 하위 디렉터리에 있습니다.

/lib/modules/`uname -r`/

예를 들어 내 시스템에서는 현재 다음 위치에 있습니다.

/lib/modules/3.1.4-gentoo/

완전한 커널 소스 코드: Ubuntu에서 전체 커널 소스 코드를 사용하여 커널을 직접 빌드하려면 지침에 따라 설치해야 합니다.여기.

소스 타르볼을 다운로드하여 kernel.org어딘가에 추출할 수도 있습니다(실행아니요이 타르볼을 사용하는 경우 Ubuntu에서 설치한 파일을 덮어써 개인 콘텐츠를 RPM 관리 콘텐츠와 별도로 유지하세요.

/usr/src/linux커널 소스 코드를 저장하는 전통적인 장소는 있지만 커널 소스 코드를 다른 곳에 저장하는 것을 막을 수 있는 방법은 없습니다. 경로는 일반적으로 디렉토리에 대한 심볼릭 링크이기도 합니다. 예를 들어 내 컴퓨터에는 다음이 있습니다.

 $ ls -l /usr/src/linux
lrwxrwxrwx 1 root root 18 Dec  7 17:03 /usr/src/linux -> linux-3.1.4-gentoo

심볼릭 링크의 목적은 커널 소스 코드에 의존하는 애플리케이션 구축을 단순화하는 것입니다. 트리 외부에서 모듈을 빌드할 때 정확한 버전이나 경로 정보를 지정할 필요가 없도록 해당 경로를 실행 중인(또는 대상) 커널에 연결합니다. 적어도 소스 코드 기반 배포에는 도움이 됩니다.

관련 정보