책에서, 나는 일반적으로 리눅스 소스 트리에 대한 참조를 읽을 /usr/src/linux
서브 디렉토리의 일반적인 세트 ( arch
, block
, crypto
, …).
이 트리에 커널을 구성하는 이진 파일이 포함될 것으로 기대했습니다. 내 시스템 (Ubuntu 10.04)에서 …
-
내가 가지고있는 다른 커널 (수동으로 설치되지 않은 자동 소프트웨어 다운로드 사용)의 경우이 위치에서 다음과 같이 각 커널에 대해 두 개의 하위 디렉토리를 찾습니다.
/usr/src/linux-headers-2.6.32-22 /usr/src/linux-headers-2.6.32-22-generic
-
하위 디렉토리에서 나는 바이너리 파일을 기대했습니다. 그러나 나는 상당히 많은 양의 트리를 검사했으며 여기에서 마지막 하위 디렉토리는 항상
Makefile
(보통 구성 파일보다 설치 파일과 비슷하게 들립니다) 플러스 때때로 몇 가지 다른 파일을 가지고있는 것처럼 보입니다 (주로Kconfig
).
내 질문은 순진하지만 조금 혼란 스럽습니다. (2) 커널 소스 트리에서 예상되는 것입니까? 왜 ‘헤더’에 대한 명시적인 언급이 있습니까? linux-generic-headers
다른 소프트웨어의 경우 잠시 설치해야 하는데 이것이 관련이 있는지 확실하지 않습니다. makefile이 (예를 들어, / driver 서브 디렉토리에 모듈을 설치해야하는) 정당한 이유가 있다는 것을 알고 있지만 (거의) makefile 만 있습니까?
답변
배포 kernel-header
패키지는 이름에서 알 수 있듯이 커널 모듈과 같은 소프트웨어를 빌드하는 데 필요한 커널 헤더 파일 (필요한 배관) 만 포함합니다.
빌드 출력을 제외하고 는 커널 소스 디렉토리 에서 이진 파일을 찾지 않아야 합니다. (커널을 직접 구성하고 빌드하는 경우 커널 소스 디렉토리에는 컴파일 된 객체, 모듈, 빌드 된 커널 자체 및 작동하도록하는 몇 가지 다른 이진 비트 및 조각이 포함됩니다.)
KConfig
파일은 커널 구성 옵션에 대한 설명입니다. 지정된 디렉토리 / 모듈에 사용 가능한 (및 해당 종속성)
그 외에도 모든 (대부분) C 소스 코드, 헤더 파일 및 Makefile
s입니다. 여기저기서 몇 가지 도우미 스크립트와 어셈블리 소스도 있습니다.
헤더 패키지 (설치 한 것) 는 위 의 헤더 부분 (모두 “내 보낸”헤더 만 해당) 및 일부 빌드 인프라 만 포함합니다. 그래서 당신이보고있는 것은 예상됩니다. 헤더 패키지 에는 C 소스 코드가 포함되어 있지 않습니다 (일부 스텁 및 빌드 인프라 코드 제외). 이 유형의 패키지를 사용하는 요점은 공간과 대역폭을 절약하는 것입니다. 전체 Linux 커널 소스 트리는 다소 커서 커널을 직접 컴파일하지 않으려는 경우에는 완전히 필요하지 않습니다. 헤더 패키지는 배포판으로 빌드 및 배송되어 모듈을 빌드하는 데 필요한 올바른 것을 제공하지만 더 이상은 아닙니다. (확실히 컴파일 된 커널을 포함하지 않습니다.)
주석 처리 : 헤더 패키지는 다른 곳으로 재배치되지 않습니다. 그것들은 특정 버전의 커널을 위해 만들어졌으며 특정 디렉토리에 패키지되어 있습니다. 파일 세트 일뿐입니다. (헤더 패키지는 현재 안정적인 커널 바이너리 패키지와 반드시 동일한 버전을 가질 필요는 없습니다. 헤더 패키지는 일반적이며 실행중인 실제 커널보다 뒤처 질 수 있습니다. 그러나 커널에서 나온 것이 아닙니다 현재 설치된 (또는 대상) 커널보다 최신 버전)
설치된 커널 바이너리 는 일반적 /boot
으로 부트 로더 바이너리 및 구성 파일과 함께 디렉토리에 설치됩니다 . (이것은 때때로 독립적 인 파일 시스템이며, 기본적으로 마운트되지 않습니다.) 파일의 정확한 이름은 커널과 배포판에 따라 다릅니다. (부트 로더도 마찬가지입니다.)
설치된 커널 모듈 은 다음의 하위 디렉토리에 있습니다.
/lib/modules/`uname -r`/
예를 들어 내 시스템에서는 현재
/lib/modules/3.1.4-gentoo/
전체 커널 소스 코드 : Ubuntu에서 전체 커널 소스가 직접 커널을 빌드하도록하려면 여기 지침을 따라 설치해야 합니다 .
당신은 또한에서 소스 TAR 파일을 다운로드 할 수 kernel.org
와 (할 곳 압축을 해제 하지 이 타르볼을 사용하는 경우, 귀하의 개인 물건과 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
심볼릭 링크는 커널 소스에 의존하는 응용 프로그램 작성을 단순화합니다. 트리 외부에서 모듈을 빌드 할 때 정확한 버전 또는 경로 정보를 지정할 필요가 없도록 해당 경로를 실행중인 (또는 대상) 커널에 연결합니다. 최소한 소스 기반 배포판을 위해 도움이됩니다.