핵심요약: "make deb-pkg"를 사용하여 Linux(Debian) 커널을 컴파일한 후 .config를 약간 변경한 후 어떻게 새 커널을 생성할 수 있나요?
안녕하세요,
다음과 같이 커널을 컴파일하려고합니다.https://www.debian.org/doc//manuals/debian-handbook/sect.kernel-compilation.pl.html. 글쎄, 내가 해냈어. 시간이 좀 걸려서 설치했는데 시작이 안되네요.
그래서 다시 시도합니다. .config를 편집했고 새 것을 컴파일하고 싶습니다. 하지만 처음부터 시작해서 전체를 삭제하고 컴파일하지 않고서는 이 작업을 수행할 수 있는 방법을 찾을 수 없습니다. 단지 "만들다"는 것은 아무 것도 하지 않는 것 같습니다. 내 말은, 뭔가를 했지만 리눅스 이미지를 바꾸지는 않았다는 거죠. 이전에 생성된 파일을 모두 삭제하지 않고 "make deb-pkg"만 실행하면 오류가 반환됩니다.
나는 그것을 검색했지만 내가 찾은 모든 답변은 "make deb-pkg"를 사용하기 이전의 것으로 보였고 작동하지 않았습니다.
감사해요.
답변1
링크한 매뉴얼의 8.10.4장 시작 부분에서:
재건축 전 청소에 주의하세요
디렉토리에서 이미 한 번 컴파일했고 처음부터 모든 것을 다시 빌드하려면(예를 들어 커널 구성을 대폭 변경했기 때문에)
make clean
컴파일된 파일을 삭제하기 위해 실행해야 합니다.
기본적으로 이 make
명령은 Makefile에 정의된 간단한 일련의 규칙을 사용합니다. 예를 들어, 규칙은 파일이 파일 X
에서 빌드되고 다음을 사용한다고 말할 수 있습니다 A
.B
C
이것들주문하다. 파일을 X
다시 빌드해야 하는지 여부를 결정할 때 make
일반적으로 파일이 존재하는지, 존재하는 경우 X
소스 파일보다 오래된 것인지 , A
존재하지 않거나 해당 파일 중 하나보다 오래된 것인지 확인합니다. 소스를 삭제하면 다시 빌드됩니다.B
C
X
및/또는 구축에 A
대한 다른 규칙이 있는 경우 재귀적으로 등을 결정하기 전에 먼저 평가됩니다 .B
C
X
(수십년 동안 이 make
명령, 특히 GNU 버전은 많은 확장을 축적했지만 이것이 작동의 기본 아이디어로 남아 있습니다.)
".config에서 사소한 변경"을 했다고 말씀하셨습니다. 일부 .config
옵션은 빌드할 새 모듈을 활성화/비활성화합니다. 예를 들어, 이전에 비활성화된 모듈을 활성화하는 경우 *.ko
이전에 존재하지 않았던 새 파일이 존재해야 하며 커널 Makefile 시스템에서 감지될 가능성이 높습니다.
그러나 다른 옵션은 #ifdef
특정 블록을 활성화/비활성화하거나 개별 소스 코드 파일의 특정 값을 변경함으로써 만 #define
변경이 발생합니다 . 이는 커널 Makefile 시스템에서 쉽게 감지할 수 없습니다.
따라서 이전 커널 구성이 무엇인지 정확히 알지 못한 채그리고이것이 알려졌거나 예상되는 문제인지 또는 정확한 옵션을 변경하면 작동해야 하는 문제인지 알 수 있는 방법이 없습니다.
커널 Makefile 시스템 자체는 상당히 복잡합니다. 커널 구성 옵션 변경의 가능한 모든 조합을 수학적으로 완벽한 방식으로 처리하기에는 너무 복잡할 수 있습니다. 모든 구성 변경 사항이 적용되도록 주의하는 데는 실수가 있습니다. 때때로 이로 인해 최적의 것보다 더 많은 파일이 다시 작성될 수 있습니다. 구성 변경 사항 include/generated/autoconf.h
은 에 포함된 을 업데이트하며 include/linux/kconfig.h
, 는 기본적으로 포함되므로 이로 인해 기본적으로 모든 것이 다시 빌드됩니다.
위에서 인용한 내용 에 따르면 권장되는 절차는 " 다시 실행하기 전에 실행 " NOTE
입니다 .make deb-pkg
make clean
비슷한 일을 경험했습니다 make deb-pkg
. 제 기억이 맞다면 재실행할 때 발생한 오류는 실제 커널 컴파일보다 .deb 패키지 빌드 단계와 더 관련이 있었던 것 같습니다.