Linux 커널 컴파일: 독립형 OS

Linux 커널 컴파일: 독립형 OS

안녕하세요 여러분 저는 리눅스 커널 컴파일이 처음이라 몇 가지 질문이 있습니다. 리눅스 커널을 컴파일함으로써 우리는 어떤 리눅스 배포판에도 의존하지 않는 완전히 독립형 OS를 구축합니까?

그렇다면... initramfs 명령을 사용하여 initrd 파일을 생성하려고 할 때 실행 중인 Linux 파괴에 대한 정보를 추가하는 이유는 무엇입니까(저는 Ubuntu 10.4를 실행하고 있습니다)?

컴파일된 Linux에 모듈을 어떻게 컴파일하고 추가해야 하며 어디에 배치해야 합니까?

이것은 내가 해온 일의 요약입니다:

1. 커널 소스(3.4.1)를 가져오고 "make all" 명령을 사용하여 컴파일합니다(저는 현재 linux .config를 사용합니다).

  1. 내 메모리 스틱에 grub 설치하기

  2. 컴파일된 bzImage를 메모리 스틱의 /boot 디렉토리에 넣기

  3. "initramfs" 명령을 사용하여 initrd 파일을 생성하고 /boot에도 넣습니다.

  4. 메모리 스틱을 사용하여 PC를 부팅하고 grub> 터미널에 들어갑니다.

  5. "루트(hd0,0)" 사용 ; "커널 /boot/bzImage" ; "initrd /boot/initrd.img"를 입력한 다음 "boot" 명령을 사용하여 부팅합니다.

  6. "/lib/modules/3.4.1/modules.dep" 파일을 찾을 수 없다는 오류가 발생한 후 (initramfs) 터미널에 접속합니다 !!!

내가 도대체 ​​뭘 잘못하고있는 겁니까 ?

답변1

Linux 커널을 컴파일함으로써 Linux 배포판에 의존하지 않는 완전히 독립형 OS를 구축하고 있습니까?

아니요. Linux 자체는 운영 체제가 아닙니다. 그것은 단지 커널일 뿐입니다. ㅏ사용자 영역시스템 라이브러리와 기본 소프트웨어 모음으로 구성된 은(는) 컴퓨터와의 상호 작용을 원활하게 하는 데 필요합니다. 우리가 "Linux"를 언급할 때 일반적으로 의미하는 바는 GNU 프로젝트라는 별도의 프로젝트에서 제공된다는 것입니다. 기술적으로 우리는 그것을 "GNU/Linux"라고 불러야 합니다.

initramfs 명령을 사용하여 initrd 파일을 생성하려고 할 때 실행 중인 Linux 파괴에 대한 정보를 추가하는 이유는 무엇입니까(저는 Ubuntu 10.4를 실행하고 있습니다)?

initrd에는 부팅 시 시스템을 처음 설정하고, 필요한 드라이버와 데몬을 로드하고, 하드 드라이브에서 필요한 파티션을 찾아 마운트하는 등의 프로그램 모음이 포함되어 있기 때문입니다. 배포할 수 있지만 특정 설치, 구성 및 컴퓨터에는 배포할 수 없습니다. 일반적으로 다른 사람의 initrd와 호환되지 않습니다. 이것이 바로 시스템에서 생성되어야 하는 이유입니다.

컴파일된 Linux에 모듈을 어떻게 컴파일하고 추가해야 하며 어디에 배치해야 합니까?

자신만의 커널을 컴파일하는 경우 아마도 make menuconfig컴파일하기 전에 커널 소스 디렉터리에서 작업을 수행할 것입니다. 이를 통해 컴파일할 기능과 해당 기능을 커널 바이너리에 통합할지 또는 모듈로 사용할지 여부를 선택할 수 있습니다.

이것은 내가 해온 일의 요약입니다:

원하는 대로 작동하지 않는 데에는 여러 가지 이유가 있습니다.

커널 소스(3.4.1)를 가져오고 "make all" 명령을 사용하여 컴파일합니다(저는 현재 linux .config를 사용합니다).

