사용자 정의 OS를 만들기 위해 Linux 소스 코드 변경을 시작하는 방법은 무엇입니까? [닫은]

소스 코드를 변경하여 원하는대로 Linux (예 : 우분투)를 사용자 정의하고 완전히 새로운 OS를 만들 수 있다고 들었습니다. www.kernel.org 웹 사이트에서 Linux 커널의 소스 코드를 다운로드했습니다. 그러나 그것을 보아서, 나는 아무것도 이해할 수 없으며, 파일 내에 너무 많은 디렉토리, 파일이 있습니다 (하나의 큰 프로그램이 있다고 생각합니다). 대학 프로젝트로이 작업을하고 싶습니다. 또한 필요한 부분을 변경하여 Linux에 기여하고 싶습니다. 그러나 일부 사이트 에서이 질문을 한 후 Linux 소스 코드가 매우 크다고 말했습니다. 당신은 미닉스를 시도 할 수 있습니다. 지금 나는 매우 혼란스러워합니다.

초보자 단계의 서적과 함께 필요한 단계를 거쳐이 여정을 시작하는 방법 (리눅스를 사용자 정의하기 위해 소스 코드 변경)을 시작하는 방법에 대한 제안 사항을 알려주십시오.



답변

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

귀하의 질문에 대한 쉬운 대답은 없으며, 나 보다 훨씬 나은 사람들은 일반적으로 Linux 커널 및 운영 체제의 주제에 대한 전체 책을 썼습니다.

프로젝트 범위 : 운영 체제 작성은 단순한 작업이 아닙니다! Minix와 같이 의도적으로 최소한의 OS조차도 꽤 복잡한 것입니다! Linux에 대한 아이디어를 제공하려면 지금까지 작성한 C 프로그램에 대해 생각해보십시오. 평균적인 대학 교과 과정은 최대 수천 줄의 C입니다. 저는 작년 프로젝트가 약 30–35,000 줄의 C ++ 인 것으로 생각합니다. 리눅스 커널은 약 13,000,000 라인의 C 코드입니다.

왜 모두 별도의 파일에 있습니까? 규모가 큰 프로젝트는 물류 및 실제적인 이유로 별도의 파일에 저장됩니다. 13,000,000 라인 파일을 편집기로로드하는 것을 고려하십시오! 리눅스와 같은 거대한 프로젝트를 다루기 전에, ‘여러 파일이 왜 필요한지’질문 자체가 대답 할 정도로 C 기술을 연마해야합니다. C 코드읽을 수있을 뿐만 아니라 C 코드읽을 수도 있어야 합니다. (처음보다 더 어렵다)

C는 매우 능숙해야합니다. 커널은 수천 명의 사람들에 의해 유지 관리되며, 각각의 개인 C 관용구를 이해하도록 부름받을 것입니다. 자체 문제 해결 스타일).

C fu를받은 후에는 운영 체제를 이해해야합니다. 이렇게하면 코드를 이해하는 데 도움이됩니다. 모든 리눅스가 필수적인 것은 아닙니다. 적절한 커널은 아주 작습니다! 무슨 팽창입니까?

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

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

사람들이 Minix를 귀하에게 제안한 이유는 간단합니다. 전체 운영 체제이지만 Linux만큼 복잡한 시스템의 요구로 인한 부담은 없습니다. 코드는 작지만 여전히 완전한 기능을 제공합니다. 결국, 최초의 Linux 버전은 Minix에서 영감을 받았습니다.

물론, Minix는 요즘 하드웨어 지원이 적습니다. 그래서 무엇? 그것은 유익하다! 최신 컴퓨터는 매우 잘 가상화됩니다. 이를 활용하여 Minix를 실행하는 VM이 ​​매우 가벼워 개발이 어려워 질 것입니다.

프로젝트가 운영 체제를 구축하는 것이라면 Minix를 공부하는 것보다 더 나쁠 수 있습니다. ‘ 앤드류 타넨 바움의 현대 운영 체제 ‘ 와 함께 제공되는 Minix 책을 구입하고 읽을 수도 있습니다 .

또한 목표를 설정하고 용어를 정확하게 정의해야합니다 . OS에 대한 자체 정의가 Microsoft (GUI 및 전체 소프트웨어 제품군이있는 OS) 인 경우 매우 긴 프로젝트에 참여할 수 있습니다. 1960 년대 이래로 수십만 명의 사람들이 우리를 지금 우리의 위치로 데려 왔습니다.

마지막으로, 컴퓨터 과학자의 전투 외침을 기억하십시오. ‘ 바퀴를 다시 발명하지 마십시오! ‘(우리는 학습 할 때 예외를 만들고 싶습니다. 물론 재미를 위해 :))


답변

Linux From Scratch 프로젝트를 확인하십시오 . 이름에서 알 수 있듯이 자체 Linux 배포판을 구축하는 데 필요한 모든 세부 정보가 포함되어 있습니다.


답변

가장 먼저 정의해야 할 것은 “운영체제로 가져 오려는 변경 사항”입니다. 당신이 이것을 결정할 때까지, 당신은 실제로 아무데도 가지 않을 것입니다. 학습의 “한 길”은 없습니다.

또한 OS의 의미를 더 잘 정의해야한다고 생각합니다. 우분투 소스 코드의 큰 부분 (주요 부분)은 Linux 외부에 있습니다. 리눅스는 커널 일 뿐이며 ( 특히 운영 체제 , 특히 학계에서는 혼동 되기도 합니다) 따라서 다음과 같은 “단순한” 직무를 수행합니다.

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

핵심 유저 랜드 유틸리티 (종종 utils 라고도 함 ), GUI, 배포판의 기본 앱 등 다른 수준에서 다른 변경이 발생할 수 있습니다 .

그러나 여전히 커널을 해킹하는 방법을 배우고 있다면이 사이트에서 가장 많이 투표 된 질문 인 이 질문으로 시작해야 합니다.)


답변

이것은 요점 옆에 약간 있지만 Linux 커널에 대해 배우고 개발을 시작하려면 실제로 커널 초보자를 살펴보십시오 . 이 사이트는 알렉시오 스와 같은 커널 역학에 대한 통찰력을 제공하는 사이트이지만, 처리 할 작은 작업 (커널 관리인이라고 함)을 선택하도록하겠습니다. 배우기에 좋은 방법이며, 나는 그것을 강력히 추천합니다!