맞춤형 OS를 만들기 위해 Linux 소스 코드 변경을 시작하는 방법은 무엇입니까?

맞춤형 OS를 만들기 위해 Linux 소스 코드 변경을 시작하는 방법은 무엇입니까?

소스 코드를 변경하여 Linux(예: Ubuntu)를 원하는 대로 사용자 정의할 수 있고 완전히 새로운 OS를 만들 수 있다고 들었습니다. www.kernel.org 웹사이트에서 리눅스 커널의 소스 코드를 다운로드했습니다. 하지만 그것을 보니 아무것도 이해할 수 없습니다. 파일 안에 디렉터리와 파일이 너무 많습니다(내 생각에는 하나의 큰 프로그램이 있을 것 같습니다). 나는 이것을 대학 프로젝트로 하고 싶고 Linux에 필요한 변경을 가하여 Linux에 기여하고 싶습니다. 그런데 어떤 사이트에서 이런 질문을 했더니 리눅스 소스코드가 엄청나다고 하더군요. 미닉스를 시도해 볼 수도 있습니다. 이제 나는 매우 혼란스러워졌습니다.

초급 수준의 책과 함께 필요한 단계를 포함하여 이 여정(Linux를 사용자 정의하기 위해 소스 코드를 변경하는 것)을 시작하는 방법에 대한 자세한 제안 사항을 알려주십시오.

답변1

unix.stackexchange.com에 오신 것을 환영합니다!

귀하의 질문에 대한 쉬운 대답은 없습니다.멀리나보다 더 나은 사람들은 Linux 커널과 운영 체제 전반에 관한 전체 책을 썼습니다.

프로젝트 범위: 운영 체제를 작성하는 것은 간단한 작업이 아닙니다! Minix와 같은 의도적으로 최소한의 OS라도 꽤 복잡합니다! Linux에 대한 아이디어를 제공하려면 지금까지 작성한 C 프로그램에 대해 생각해 보십시오. 평균 대학 교과 과정은 최대 수천 줄의 C 언어인 경향이 있습니다. 내 마지막 해 프로젝트는 C++ 30~35,000줄 정도였던 것 같아요. Linux 커널은 대략 13,000,000줄의 C 코드로 구성됩니다.

왜 모두 별도의 파일에 있습니까? 규모가 큰 프로젝트는 물류 및 실제적인 이유로 별도의 파일에 저장됩니다. 13,000,000줄의 파일을 편집기에 로드하는 것을 고려해 보세요! Linux와 같은 대규모 프로젝트에 착수하기 전에 '왜 파일이 ​​여러 개인가'라는 질문에 대한 답이 나올 정도로 C 기술을 연마해야 합니다. 당신은 또한 할 수 있어야합니다C 코드 읽기, 그냥 쓰는 것이 아닙니다. (처음에는 생각보다 어렵다)

당신은 확실히 C에 매우 능숙해야 합니다. 커널은 수천 명의 사람들에 의해 유지 관리되며 각 사람의 개인적인 C 관용구를 이해해야 합니다(상당히 엄격한 커널 코딩 표준 내에서 인정되지만 여전히 — 모두가 자신만의 문제 해결 스타일)

C fu를 취득한 후에는 운영 체제를 이해했는지 확인하십시오. 이는 코드를 이해하는 데 도움이 됩니다. 모든 Linux가 필수적인 것은 아닙니다. 적절한 커널은 꽤 작습니다! 그것은 얼마나 부풀어 오르는가?

  • 다양한 장치를 위한 수천 개의 하드웨어 드라이버.
  • API 및 드라이버 작성을 단순화하기 위한 다양한 장치 클래스에 대한 추상화 계층입니다. 예를 들어 파일 시스템용 VFS, 입력 장치용 이벤트 계층 등이 있습니다.
  • Linux를 실행하는 다양한 아키텍처에 맞춰 조건부로 컴파일된 코드와 파일의 양이 엄청나게 많습니다(모든 Linux 시스템이 Intel PC인 것은 아니며 일부는엄청나게예상한 것과 다릅니다). 커널은 이러한 차이점을 처리해야 하며 이는 더 많은 코드를 의미합니다.

