Appual's에는 AOSP(Android Open Source Project)로 커스텀 ROM 빌드하는 방법 등 Android 개발 관련 훌륭한 가이드가 여럿 있지만, 대개 순수 Linux 빌드 환경을 기준으로 작성되어 있습니다.
이 가이드에서는 Windows 10에서 Android 커널을 빌드하는 방법을 설명합니다. 여전히 Linux 빌드 환경을 사용하지만, Windows 10 내부의 Linux 서브시스템(WSL)을 활용합니다. Windows 10 사용자면서 Android 개발에 관심 있다면 이 가이드를 차근차근 따라 해 보세요.
이 가이드에서는 ARM 및 MediaTek 기기용 커널 빌드, 기능 추가, Git 기본 사용법을 다룹니다.
준비 사항
- Windows 10 64비트 (Fall Creators Update 이상)
Linux 환경 설정 (WSL)
- Windows 10에서 설정 > 업데이트 및 보안 > 개발자용 > 개발자 모드를 활성화합니다.
- 제어판 > 프로그램 > Windows 기능 켜기/끄기 > Linux용 Windows 하위 시스템을 체크하고 활성화합니다.
- PC를 재부팅합니다.
- Linux 서브시스템을 실행해 다운로드 과정을 진행합니다. 사용자 이름과 비밀번호를 설정하세요(비밀번호는 꼭 기억해 두세요).
- Microsoft Store에서 Ubuntu를 검색해 설치합니다.
- 시작 메뉴에서 Ubuntu를 실행하고, 앞서 설정한 사용자 이름과 비밀번호로 로그인합니다.
- Ubuntu 터미널에서 다음 명령어로 패키지 목록을 업데이트합니다:
sudo apt-get update - 빌드에 필요한 필수 패키지를 설치합니다:
sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2 - 설치 확인을 위해
gcc,make,git명령어를 차례로 입력해 보세요.gcc:gcc: fatal error: no input files메시지가 나오면 정상make:make: *** No targets specified and no makefile found. Stop.메시지가 나오면 정상git: Git 기본 명령어 목록이 출력되면 정상
- 이제 툴체인(Toolchain)을 준비합니다. GCC, Linaro, 커스텀 툴체인 등 여러 종류가 있으며, 기기마다 호환되는 툴체인이 다를 수 있습니다.
ARM 기기용 툴체인 준비 (GCC 4.7 기준)
mkdir kernel
cd kernel
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7
폴더 이름은 'kernel'이 아니어도 무방합니다. 편의상 이렇게 명명한 것입니다.
ARM64 (aarch64) 기기용
64비트 ARM 기기에는 64비트 커널 컴파일러(aarch64 등)가 필요합니다. 본문의 ARM 섹션을 참고하되, 아키텍처에 맞는 64비트 툴체인을 받아오세요.
기기별 커널 소스 구하기
이 단계가 가장 까다로울 수 있습니다. 본인의 기기에 맞는 커널 소스를 호스팅하는 GitHub 저장소를 찾아야 합니다. 주로 XDA Developers 포럼에서 찾을 수 있습니다.
커널 소스 저장소의 일반적인 구조는 다음과 같습니다:
- /arch/arm/configs: 기기별 설정 파일(defconfig), 거버너 등 포함
- /output/arch/arm/boot/: 빌드 완료 후 zImage가 생성되는 위치
- build.sh: 빌드 과정을 자동화하는 쉘 스크립트
- /arm-cortex-linux-gnueabi-linaro_...: 소스 트리에 포함된 툴체인(있는 경우)
터미널에서 앞서 만든 kernel 폴더로 이동한 뒤, 소스를 클론합니다:
cd kernel
git clone "GitHub_커널_저장소_URL" -b "브랜치_이름"
예시: git clone https://github.com/atxoxx/android_kernel_samsung_msm8974 -b xenomTW
커널 빌드하기
파일 탐색기에서 /home/사용자이름/kernel 경로로 진입하면 툴체인 폴더와 커널 소스 폴더가 보입니다. 커널 소스 폴더 안으로 들어갑니다.
ARM 기기 (32비트)
#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=$(pwd)/arm-eabi-4.7/bin/arm-eabi-
mkdir -p output
make -C $(pwd) O=output "defconfig_이름"
make -j$(nproc) -C $(pwd) O=output
ARM64 기기 (64비트)
#!/bin/bash
export ARCH=arm64
export CROSS_COMPILE="툴체인_절대경로/" # 끝에 아키텍처 접두사(예: aarch64-linux-android-)가 와야 함
mkdir -p output
make -C $(pwd) O=output "defconfig_이름"
make -j$(nproc) -C $(pwd) O=output
MediaTek (MTK) 기기
#!/bin/bash
export ARCH=arm
export CROSS_COMPILE="툴체인_절대경로/" # 끝에 접두사 필수
export ARCH_MTK_PLATFORM="플랫폼_이름" # 예: mt6795
make "defconfig_이름"
make -j$(nproc)
명령어 설명:
export ARCH=arm|arm64: 타겟 아키텍처 지정export CROSS_COMPILE=...: 툴체인 바이너리 경로 지정(끝에-필수)mkdir -p output: 빌드 산출물 저장 디렉터리 생성make ... defconfig: 지정된 defconfig로 초기 설정 생성make -j$(nproc): CPU 코어 수만큼 병렬 빌드(-j4대신$(nproc)권장)
스크립트 파일(예: build.sh)로 저장한 뒤 실행 권한을 주고 실행합니다:
chmod +x build.sh
sudo ./build.sh
비밀번호를 입력하면 컴파일이 시작됩니다. 커널 단독 빌드는 전체 ROM 빌드보다 훨씬 빠르며, CPU 성능에 따라 5~20분 내외 소요됩니다. 완료되면 zImage is ready 같은 메시지가 뜹니다.
빌드 산출물 위치
- ARM / ARM64:
output/arch/arm/boot/또는output/arch/arm64/boot/아래zImage또는Image.gz - MediaTek:
arch/arm/boot/아래zImage
참고: 모든 빌드가 zImage를 생성하는 것은 아닙니다. 기기에 따라 Image, Image.gz, Image.lz4 등 다른 포맷일 수 있습니다.
중요: 재빌드 전에는 반드시 make clean과 make mrproper로 이전 빌드 잔재를 정리하세요.
커널을 부팅 가능하게 만들기 (AnyKernel / Boot.img 리패킹)
빌드된 커널 이미지만으로는 플래싱할 수 없습니다. 두 가지 대표적인 방법이 있습니다.
방법 1: AnyKernel2 (권장, osm0sis 방식)
XDA의 AnyKernel2 스레드를 참고하세요. 요약하면:
- AnyKernel2 템플릿을 다운로드합니다.
- 빌드된
zImage(필요시dtb,dtbo)를 루트에 복사합니다. - 램디스크 수정 사항은
/ramdisk, 커널 모듈은/modules/system/lib/modules/경로에 맞춰 넣습니다. - 패치 파일은
/patch에 넣습니다. anykernel.sh를 열어 커널 이름, 부트 파티션 블록 경로, 권한 설정 등을 수정합니다.- 최종적으로 ZIP으로 패키징합니다:
zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md *placeholder
방법 2: Boot.img 언팩/리패킹 (전통 방식)
동일 ROM, 동일 Android 버전의 순정 boot.img를 구해 언팩한 뒤 커널 이미지만 교체하고 다시 패킹하는 방식입니다. unpackimg, repackimg, cleanup 스크립트를 사용합니다. 과정이 복잡하므로 전용 튜토리얼을 숙지하세요.
주의: 커널 플래싱 전 반드시 순정 boot.img를 백업해 두세요. 부팅 실패 시 복구용으로 필요합니다.
커널에 기능 추가하기
CPU 거버너, I/O 스케줄러, GPU 오버클럭, 오디오 개선 등 다양한 기능을 추가할 수 있습니다. 예시로 Intellimm 거버너 추가 과정을 봅시다.
커밋(Commit) 내역을 보면 어떤 파일이 어떻게 수정되었는지 한눈에 알 수 있습니다. 예를 들어 arch/arm/configs/msm8974_sec_defconfig 파일 140~141줄 사이에 다음 줄을 추가합니다:
CONFIG_CPU_FREQ_GOV_INTELLIMM=y
이처럼 CONFIG_* 옵션을 =y(내장) 또는 =m(모듈)로 활성화하고, 관련 소스 파일을 추가/수정하면 됩니다. 기능에 따라 수정 파일 수가 달라집니다.
팁 & 트릭
커널 이름/버전 변경하기
간단 방법 (defconfig 수정)
사용 중인 defconfig 파일에서 다음 줄을 찾아 수정하세요:
CONFIG_LOCALVERSION="-내_커널_이름-버전"
예: CONFIG_LOCALVERSION="-XenomTW-3.2.6"
고급 방법 (Makefile 수정)
커널 소스 루트의 Makefile에 다음을 추가하세요:
CONFIG_LOCALVERSION="커널_이름"
LOCALVERSION="버전_문자열"
기존 VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION 줄은 건드리지 마세요.
대체 방법 (컴파일러 정보 변경)
scripts/mkcompile_h 파일에 다음을 추가하면 /proc/version 등에 표시되는 빌드자/호스트명이 바뀝니다:
LINUX_COMPILE_BY="내_이름"
LINUX_COMPILE_HOST="내_호스트명"
PATH 문제 해결
Is your path correct? 오류가 나면 터미널에서 툴체인 bin 경로를 PATH에 추가하세요:
export PATH="툴체인_경로/bin:$PATH"
Windows에서 WSL Ubuntu 파일 시스템 접근하기
WSL 1(기본) 기준 일반적인 경로는 다음과 같습니다:
C:\Users\사용자이름\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home
경고: Windows 탐색기나 에디터로 이 폴더 안의 파일을 직접 수정하면 권한이 깨져 빌드 실패로 이어집니다. 파일 편집은 반드시 WSL 터미널 내부(vim, nano, VS Code Remote-WSL 등)에서 하세요. 이미 건드렸다면 터미널에서 sudo chown -R $USER:$USER ~/kernel 등으로 권한을 복구하세요.
이 가이드가 Windows 10 환경에서 Android 커널 개발을 시작하는 데 도움이 되길 바랍니다. 궁금한 점은 XDA 포럼이나 관련 커뮤니티에서 검색해 보세요.