Last active
December 21, 2024 13:08
-
-
Save YangSiJun528/691e4a9cb71111afcc0cfe87cab20311 to your computer and use it in GitHub Desktop.
build.sh 해석
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 이 코드는 **Linux 커널**을 특정 환경에서 빌드하기 위해 작성된 **Bash 스크립트**입니다. Raspberry Pi와 같은 임베디드 시스템을 위한 빌드 프로세스를 관리하는 데 사용됩니다. 아래는 주요 부분과 역할을 설명합니다. | |
| --- | |
| ### 1. **빌드 출력 경로 설정** | |
| ```bash | |
| KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P)" | |
| OUTPUT="$KERNEL_TOP_PATH/out" | |
| ``` | |
| - `KERNEL_TOP_PATH`: | |
| - 현재 스크립트가 위치한 디렉토리를 기준으로 절대 경로를 설정합니다. | |
| - 빌드 스크립트를 어디서 실행하든 경로를 일관되게 관리할 수 있도록 보장합니다. | |
| - `OUTPUT`: | |
| - 빌드 출력물이 저장될 디렉토리를 정의합니다 (`out` 디렉토리). | |
| --- | |
| ### 2. **로그 파일 및 커널 이름 정의** | |
| ```bash | |
| KERNEL=kernel8 | |
| BUILD_LOG="$KERNEL_TOP_PATH/rpi_build_log.txt" | |
| ``` | |
| - `KERNEL=kernel8`: | |
| - 빌드할 커널의 이름을 정의합니다. `kernel8`은 ARMv8 아키텍처(Raspberry Pi 4 등)를 대상으로 합니다. | |
| - `BUILD_LOG`: | |
| - 빌드 과정에서 발생하는 로그를 저장할 파일 경로입니다. | |
| --- | |
| ### 3. **커널 소스 디렉토리 이동** | |
| ```bash | |
| echo "move kernel source" | |
| cd linux | |
| ``` | |
| - `cd linux`: | |
| - Linux 커널 소스 코드가 위치한 `linux` 디렉토리로 이동합니다. | |
| --- | |
| ### 4. **기본 설정(defconfig) 생성** | |
| ```bash | |
| echo "make defconfig" | |
| make O=$OUTPUT bcm2711_defconfig | |
| ``` | |
| - `make bcm2711_defconfig`: | |
| - `bcm2711_defconfig`은 Raspberry Pi 4용 기본 설정을 로드합니다. | |
| - `O=$OUTPUT` 옵션: | |
| - 빌드 출력물(`Image`, `modules`, `dtbs`)을 `OUTPUT` 경로에 저장합니다. | |
| --- | |
| ### 5. **커널 빌드** | |
| ```bash | |
| echo "kernel build" | |
| make O=$OUTPUT Image modules dtbs -j4 2>&1 | tee $BUILD_LOG | |
| ``` | |
| - `make` 명령어: | |
| - `Image`: 커널 이미지를 빌드합니다. | |
| - `modules`: 커널 모듈을 빌드합니다. | |
| - `dtbs`: 디바이스 트리 바이너리를 빌드합니다. | |
| - `-j4`: | |
| - 병렬 작업을 위해 4개의 CPU 코어를 사용합니다. | |
| - `2>&1 | tee $BUILD_LOG`: | |
| - 모든 출력(표준 출력 및 에러)을 `BUILD_LOG` 파일에 저장하면서 동시에 터미널에 출력합니다. | |
| --- | |
| ### 요약 | |
| 이 스크립트는 **Raspberry Pi 4**와 같은 장치용으로 Linux 커널을 빌드하는 작업을 자동화합니다. 다음 작업이 포함됩니다: | |
| 1. 커널 빌드 환경 설정. | |
| 2. Raspberry Pi 4에 적합한 기본 설정 적용. | |
| 3. 커널, 모듈, 및 디바이스 트리 빌드. | |
| 4. 빌드 로그 저장. | |
| 이 스크립트를 실행하려면 Linux 커널 소스(`linux` 디렉토리)가 준비되어 있어야 하며, `make` 및 필요한 툴체인이 설치되어 있어야 합니다. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 리눅스 커널 소스 트리를 아래와 같이 간단한 **트리 구조**로 표현했습니다. 주요 디렉토리만 포함했으며, 하위 디렉토리와 그 역할을 표시했습니다. | |
| ``` | |
| linux/ | |
| ├── arch/ # CPU 아키텍처별 코드 | |
| │ ├── arm/ # 32비트 ARM | |
| │ ├── arm64/ # 64비트 ARM (Raspberry Pi 4 등) | |
| │ ├── x86/ # x86 아키텍처 (Intel/AMD) | |
| │ └── ... # 기타 아키텍처 (RISC-V, MIPS 등) | |
| ├── drivers/ # 하드웨어 드라이버 | |
| │ ├── usb/ # USB 장치 | |
| │ ├── net/ # 네트워크 장치 | |
| │ ├── gpu/ # GPU 관련 | |
| │ └── ... # 다양한 장치 드라이버 | |
| ├── fs/ # 파일 시스템 | |
| │ ├── ext4/ # ext4 파일 시스템 | |
| │ ├── nfs/ # NFS 파일 시스템 | |
| │ ├── xfs/ # XFS 파일 시스템 | |
| │ └── ... # 기타 파일 시스템 | |
| ├── kernel/ # 커널 핵심 로직 | |
| │ ├── sched/ # 스케줄러 | |
| │ ├── locking/ # 락킹 및 동기화 | |
| │ └── ... # 프로세스 관리 등 | |
| ├── mm/ # 메모리 관리 | |
| │ ├── numa.c # NUMA 관련 | |
| │ ├── swap.c # 스왑 관리 | |
| │ └── ... # 페이지 관리 | |
| ├── net/ # 네트워크 스택 | |
| │ ├── ipv4/ # IPv4 프로토콜 | |
| │ ├── ipv6/ # IPv6 프로토콜 | |
| │ ├── netfilter/ # 방화벽 및 패킷 필터 | |
| │ └── ... # 네트워크 관련 코드 | |
| ├── include/ # 공용 헤더 파일 | |
| │ ├── linux/ # 커널 API 헤더 | |
| │ ├── uapi/ # 사용자 공간과 커널 간 인터페이스 | |
| │ └── ... # 플랫폼 및 아키텍처 관련 | |
| ├── init/ # 부팅 초기화 코드 | |
| ├── block/ # 블록 장치 처리 | |
| ├── crypto/ # 암호화 알고리즘 | |
| ├── lib/ # 공용 라이브러리 | |
| ├── scripts/ # 빌드 및 설정 스크립트 | |
| ├── tools/ # 사용자 공간 도구 | |
| ├── security/ # 보안 메커니즘 (SELinux 등) | |
| ├── Documentation/ # 문서 및 개발자 가이드 | |
| ├── Makefile # 커널 빌드 관리 파일 | |
| └── Kconfig # 커널 설정 파일 | |
| ``` | |
| --- | |
| ### 트리의 주요 디렉토리와 역할 | |
| 1. **`arch/`**: CPU 아키텍처별 코드를 관리. | |
| 2. **`drivers/`**: 하드웨어와 상호작용하는 장치 드라이버. | |
| 3. **`fs/`**: 파일 시스템 구현. | |
| 4. **`kernel/`**: 커널의 중심 로직. | |
| 5. **`mm/`**: 메모리 관리 코드. | |
| 6. **`net/`**: 네트워크 프로토콜 및 스택 처리. | |
| 7. **`include/`**: 공용 헤더 파일. | |
| 8. **`scripts/`**: 빌드 과정에서 필요한 유틸리티 스크립트. | |
| 9. **`Documentation/`**: 개발자 문서. | |
| 이 구조를 따라 특정 기능이나 하드웨어를 지원하거나 커스터마이징할 때 필요한 부분을 찾아 수정할 수 있습니다. 😊 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment