Linux 커널 구축 프로세스의 각 단계에서 어떤 일이 발생합니까?


27

이 커널을 사용하여 사용자 정의 커널을 빌드하고 우분투를 부팅하는 방법에 대한 많은 자습서를 읽었으며 가이드 및 부팅 된 사용자 정의 커널을 성공적으로 따랐지만 안내서의 각 명령이 수행하는 작업과 실제로 발생하는 일에 대해 이해하지 못했습니다 각 명령.

에 설명 된 절차 우분투의 사이트 와 많은 작업을 수행 fakeroot, dpkg, make-kpkg, 어떤 initramfs에, 그리고 다른 무서운 물건 작품 것을 단순히 나에게 무슨 일이 일어나고 있는지 이해하는 데 도움이되지 않습니다.

  • make리눅스 커널 디렉토리 의 출력은 무엇입니까 ?
  • "압축 된 커널 이미지"를 작성합니까?
  • "압축 된 커널 이미지"파일의 이름은 무엇이며 어디에 배치됩니까?
  • 무엇을 make modules합니까?
  • make modules전후에 해야합니까 make?
  • make모듈을 자동으로 빌드 하지 않습니까?
  • 부팅 가능한 커널 목록에 새로 작성된 커널을 추가하는 프로세스 (명령 목록뿐만 아니라 영어)는 무엇입니까?
  • 무엇을 make install합니까?
  • make install좀 더 아무것도 할 필요가 없도록 부팅 가능한 커널 내 목록에 추가?
  • 동등한가 make modules_install있습니까?

이것은 여러 질문으로 나누어 져야합니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

답변:


34

정상에서 ...

  • make커널 이미지를 컴파일하고 링크합니다. 이 파일은이라는 단일 파일 vmlinuz입니다.
  • make modulesM커널 설정 중에 답변 한 각 질문에 대한 개별 파일을 컴파일합니다 . 객체 코드는 새로 빌드 한 커널과 연결됩니다. (답변에 대한 질문 Y은 이미의 일부이며 vmlinuz질문에 답 N하지 않은 경우)
  • make install빌드 한 커널을에 설치합니다 /vmlinuz.
  • make modules_install커널 모듈을 /lib/modules또는에 설치합니다 /lib/modules/<version>.

사용 가능한 커널 목록에 추가하면 부트 로더가 처리합니다. 부트 로더마다 다르지만 grubx86과 amd64에서 가장 일반적이므로 설명하겠습니다. 실제로는 매우 간단합니다. 에서 브의 모습 /, /boot그리고 /lib/modules그와 같은 외모가 작동 커널하고 추가합니다 수 있다는 어떤 일합니다. 그렇습니다. 이것은 지나치게 단순화 된 설명입니다.

우분투 문서에있는 그 "무서운 것들"은 deb패키지 를 만드는 데 필요한 것들 입니다. 자신보다 더 많은 일을 할 때는 포장하는 것이 훨씬 좋습니다. 당신은 시간에 전환합니다.

커널과 모듈을 빌드하는 것은 분리 된 상태로 유지되어야합니다. 왜냐하면 커널 개발자를 필요로하는 사람들은 종종 모듈 만 변경하기 때문입니다. 변경 사항을 적용하고 모듈 만 재구성하고 설치할 수 있습니다. 이렇게하면 하루에 20 번 수행해야하는 시간이 많이 절약됩니다. 단일 make everything명령 으로 업데이트되지 않습니다 . 대신 make && make modules && make install && make modules_install 설명서에서 지시 한대로 실행하십시오 . 빌드 프로세스는 커널 개발자가 아닌 커널 개발자에게 유리합니다. 그리고 그렇게해야합니다.

실제로 커널 개발자 나 배포판 패키저를 제외하고는 커널을 컴파일 할 이유가 거의 없습니다. 거의 모든 상황에서 원하는 커널 기능이 이미 빌드되어 있으며 사전 패키지 된 커널 중 하나에서 사용할 수 있습니다. 예외는 있지만 요즘 매우 드문 경우입니다.

커널을 직접 작성하지 말 것을 권장하지는 않지만 실제로 커널을 사용하는 것이 좋습니다. 커널을 처음부터 새로 작성하는 것이 어떻게 작동하는지 배우는 데있어 귀중한 관행이라고 생각합니다. 부분적으로 언젠가 당신 필요한 예외 입니다. 그러나 일반적으로 커널 및 부팅 프로세스에 대해 많이 알려줍니다. 당신은 그것을 한 더 나은 사람이 될 것입니다.


1
사람이 읽을 수있는 프로세스 설명에 대해 대단히 감사합니다. 몇 가지 의심이 있습니다. 내 커널 컴파일은 vmlinuz가 아닌 vmlinux를 생성했습니다. 차이점은 압축이라고 생각합니다. 이미지를 수동으로 압축해야합니까? 가 /vmlinuz루트 폴더의 디렉토리는? 내가 make install을 할 때이 디렉토리가 만들어지고 새로운 커널이 거기에 놓일 것인가? 윌 make modules_install내 현재 설치된 모듈을 교체? 내 vmlinux를 / boot 디렉토리에 놓고 다른 작업을 수행해야한다고 가정합니다 (grub 구성 파일 편집 및 grub-update 또는 그 이후의 작업 등)?
AnkurVj

3
맞습니다. 차이점은 압축입니다. 명령 make bzimage이 그 일을합니다. /vmlinuz디렉토리가 아닌 이진 파일입니다. 지난 5 년 동안 패키지 된 커널 만 만들었으므로 modules_install직접 설치된 커널 의 동작을 정확히 기억하지 못합니다 . Grub은 /boot도움없이 커널을 찾을 것 입니다. 예, 항상 grub-update새 커널을 설치 한 후에 실행해야 합니다.
bahamat

그래서 make bzimage대신에 해야 했 make습니까? DO I는 할 필요가 make cleanmake bzimage다시? 하여 /vmlinuz파일을 의미합니까 루트 디렉토리 나 리눅스 커널 소스 디렉토리에 생성됩니다?
AnkurVj

1
커널이 압축되어 있는지 여부는 중요하지 않습니다. 압축되지 않으면 디스크 공간이 조금 더 차지합니다. 접두사가 붙은 /것은 절대 경로이므로 루트에있는 파일입니다.
bahamat

1
응답 Y된 @GuyAvraham 모듈 은 컴파일됩니다 (즉, vmlinuz의 일부입니다). 응답 M된 모듈은로드 가능한 모듈로 컴파일됩니다. 응답 한 모듈 N은 컴파일되지 않습니다. make modules_install답변 한 사람에게만 적용됩니다 M.
바하마
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.