1.2 Linux project structure
1.2: Linux project structure
리눅스 관련한 얘기를 하는 것은 이번이 처음입니다. 우선 우리만의 작은 커널을 만드는 단계를 성공하고 리눅스에서 같은 일들이 어떻게 동작하는 지 살펴보기 위함입니다. 지금까지 우리는 거의 하지 않았습니다: 우리는 첫 번째 bare-metal hello world 프로그램을 구현했습니다. 하지만 RPi 운영체제와 리눅스 사이의 유사점을 찾을 수 있을 것입니다. 그리고 이제 유사점들을 알아볼 것입니다.
Project structure
여러분들이 어떤 큰 소프트웨어 프로젝트를 조사할 때 마다 프로젝트 구조를 빠르게 살펴보는 것은 가치가 있습니다. 어떤 모듈들이 프로젝트를 구성하고 고차원 아키텍쳐(high-level architecture)를 이해할 수 있게 해주기 때문에 매우 중요합니다. 리눅스 커널의 프로젝트 구조를 살펴봅시다.
우선 리눅스 레포(repository)를 클론해야합니다.
git clone https://github.com/torvalds/linux.git
cd linux
git checkout v4.14
v4.14
버전이 이 당시 제일 최신 버전이기 때문에 사용하겠습니다. 리눅스 소스 코드에 대한 모든 참조는 이 버전을 이용해서 만들어질 것입니다.
다음으로 리눅스 레포안에서 찾을 수 있는 폴더들을 살펴봅시다. 모든 것을 보기보다는 시작하기에 중요하다고 여겨지는 것들만 살펴보겠습니다.
- arch 이 폴더는 하위 폴더들을 포함하며 각 하위 폴더는 특정 프로세서 구조를 위한 폴더 입니다. 대부분 arm64 로 다룰 것입니다 - 이 구조는 ARM.v8 프로세서와 호환가능합니다.
- init 커널은 항상 아키텍쳐 특정한 코드에 의해 부팅됩니다. 그러나 실행은 일반적인 커널 초기화를 책임지고 아키텍쳐 독립적인 커널 시작점인 start_kernel 함수로 넘겨집니다.
start_kernel
함수는 다른 초기화 함수들과 함께init
폴더에 정의되 있습니다. - kernel 이 것은 리눅스 커널의 핵심입니다. 대부분 모든 주요 커널 서브시스템들은 여기에 구현되 있습니다.
- mm 메모리 관리와 연관된 모든 데이터 구조와 메소드(methods)는 여기에 정의되 있습니다.
- drivers 이것은 리눅스 커널에서 가장 큰 폴더입니다. 모든 디바이스 드라이버의 구현을 포함합니다.
- fs 다른 파일 시스템 구현을 여기서 찾으실 수 있습니다.
위는 매우 상위 수준입니다 그러나 현재로서는 충분합니다. 다음 챕터에서 리눅스 빌드 시스템을 자세히 살펴볼 것입니다.
댓글남기기