1. Linux 배포판(예: Debian)

1. Linux 배포판(예: Debian)

kernel.org에서 다운로드하여 Linux 커널을 컴파일하고 데스크탑에 놓고 터미널을 열었습니다. linux-3.2.13 폴더로 변경하고 mr proper. 그런 다음 .config 파일을 구성하는 데
사용합니다 . make menuconfig작업을 마치고 저장한 후 입력하면 make터미널이 파일 컴파일을 시작합니다. 3시간 동안 컴파일을 한 후에 내가 뭔가 잘못한 게 아닌가 하는 생각이 들었습니다.

내 질문은 다음과 같습니다

  1. 내가 뭐 잘못 했어요?
  2. 그렇지 않다면 다음에 무엇을 해야 합니까?
  3. 출력은 어떻게 됩니까(예: .bin, .elf)?
  4. 나의 궁극적인 목표는 컴팩트 디스크에 넣고, 다른 컴퓨터에 올려서 실행할 수 있는 OS를 만드는 것입니다.~ 아니다다른 커널을 사용하는 Ubuntu OS).

답변1

내가 뭐 잘못 했어요?

그렇게 보이지는 않습니다. 최근 커널을 컴파일하는 것은 리소스를 많이 소모합니다. CPU가 최신이 아니고 RAM이 많지 않은 경우에는 시간이 걸릴 수 있습니다.매우긴.
실제로 필요한 모듈/기능만 선택했는지 확인하고, 약간의 RAM이 있는 멀티 코어/스레드 머신이 있는 경우 빌드를 병렬로 실행할 수 있도록 -jX옵션을 사용하세요. make예를 들어

make -j4

대부분의 빌드에 4개의 코어를 사용합니다.

출력은 어떻게 될까요?

압축된 커널 이미지가 됩니다. 이는 ELF 파일도 아니고 실제로 일반적인 의미의 실행 파일도 아닙니다. 플랫폼의 부트로더가 처리하기에 적합한 형식입니다.

다음에 무엇을 해야 합니까?

당신이 무엇을 하고 있는지에 따라 다릅니다... (참조여기Grub을 사용한다고 가정하고 모듈과 커널 이미지를 설치하는 간단한 HOWTO를 확인하세요. 빠른 검색을 통해 사용할 수 있는 다른 것들이 많이 있으며, 실제로 새 커널로 주류 배포판을 실행할 계획이라면 현재 배포판의 문서를 살펴보는 것이 더 좋습니다. 기능 요구 사항과 잠재적으로 필요한 initrd 특이성이 있습니다. 고려해야 합니다.)

[나의 목표는 나만의 OS를 만드는 것이다]

나는 당신이 그것과는 거리가 멀다고 생각합니다. OS를 구축하는 것은 매우 복잡한 작업이며, 커널을 구축하는 것은 매우 쉬운 부분 중 하나입니다.

나는 당신이 로 향하는 것을 제안하고 싶습니다처음부터 리눅스현재 안정적인 "책"을 읽으십시오. 또한 살펴보세요디스트로워치을 클릭하고 배포판의 "소스 기반" 범주를 검색하면 일부 관심이 있을 수 있습니다.

답변2

큰 댓글을 게시하고 있었는데 답변으로 내용을 게시하는 것이 가장 좋을 것이라고 생각했습니다. 상자가 더 크고 원하는 모든 것을 와플할 수 있기 때문입니다. :) 제 미친 소리를 용서해 주시기 바랍니다.

또한 이제 경고하겠습니다. 나는 완전한 개자식이므로 당신의 날개를 조금 잘라낼 것입니다.

가장 먼저 결정해야 할 것은 프로그래밍 기술이 얼마나 좋은지입니다. 좋은 프로그래밍 기술과 하드웨어에 대한 좋은 이해 없이는 자신만의 OS를 작성할 수 없습니다.

두 번째로 결정해야 할 사항은 다음과 같습니다.

  1. Linux 배포판을 만들고 있습니까? (예: 데비안, 우분투, 레드햇)
  2. 다른 런타임을 사용하는 Linux 기반 운영 체제를 만들고 있습니까? (예: 안드로이드, 마에모)
  3. 운영 체제를 처음부터 작성하고 있습니까? (예: VMS, CP/M, RT-11, Amoeba, Plan/9)

이러한 질문에 답하기 전에 조건을 제대로 숙지했는지 다시 한 번 확인하여 무엇을 만들고 있는지 파악해야 합니다.

1. Linux 배포판(예: Debian)

만들고 싶은 것이 또 다른 Linux 배포판뿐이라면 커널을 컴파일하는 것이 걱정거리 중 가장 적습니다. 충분한 시간과 충분한 컴퓨터 용량이 주어지면 커널은 실제로 자체적으로 컴파일됩니다.

여기는Linux 배포판 제작의 몇 가지 측면을 논의하는 기사.

생각보다 어려운 이유: 배포판에 추가하려는 기능이 많을수록 배포판을 제대로 구축하는 것이 더 어려워집니다. 휠을 다시 만들 것인지(자신만의 패키지 관리자 만들기) 기존 휠을 사용할 것인지(RPM? APT? 포트?) 선택해야 합니다. 어느 경우든, 서로 호환되지 않는 패키지를 조정하고, 컴파일하고, 서로 다른 CPU(Intel이나 AMD뿐만 아니라)를 사용하는 서로 다른 컴퓨터를 사용하여 작동하는지 확인하는 등의 성가신 작업을 몇 달 동안 수행하게 될 것입니다.

