커널 컴파일에서 이러한 용어의 차이점은 무엇입니까

커널 컴파일에서 이러한 용어의 차이점은 무엇입니까

조건은 무엇입니까?

make, make bzImage, makemodules, makeinstall, makemodules_install은 서로 연관되어 있습니다.

내가 본 한 커널 튜토리얼에서는 모든 make bzImage, makemodules, makeinstall, makemodules_install 명령을 사용하여 새 커널을 컴파일하고 설치했습니다. 다른 하나는 make, make install 및 make module_install 명령만 사용합니다. 그렇다면 차이점은 무엇입니까?

답변1

시간이 지남에 따라 Linux 커널 컴파일 프로세스 자체가 더욱 발전했습니다. 더욱 복잡해졌지만 더욱 간소화되었습니다. 커널 소스 디렉터리에서 실행하면 make help모든 대상 목록 make과 각 대상에 대한 간략한 설명을 볼 수 있습니다.

현재 5.x 커널 시리즈의 경우 명령 make과 명령 make all은 동일합니다. 둘 다 아키텍처별 기본 대상 목록을 실행합니다.

x86 하드웨어 아키텍처에서 기본 목록에는 다음이 포함됩니다.

  • make vmlinux베어 커널 빌드(압축된 부팅 가능한 커널 이미지 파일을 만들기 전과 마찬가지로 를 실행하면 자동으로 수행됩니다. make bzImage먼저 원하는 것을 압축해야 합니다. 일부 커널 디버깅 도구에는 압축되지 않은 버전도 사용할 수 있습니다.)
  • make modules커널 모듈 빌드
  • make bzImage부팅 가능한 압축 커널 이미지 파일을 만듭니다.

위의 모든 작업은 추가 권한 없이 일반 사용자로 수행할 수 있습니다.

반면에 존재하는 경우 or make install가 사용됩니다 ~/bin/installkernel. /sbin/installkernel귀하의 시스템은 ~/bin/installkernel해당되는 경우 sudo이 또는 이와 유사한 것을 사용할 수 있지만 시스템은 /sbin/installkernel일반적으로 귀하가 이미 루트 액세스 권한을 가지고 있다고 가정하도록 작성되었습니다.

마찬가지로 make modules_install새 커널 버전의 모듈이 /lib/modules/<kernel_version>/디렉터리 트리에 복사되므로 성공적으로 실행하려면 루트 액세스가 필요합니다.

모범 사례는 특정 필요 없이 루트로 길고 복잡한 프로세스(예: 커널 컴파일!)를 실행하지 않는 것이므로 현재 최소 커널 컴파일 프로세스는 다음과 같습니다.

  • 커널을 일반 사용자로 구성
  • 일반 사용자로 실행 make또는 실행make all
  • sudo make modules_install커널 모듈을 설치하려면 실행하세요 .
  • sudo make install실제 커널을 설치하려면 실행하세요 . /sbin/installkernelinitramfs 파일 자동 빌드와 같은 다른 작업이 트리거될 수 있고 새 커널 모듈이 이미 설치되어 있으면 이러한 다른 작업이 더 성공적으로 수행될 수 있으므로 이 작업을 마지막에 수행하는 것이 좋습니다 .

그러나 필요에 맞게 사용자 정의 커널을 구축하는 것보다 커널 개발을 수행하는 경우 더 세분화된 프로세스를 사용할 수 있습니다. 예를 들어 커널 모듈을 개발하는 경우 다음 make modules과 같이 실행할 수 있습니다. 별도의 단계를 수행하면 실수로 인해 실패했는지 더 쉽게 확인하고 오류를 더 빠르게 수정할 수 있습니다. 오류가 수정되면 make modules이전 단계가 성공적으로 완료되었으므로 다시 실행 으로 이동할 수 있습니다 .

마찬가지로, 이전 커널 부팅 프로세스를 사용하는 개발자는 다른 시스템(교묘한 ACPI 테이블 세트 등)에서 테스트하기 위해 bzImage가 필요할 수 있으며 모듈에는 전혀 신경 쓰지 않을 수 있습니다.

관련 정보