Linux 커널의 3.x 분기보다 훨씬 앞선 Ubuntu 10.04를 실행 중인 경우 3.4는 물론입니다. 적어도 엄청난 양의 추가 작업이 없으면 제대로 작동하지 않을 가능성이 높습니다. 구성 파일도 꽤 많이 변경되었으며 (아마도 Linux 2.6의 경우) 구성 파일의 내용이 3.4에서 수행되는 방식과 일치하지 않는 것에 대해 왼쪽 및 오른쪽으로 오류를 던지지 않는다는 것이 솔직히 놀랐습니다. 또한 Ubuntu는 필요한 기능을 포함하고 시스템의 다른 모든 것과 잘 작동하도록 커널을 패치하므로 kernel.org에서 일반 바닐라 커널 소스가 아닌 Ubuntu의 커널 소스 패키지를 다운로드하고 싶을 것입니다. 마지막으로 나중에 설명할 여러 단계가 누락되었습니다.

컴파일된 bzImage를 메모리 스틱의 /boot 디렉토리에 넣기

이것에 대한 의도가 무엇인지는 잘 모르겠지만 메모리 스틱에 전체 부팅 가능한 Linux를 설치하려는 경우에는 그보다 조금 더 많은 것이 있습니다. 해당 메모리에는 사용자 영역 항목이 전혀 없습니다. 예를 들어 스틱. 이것이 실제로 수행되는 작업은 올바르게 설정되면 메모리 스틱의 커널을 사용하여 하드 드라이브에서 Ubuntu 설치를 실행하는 것입니다. 나는 이것이 효과가 있다고 생각합니다. 그러나 하드 드라이브에 커널을 설치하는 것보다 왜 그렇게 합니까? 기존 제품과 나란히 설치하여 자유롭게 전환할 수 있습니다.

"/lib/modules/3.4.1/modules.dep" 파일을 찾을 수 없다는 오류가 발생한 후 (initramfs) 터미널에 접속합니다 !!!

이는 앞서 언급한 놓친 단계로 돌아갑니다. make modules_install에 모듈을 배치하려면 새 커널 이 필요합니다 /lib/modules.

하지만...

이상적으로는 특별한 요구 사항이 없는 한 "전통적인" 방식으로 커널을 컴파일해서는 안 되기 때문에 이 중 어느 것도 실제로 중요하지 않습니다. 요즘 실제로 자신의 커널을 컴파일해야 하는 경우 대부분의 배포판에는 사용자 정의 커널 버전(해당되는 경우)을 사용하고, 빌드 프로세스를 자동화하고, 깔끔하게 설치하고 제거할 수 있도록 커널을 패키지로 설치하는 방법이 있습니다. 필요에 따라 이를 구성하고 새 커널이나 기존 커널을 ​​선택할 수 있도록 부트로더를 구성합니다. Ubuntu에서는 다음 지침을 따라야 합니다.커널/컴파일 - 우분투 위키

단지 재미나 교육 목적으로 커널을 "구식" 방식으로 컴파일할 수 없다는 말은 아닙니다. 저는 첫 번째 커널을 그런 식으로 컴파일했지만 더 나은 방법이 있기 전이었습니다. 시스템이 손상되지 않는 것이 중요한 경우 배포판에 권장되는 방법을 사용하고 해당 소스를 사용하며 패키지 관리를 사용하십시오.

답변2

Linux 커널을 다시 컴파일하거나 컴파일하면 새 배포판이 생성되지 않습니다. 새로운 버전이나 다른 버전의 커널만 만들고 있습니다. 커널은 로드된 다음 PC가 POST 프로세스를 완료한 후 부트로더에 의해 실행되는 단일 파일입니다.

배포판은 표준 UNIX 유틸리티, 일반적으로 패키지 관리자 등을 포함하여 수많은 다른 파일로 구성됩니다. 자신의 커널을 (재)컴파일하는 경우에는 이 중 어느 것도 건드리지 않습니다.

내 자신의 커널을 컴파일한 지 꽤 시간이 지났는데, 명령 depmod -a다음에 실행해야 할 것 같습니다 make.

관련 정보