범위에 따라 수천 명의 작업을 혼자서 다시 수행해야 할 수도 있습니다. 그것으로부터 많은 것을 배울 수 있을까요? 전적으로! 그러나 기존 Linux 배포판을 실행하고 때때로 일부 패키지를 직접 컴파일하여 작동 방식을 확인함으로써 많은 것을 배울 수도 있습니다. 보고 싶은 것이 X 서버 구축 방법뿐이라면 왜 libc와 수백 개의 다른 라이브러리를 구축해야 합니까?

이렇게 생각해보세요. PC 조립 방법을 배우고 싶다면 트랜지스터 통과 납땜 인두부터 시작하시겠습니까, 아니면 PC 구성 요소와 일부 문서를 구하시겠습니까?

2. Linux 기반 OS(예: Android)

POSIX와 런타임이 상당히 다른 Linux 기반 운영 체제가 꽤 많이 있습니다. Maemo, Meego, Android 및 기타(가장 자주 내장된) 운영 체제가 떠오릅니다.

이것의 장점은 자신만의 커널을 작성할 필요가 없다는 것입니다. 이것의 단점은 자신만의 배포판을 디자인해야 할 뿐만 아니라 대부분의 패키지도 직접 만들어야 한다는 것입니다. 컴파일 gcc하는 것이 libc고통스럽다고 생각하셨나요 ? 자신만의 ANSI-C 호환 C 컴파일러를 작성해 보세요.그리고처음부터 전체 소프트웨어 스택. 아주 작은 만족감을 제공하는 성가신 작은 함수(아마도 어셈블리에서)를 수년간 작성했습니다. 또한 Linux 커널의 내부 대부분과 이것이 사용자 공간과 통신하는 방법을 배워야 합니다. 왜냐하면 해당 인터페이스가 여러분이 구축할 기반이기 때문입니다. 이 과정이 끝나면 대부분의 시스템콜 번호를 암기해야 합니다. :)

많이 배우시겠어요? 전적으로! 당신이 가능하다고 생각했던 것보다 더 많은 것. 답답하고 짜증나겠죠? 바로 이거 야. 여가 시간에 노트북을 가지고 다니는 외로운 사람이 Android를 만들지 않은 데에는 이유가 있습니다. 심지어 gcc그런 식으로 지어지지도 않았습니다.

3. 처음부터 운영 체제

OS에 커널이 있는 경우 어셈블러와 C 컴파일러로 시작하여 자신만의 커널을 작성하는 곳입니다. 보편적으로 그런 것은 아닙니다. 귀하의 하드웨어에 대해 찾을 수 있는 모든 데이터시트를 다운로드하고 출발하십시오. 기본 커널이 실행되면 런타임에 대해 확인할 수 있습니다. 자신만의 런타임을 작성할 수도 있고, 커널이 부분적으로 또는 완전히 POSIX와 호환되는지 확인한 다음 전체 GNU 런타임을 마음대로 사용할 수 있습니다. 라이브러리의 첫 번째 레이어를 만들고 gcc새 OS에서 실행 하기만 하면 됩니다 .

이것이 보람있는 일입니까? 놀랍게도 그렇습니다. 힘들까요? Donald Knuth, Andrew Tanenbaum이라는 이름이 당신에게 아무 의미가 없다면 아마도 다시 생각해 봐야 할 것입니다. 이론적인 컴퓨터 과학을 공부하는 일이 많이 있을 것입니다. 운영 체제를 처음부터 완전히 만드는 데에는 엄청난 양의 이론이 있습니다. 불행하게도 현대 시스템에는 엄청난 지루함이 있습니다.

예전에는 올바른 위치에 JMP 명령이 포함된 ROM을 굽고, 소켓에 연결하고, 전원을 켜면 작업이 완료되었습니다. 최신 시스템에서는 CPU 코어를 가동하고 실행하고, 메모리를 설정하고, 입력 장치를 열거하고, 출력 장치를 시작하는 것만으로도 상당한 양의 작업이 필요합니다. 이러한 각 작업에 대한 전체 책이 있습니다.원래의1,000페이지가 넘는 VGA — 8비트 컴퓨터에서 자라면서 저는 1987년 VGA를 프로그래밍하는 것이 간단할 것이라고 생각했고, 정말 짜증이 났지만 그 과정에서 많은 것을 배웠습니다!)

그럼, 그래야 할까요?

당신은 반드시해야합니다노력하다. 처음부터 목표를 정하지 않은 이상 '성공'에 대한 오해를 갖지 마세요. OS/배포판을 유지하는 것은개방형일반적으로 대규모 그룹의 사람들이 수행하는 작업입니다. 하지만 이렇게 시도하는 것만으로도 기술이 연마되고 새로운 기술을 배울 수 있습니다.

그런데 저는 이러한 것들의 대부분과 관련하여 (종종 고통스러운) 경험을 바탕으로 말하고 있습니다. 나는 몇몇 CPU(연구/작업/재미)를 위한 임베디드 저수준 런타임을 (공동) 작성했으며 현재는 장난감 CPU용 장난감 OS를 작성하고 있습니다(그게 전부 재미입니다).

답변3

Ubuntu에서 커널을 컴파일하려면 다음 튜토리얼에 제공된 단계를 따르십시오.

커널 컴파일 방법: 우분투 방식"

관련 정보