즉시 발견하게 될 한 가지 문제는 이러한 구성 요소를 분리하고 변경하고 다시 연결하기가 쉽지 않다는 것입니다. 수많은 상호관계가 있습니다. 즉, 커널의 비트를 변경하는 것은 까다롭습니다.

사람들이 당신에게 Minix를 제안한 이유는 간단합니다. 완전한 운영 체제이지만 Linux처럼 복잡한 시스템의 요구 사항에 부담을 주지 않기 때문입니다. 코드는 작지만 여전히 모든 기능을 제공합니다. 결국 Linux의 첫 번째 버전은 Minix에서 영감을 얻었습니다.

물론, 요즘에는 Minix의 하드웨어 지원이 적습니다. 그래서 뭐? 그거 정말 좋은 일이군요! 현대 컴퓨터는 가상화가 매우 잘됩니다. 이를 활용하면 Minix를 실행하는 VM이 ​​너무 가벼워서 개발이 지연될 수 있습니다.

당신의 프로젝트가 운영 체제를 구축하는 것이라면 Minix를 공부하는 것보다 더 나쁜 일을 할 수도 있습니다. 또한 Minix가 함께 쓴 책 '을 구입하여 읽어보실 수도 있습니다.Andrew Tanenbaum의 최신 운영 체제'.

또한 목표를 설정하고 용어를 정의해야 합니다.정확하게. OS에 대한 자신의 정의가 Microsoft(GUI 및 전체 소프트웨어 제품군이 포함된 OS)인 경우 매우 긴 프로젝트에 참여하게 될 수 있습니다. 1960년대부터 수십만 명의 사람들이 우리를 현재의 위치로 데려오기 위해 노력해 왔습니다.

마지막으로, 컴퓨터 과학자의 전투 외침을 기억하십시오: '결코 바퀴를 재발명하지 마십시오!' (물론 우리는 학습할 때 예외를 두는 것을 좋아합니다. 그리고 재미로 :))

답변2

확인하다처음부터 리눅스프로젝트. 이름에서 알 수 있듯이 자체 Linux 배포판을 구축하는 데 필요한 모든 세부 정보가 포함되어 있습니다.

답변3

가장 먼저 정의해야 할 것은 "OS에 가져오고 싶은 변경 사항은 무엇입니까?"입니다. 이것을 결정하기 전까지는 아무데도 갈 수 없습니다. 학습에는 "단일 경로"가 없습니다.

게다가 OS가 무엇을 의미하는지 더 잘 정의해야 한다고 생각합니다. Ubuntu 소스 코드의 큰 부분(주요 부분)은 Linux 외부에 있습니다. 리눅스는 오직커널, (때때로 다음과 같이 불립니다.운영 체제, 특히 학계에서는 혼란이 발생합니다.)"단순한"직업:

  • 자원 관리.
  • 하드웨어와 통신합니다.

다른 변경 사항은 핵심 사용자 영역 유틸리티(종종유틸리티), GUI, 배포판의 기본 앱 등

그러나 여전히 커널을 해킹하는 방법을 배우고 싶다면 다음부터 시작해야 합니다.이 질문, 이 사이트에서 가장 높은 투표를 받은 질문입니다 ;)

답변4

이것은 요점에서 약간 벗어난 것일 수 있지만 Linux 커널에 대해 배우고 개발을 시작하려면 실제로 살펴보아야 합니다.커널 초보자. 이 사이트는 커널 메커니즘에 대한 통찰력을 제공할 뿐만 아니라(Alexios가 훌륭한 방식으로 수행한 것처럼) 처리할 작은 작업(소위 커널 관리인이 되는 것)을 선택할 수도 있습니다. 배울 수 있는 좋은 방법이며 강력히 추천합니다!

관련 정보