사용자 정의 운영 체제를 만들기 위해 Linux 소스 코드 변경을 어떻게 시작합니까? [폐쇄]

사용자 정의 운영 체제를 만들기 위해 Linux 소스 코드 변경을 어떻게 시작합니까? [폐쇄]

소스 코드를 변경하여 Linux(Ubuntu 등)를 맞춤화하고 완전히 새로운 운영 체제를 만들 수 있다고 들었습니다. www.kernel.org 웹사이트에서 리눅스 커널의 소스 코드를 다운로드했습니다. 그런데 막상 보니까 아무것도 이해가 안 되네요. 파일 안에 디렉터리, 파일이 너무 많아요(큰 프로그램이 있을 줄 알았거든요). 나는 그것을 대학 프로젝트로 완료하고 싶고 또한 필요한 변경을 통해 Linux에 기여하고 싶습니다. 그런데 일부 웹사이트에서 이런 질문을 한 뒤 리눅스 소스코드가 엄청나다고 하더군요. 미닉스를 사용해 볼 수 있습니다. 이제 나는 혼란스러워졌습니다.

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

답변1

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

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

프로젝트 범위 정보: 운영 체제를 작성하는 것은 작은 작업이 아닙니다! Minix와 같은 의도적으로 최소한의 운영 체제라도 꽤 복잡한 것입니다! Linux에 대한 아이디어를 제공하려면 지금까지 작성한 C 프로그램을 고려해 보세요. 평균적인 대학 과정에는 최대 수천 줄의 C 언어만 있습니다. 내 마지막 해 프로젝트는 약 30-35,000줄의 C++ 코드였던 것 같습니다. Linux 커널에는 약 13,000,000줄의 C 코드가 있습니다.

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

확실히 C에 능숙해야 합니다. 커널은 수천 명의 사람들에 의해 유지 관리되며, 각 개인의 C 관용구를 이해해야 합니다(물론 상당히 엄격한 커널 코딩 표준 내에서, 그러나 여전히 모든 사람은 자신만의 문제 해결 스타일을 가지고 있습니다).

Cfu를 얻은 후에는 운영 체제를 이해했는지 확인하십시오. 이는 코드를 이해하는 데 도움이 됩니다. 모든 Linux가 필요한 것은 아닙니다. 코어 자체는 매우 작습니다! 이 붓기는 무엇입니까?

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

즉시 알아차릴 수 있는 한 가지 문제는 이러한 구성 요소를 꺼내고, 교체하고, 다시 연결하는 것이 쉽지 않다는 것입니다. 많은 상호관계가 있습니다. 즉, 커널의 비트를 변경하는 것은 까다롭습니다.

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

물론 오늘날 Minix는 하드웨어 지원이 적습니다. 그래서 뭐? 이것은 축복입니다! 최신 컴퓨터는 가상화가 매우 잘됩니다. 이점을 활용하세요. Minix를 실행하는 VM은 너무 가벼워서 개발이 번거로울 수 있습니다.

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

또한 목표를 설정하고 용어를 정의해야 합니다.정확하게. 운영 체제에 대한 귀하의 정의가 Microsoft(GUI 및 완전한 소프트웨어 제품군을 갖춘 운영 체제)라면 매우 긴 프로젝트에 직면하게 될 수 있습니다! 결국, 1960년대부터 수십만 명의 사람들이 우리를 지금의 위치에 오르기 위해 노력해 왔습니다.

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

답변2

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

답변3

가장 먼저 정의해야 할 것은 "운영 체제에 어떤 변화를 가져오고 싶은가"라고 생각합니다. 이 결정을 내리지 않으면 아무데도 얻을 수 없습니다. 학습에는 "단일 경로"가 없습니다.

또한 운영 체제의 의미를 더 잘 정의해야 한다고 생각합니다. Ubuntu 소스 코드의 상당 부분은 Linux 외부에 있습니다. 리눅스는 그냥핵심, (때때로 호출운영 체제, 특히 학계에서는 혼란을 야기함)"단순한"일하다:

  • 리소스를 관리합니다.
  • 하드웨어와 통신합니다.

다른 변경 사항은 핵심 사용자 영역 유틸리티(종종 이라고 함)와 같은 다른 수준에서 발생합니다.공익사업), GUI, 배포판의 기본 응용 프로그램 등

그러나 여전히 커널을 크랙하는 방법을 배울 계획이라면 아마도 다음과 같이 시작해야 할 것입니다.이 문제, 이 사이트에서 가장 많이 투표된 질문입니다 ;)

답변4

조금 주제에서 벗어난 내용일 수도 있지만, Linux 커널을 이해하고 개발을 시작하려면 실제로 살펴봐야 합니다.커널의 새로운 기능. 이 사이트에서는 커널 메커니즘(Alexios와 마찬가지로)에 대한 심층적인 정보를 제공할 뿐만 아니라 작업할 작은 작업(소위 커널 게이트키퍼가 됨)을 선택할 수도 있습니다. 이것은 배울 수 있는 좋은 방법이며 강력히 추천합니다!

관련 정보