kernel.org에서 다운로드하여 데스크탑에 배치하고 터미널을 열어 Linux 커널을 컴파일했습니다. linux-3.2.13 폴더로 변경해서 mr proper
.
그런 다음 이를 사용하여 make menuconfig
.config 파일을 구성합니다. 완료하고 저장한 후 입력 make
하고 터미널에서 파일 컴파일을 시작했습니다. 3시간 동안 컴파일을 하고 나니 제가 뭔가 잘못하고 있는 게 아닌가 하는 생각이 듭니다.
내 질문은 다음과 같습니다
- 내가 뭐 잘못 했어요?
- 그렇지 않다면 다음에 무엇을 해야 합니까?
- 출력은 무엇입니까(예: .bin, .elf)?
- 나의 궁극적인 목표는 디스크에 담아서 다른 컴퓨터에 놓고 실행할 수 있는 운영 체제를 만드는 것입니다.아니요다른 커널을 사용하는 Ubuntu 운영 체제).
답변1
내가 뭐 잘못 했어요?
처럼 보이지 않습니다. 최신 커널을 컴파일하는 것은 리소스 집약적입니다. CPU가 최신 상태가 아니고 RAM이 많지 않은 경우 다음을 수행해야 할 수 있습니다.매우긴.
실제로 필요한 모듈/기능만 선택하고, 일부 RAM이 있는 멀티 코어/스레드 컴퓨터가 있는 경우 이 -jX
옵션을 사용 make
하면 빌드를 병렬로 실행할 수 있습니다. 예를 들어
make -j4
대부분의 빌드는 4개의 코어를 사용합니다.
출력은 어떻게 될까요?
압축된 커널 이미지가 됩니다. ELF 파일도 아니고 일반적인 의미의 실행 파일도 아닙니다. 플랫폼의 부트로더에서 처리하기에 적합한 형식입니다.
다음에 무엇을 해야 합니까?
수행하려는 작업에 따라 다릅니다...(참조여기Grub을 사용한다고 가정하고 모듈 및 커널 이미지 설치에 대한 간단한 HOWTO를 참조하세요. 빠른 검색을 통해 사용할 수 있는 다른 것들이 많이 있으며, 실제로 새 커널로 주류 배포판을 실행할 계획이라면 현재 배포판에 대한 문서를 확인하는 것이 더 나을 것입니다. 몇 가지 기능 요구 사항이 있으며 다음이 있을 수 있습니다. 고려해야 할 초기화 특성이 있습니다. )
[나의 목표는 나만의 운영체제를 만드는 것이다.]
아직은 그러려면 멀었나 봅니다. 운영 체제를 구축하는 것은 매우 복잡한 작업이며 커널을 구축하는 것은 매우 간단한 부분 중 하나입니다.
나는 당신이 갈 것을 제안합니다처음부터 리눅스그리고 현재 안정적인 "책"을 읽으십시오. 또한 주의하세요출시 시계을 클릭한 다음 "소스 기반" 배포 카테고리를 검색하세요. 그 중 일부가 관심을 가질 수 있습니다.
답변2
댓글을 많이 달았는데 상자가 더 크고 횡설수설할 수 있으니 내용을 답변으로 게시하는 것이 좋겠다고 생각했습니다. :) 저의 미친 횡설수설을 용서해 주시기를 바랍니다.
또한, 지금 경고합니다. 나는 완전 멍청이이고 당신의 날개를 조금 잘라낼 것입니다.
가장 먼저 결정해야 할 것은 프로그래밍 기술이 얼마나 좋은지입니다. 좋은 프로그래밍 기술과 하드웨어에 대한 좋은 이해 없이는 자신만의 운영 체제를 작성할 수 없습니다.
두 번째로 결정해야 할 사항은 다음과 같습니다.
- Linux 배포판을 만들고 있습니까? (예: 데비안, 우분투, 레드햇)
- 다른 런타임을 사용하는 Linux 기반 운영 체제를 만들고 있습니까? (예: 안드로이드, 마에모)
- 운영 체제를 처음부터 작성하고 있습니까? (예: VMS, CP/M, RT-11, Amoeba, Plan/9)
이러한 질문에 답하기 전에, 귀하가 무엇을 하고 있는지 알 수 있도록 용어를 적어 두었는지 다시 확인해야 합니다.
1. Linux 배포판(예: Debian)
단지 다른 Linux 배포판을 만들고 싶다면 커널을 컴파일하는 것이 가장 걱정거리입니다. 시간이 충분하고 컴퓨터가 충분히 크다면 커널은 실제로 스스로 컴파일할 수 있습니다.
이것은Linux 배포판 제작의 몇 가지 측면을 논의하는 기사.
이것이 생각보다 어려운 이유: 배포판에 추가하려는 기능이 많을수록 배포판을 올바르게 구축하는 것이 더 어려워집니다. 바퀴를 다시 만들 것인지(자신만의 패키지 관리자 생성) 기존의 것을 사용할 것인지(RPM? APT? 포트?) 선택해야 합니다. 두 경우 모두, 서로 호환되지 않는 패키지를 조정하고, Intel이나 AMD뿐만 아니라 다른 CPU를 사용하는 다른 시스템에서 작업을 컴파일하고 검증하는 등의 성가신 작업을 수행하는 데 수개월을 소비하게 됩니다.
범위에 따라 수천 명의 사람들의 작업을 직접 다시 수행해야 할 수도 있습니다. 그것으로부터 많은 것을 배울 수 있을까요? 전적으로! 그러나 기존 Linux 배포판을 실행하고 때때로 일부 패키지를 직접 컴파일하여 작동 방식을 확인함으로써 많은 것을 배울 수도 있습니다. X 서버가 어떻게 구축되는지 알고 싶다면 왜 libc와 수백 개의 다른 라이브러리를 구축해야 합니까?
이렇게 생각해보세요. PC를 만드는 방법을 배우고 싶다면 트랜지스터 통과 납땜 인두부터 시작하시겠습니까, 아니면 PC 구성 요소와 일부 문서부터 시작하시겠습니까?
2. Linux 기반 운영체제(예: Android)
런타임이 POSIX와 상당히 다른 Linux 기반 운영 체제가 꽤 많이 있습니다. 나는 Maemo, Meego, Android 및 기타 (가장 일반적으로 내장된) 운영 체제를 생각하고 있습니다.
이것의 장점은 자신만의 커널을 작성할 필요가 없다는 것입니다. 이것의 단점은 자신만의 배포판을 디자인해야 할 뿐만 아니라 대부분의 패키지도 직접 만들어야 한다는 것입니다. 편집이 고통 gcc
스럽다고 생각하시나요 libc
? 자신만의 ANSI-C 호환 C 컴파일러를 작성해 보세요.그리고처음부터 완전한 소프트웨어 스택. 수년간 귀찮은 작은 기능(아마도 어셈블리에서)을 작성하면 약간의 만족감을 얻을 수 있습니다. 또한 해당 인터페이스를 기반으로 구축하므로 Linux 커널 내부의 많은 부분과 이것이 사용자 공간과 통신하는 방법을 배워야 합니다. 이 기사를 마치면 대부분의 시스템 호출 번호를 기억하게 될 것입니다. :)
많이 배울까요? 전적으로! 당신이 생각하는 것보다 더 많은 것. 좌절감과 짜증을 느낄 것입니까? 바로 이거 야. 외로운 남자가 여가 시간에 노트북으로 안드로이드를 개발하지 않은 데는 이유가 있습니다. 그런 식 으로 gcc
지어지지도 않았습니다.
3. 처음부터 운영 체제
운영 체제에 커널이 있는 경우 어셈블러와 C 컴파일러로 시작하여 자신만의 커널을 작성하는 곳입니다. 이것은 보편적으로 사실이 아닙니다. 찾을 수 있는 하드웨어 데이터시트를 다운로드하고 시작해 보세요. 기본 커널이 실행되면 런타임을 볼 수 있습니다. 자신만의 런타임을 작성하거나 커널이 부분적으로 또는 완전히 POSIX와 호환되는지 확인한 다음 완전한 GNU 런타임을 갖게 됩니다. 첫 번째 계층 라이브러리를 "그냥" 만들고 gcc
새 운영 체제에서 실행하면 됩니다.
이것이 효과가 있습니까? 놀랍게도. 어려울까요? Donald Knuth 및 Andrew Tanenbaum과 같은 이름이 당신에게 아무 의미가 없다면 아마도 다시 생각해 봐야 할 것입니다. 이론컴퓨터공학을 공부하는 분들이 많을 겁니다. 실제로 운영 체제를 처음부터 구축하는 데에는 많은 이론이 필요합니다. 불행하게도 현대 시스템 역시 많은 지루함을 겪고 있습니다.
예전에는 올바른 위치에 JMP 지침이 포함된 ROM을 굽고, 연결하고, 전원을 켜면 작업이 완료되었습니다. 최신 시스템에서는 CPU 코어를 가동하고 실행하고, 메모리를 설정하고, 입력 장치를 열거하고, 출력 장치를 활성화하는 데 많은 작업이 필요합니다. 이러한 각 작업에 대한 전체 책이 있습니다.원래1,000페이지가 넘는 VGA — 8비트 컴퓨터에서 자라면서 1987 VGA 프로그래밍이 쉬울 것이라고 생각했고 매우 짜증났지만 그 과정에서 많은 것을 배웠습니다! )
그럼, 그래야 할까요?
넌 꼭 그래야 해노력하다. 처음부터 목표를 세우지 않으면 '성공'을 오해하지 마세요. 운영 체제/배포판을 유지 관리하는 것은열려 있는일반적으로 대규모의 사람들이 수행하는 작업입니다. 하지만 이렇게 시도하는 것만으로도 기술이 연마되고 새로운 기술을 배울 수 있습니다.
그런데 저는 이러한 것들의 대부분에 대한 (종종 고통스러운) 경험을 바탕으로 이야기합니다. 저는 몇 개의 CPU(공부/작업/놀이)를 위한 임베디드 저수준 런타임을 (공동) 작성했으며 현재는 (모두 재미를 위해) 장난감 CPU용 장난감 OS를 작성하고 있습니다.
답변3
Ubuntu에서 커널을 컴파일하려면 다음 튜토리얼에 제공된 단계를 따르십시오.