책에서, 나는 일반적으로 리눅스 소스 트리에 대한 참조를 읽을 /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
다른 소프트웨어를 위해 잠시 뒤로 설치해야 했는데 이것이 관련이 있는지 확실하지 않습니다. (예를 들어, / driver 하위 디렉토리에 모듈을 설치하는) makefile에 대한 타당한 이유가 있다는 것을 알고 있지만 (거의) makefile 만 있습니까?
배포 kernel-header
패키지는 이름에서 알 수 있듯이 커널 모듈과 같은 소프트웨어를 빌드하는 데 필요한 커널 헤더 파일 (필요한 배관 포함) 만 포함합니다.
빌드 출력을 제외하고 는 커널 소스 디렉토리 에서 바이너리 파일을 전혀 찾을 수 없습니다 . (커널을 직접 구성하고 빌드하는 경우 커널 소스 디렉토리에는 컴파일 된 객체, 모듈, 빌드 된 커널 자체 및 작동하도록 만드는 몇 가지 다른 바이너리 비트 및 조각도 포함됩니다.)
KConfig
파일은 커널 구성 옵션에 대한 설명입니다. (및 해당 종속성) 지정된 디렉토리 / 모듈에 사용할 수 있습니다.
그 외에도 (대부분) C 소스 코드, 헤더 파일 및 Makefile
s입니다. 여기저기서 몇 가지 도우미 스크립트가 있으며 어셈블리 소스도 있습니다.
헤더 패키지 (설치 한 것) 는 위 의 헤더 부분 (모두가 아니라 "내 보낸"헤더 만) 및 일부 빌드 인프라 만 포함합니다. 그래서 당신이보고있는 것은 예상됩니다. 헤더 패키지 에는 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
심볼릭 링크는 커널 소스에 의존하는 애플리케이션 빌드를 단순화하기 위해 있습니다. 이 경로를 실행중인 (또는 대상) 커널에 연결하여 모듈을 트리 외부로 빌드 할 때 정확한 버전이나 경로 정보를 지정할 필요가 없습니다. 최소한 소스 기반 배포에 대한 무리를 돕습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다