Windows 10에서 Android 커널을 빌드하는 방법

Appual 's에는 Android 오픈 소스 프로젝트에서 사용자 정의 ROM을 빌드하는 방법과 같은 Android 개발에 대한 몇 가지 훌륭한 안내서가 있지만 일반적으로 순수한 Linux 빌드 환경을위한 안내서입니다.

이 가이드에서는 Windows 10에서 Android 커널을 빌드하는 방법을 보여 드리겠습니다. 예, Linux 빌드 환경을 계속 사용하지만 Windows 10에서는 Linux 하위 시스템이됩니다. 따라서 Windows 10 인 경우 Android 개발에 관심이있는 사용자는 가이드를 신중하게 따르십시오.

이 안내서에서는 구체적으로 ARM 및 MediaTek 장치 용 커널을 구축하고 기능을 추가하고 Git 사용에 대한 기본 개요를 학습합니다.

요구 사항

  • Windows 10 x64 (Fall Creator 업데이트 포함)

리눅스 환경 설정

  1. Windows 10의 경우 설정> 업데이트 및 보안> 개발자의 경우> 개발자 모드 사용으로 이동하십시오.
  2. 이제 제어판> 프로그램> Windows 기능 켜거나 끄기> Linux 용 Windows 하위 시스템 활성화로 이동하십시오.
  3. PC를 재부팅하십시오.
  4. Linux 하위 시스템을 시작하고 다운로드 프로세스를 진행하도록합니다. 비밀번호를 설정하고 분실하지 마십시오.
  5. 이제 Windows 앱 스토어로 이동하여 Ubuntu를 다운로드하십시오.
  6. Windows 10 데스크탑에서 Ubuntu를 시작하면 사용자 이름과 비밀번호가 요청됩니다.
  7. 우분투에서 네이티브 터미널을 시작하고 다음 명령을 입력하십시오 : apt-get update
  8. 앱 및 종속성에 대한 모든 리포지토리가 업데이트됩니다.
  9. 터미널 유형의 다음 : sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
  10. 모든 종속성이 올바르게 설치되었는지 확인하려면 터미널에 'gcc'를 입력하십시오 (따옴표 없음).
  11. “gcc”가 이미 설치되어 있으면“gcc : 치명적인 오류 : 입력 파일이 없습니다”가 표시됩니다
  12. 이제 터미널에 'make'를 입력 할 수 있습니다. “make”가 이미 설치되어 있으면“make : *** 대상을 지정하지 않았고 makefile을 찾을 수 없습니다”가 표시되어야합니다. 중지."
  13. 다음 'git'을 입력하고 iff“git”이 이미 설치되어 있으면 기본 git 명령이 많이 나타납니다.
  14. 이제 우리는 몇 가지 툴체인이 필요합니다 (GCC, Linaro 및 소수의 사용자 정의 포함). 일부 장치에는 다른 툴체인이 필요할 수 있습니다. 예를 들어 모든 장치 커널이 GCC로 부팅되거나 컴파일되지는 않습니다.

ARM 장치의 경우

이를 위해 GCC 4.7을 사용할 것입니다.

  1. Linux 터미널을 열고 다음을 입력하십시오. mkdir kernel
  2. 이제 다음을 입력하십시오 : cd kernel
  3. ( '커널'일 필요는 없습니다. 이것은 간단하게하기위한 것입니다. 원하는대로 이름을 지정할 수 있습니다.)
  4. 이제 git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7을 입력하십시오.

ARM 64 장치의 경우

ARM 64 장치 용 64 비트 커널 컴파일러 (예 : aarch64)가 필요합니다.

장치의 소스 파일 얻기

커널 소스를 호스팅하는 GitHub 저장소를 찾아야하므로 까다로운 부분입니다. 물론 XDA 포럼에서 찾을 수 있습니다.

다음은 커널 소스 Git의 예입니다.

왼쪽 상단에 "지점 : xxxx에 의해 완료 됨"이 표시됩니다.

커널 / 프로젝트에는 서로 다른 버전이 있으며 일반적으로 "Testing", "Beta", "Final Release"등으로 구분됩니다.

커널 폴더는 일반적으로 다음과 같습니다.

  • / arch / arm / configs : 장치와 같은 장치에 대한 다양한 구성 파일이 포함되어 있습니다.
  • / output / arch / arm / boot / : zimage가 저장 될 위치입니다.
  • build.sh : 빌드 프로세스를 단순화하는 스크립트입니다.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : 일반적으로 커널 소스에 배치 된 툴체인이므로 쉽게 찾을 수 있습니다.

커널 소스를 다운로드해야합니다.

Linux 터미널을 열고 이전에 만든 커널 폴더 (cd 커널)에 있는지 확인하십시오.

그런 다음 터미널에“git clone“github 커널의 URL”-b“분기 이름”을 입력하십시오.

예 :“git clone //github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW”

커널 구축

보다 쉽게하기 위해 파일 탐색기에서 위치를 탐색 할 수 있습니다. / home / user ID / kernel (또는 커널 폴더의 이름)이어야합니다.

툴체인과 커널 소스를위한 두 개의 폴더가 있습니다. 커널 소스 폴더로 이동하십시오.

ARM 장치의 경우

터미널에서 다음 명령을 입력하십시오.

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = mkdir 출력 make -C $ (pwd) O = 출력 "필요한 경우 defconfig 및 변형 이름"make -j4 -C $ (pwd) O = output 

다음은 이러한 명령이 수행하는 작업에 대한 개요입니다.

  • #! / bin / bash : 스크립트가 쉘 명령에서 실행되도록 지시합니다
  • export ARCH = arm : 커널 구조 유형 정의 (예 : arm64 등)
  • export CROSS_COMPILE = : 툴체인이있는 곳을 찾습니다. 정확한 경로와 일치해야하며 결국 대시는 필수입니다.
  • mkdir 출력 : 컴파일 된 zimage를 저장하기위한 디렉토리를 만듭니다.
  • make -C $ (pwd) O = output : 커널 컴파일을 안내하기위한 defconfig 정의.
  • make -j4 -C $ (pwd) O = output : 빌드 프로세스가 시작되면 -j #는 시도하고 컴파일하는 속도를 알려줍니다. 일반적으로 CPU에 따라이 번호를 설정합니다. 예를 들어, 예산 CPU에서 -j32를 설정하면 불안정성이 크게 발생할 수 있습니다.
  • cp output / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage : 이미지를 두 번째 경로로 이동합니다.

다른 예시:

 #! / bin / bash export ARCH = 암 내보내기 CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi-mkdir 출력 make -C $ (pwd) O = 출력 msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig make -j4 -C $ (pwd) O = 출력 cp 출력 / arch / arm / boot / 이미지 $ (pwd) / arch / arm / boot / zImage 

ARM 64 장치의 경우

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "툴체인 경로"( "nameofarch-something-"과 같은 것으로 끝나야합니다) mkdir 출력 make -C $ (pwd) O = output "defconfig의 이름 그리고 필요한 경우 변형 "make -j4 -C $ (pwd) O = output 

MTK (Mediatek) 장치의 경우

 #! / bin / bash export CROSS_COMPILE = "툴체인의 경로"( "nameofarch-something-"과 같은 것으로 끝나야합니다) export ARCH = arm ARCH_MTK_PLATFORM = "필요한 경우 defconfig의 이름과 변형"make -j4 

커널 아키텍처에 필요한 단계를 완료하면 터미널에 다음을 입력하십시오. sudo bash build.sh

그런 다음 사용자 비밀번호를 입력하면 컴파일 프로세스가 시작됩니다.

커널을 컴파일하는 것은 전체 안드로이드 ROM을 컴파일하는 것과는 다릅니다. 이는 실제로 CPU에 따라 다릅니다. 예를 들어 8GB RAM이 장착 된 AMD Phenom X4 3.4GHz는 처음부터 끝까지 컴파일하는 데 약 10 분이 걸립니다.

완료되면“zimage is ready”와 같은 메시지가 표시됩니다.

ARM 및 ARM64 장치

“/ Output / arch / arm / boot /”로 이동하여 zimage를 찾으십시오.

Mediatek 장치

“/ arch / arm / boot /”로 이동하여 zimage를 찾으십시오.

모든 커널 빌드가 Zimage 파일을 생성하는 것은 아니며 때로는 다른 이미지 형식으로 빌드 될 수도 있습니다.

중요 사항 : 다시 컴파일하려는 경우 컴파일 프로세스를 다시 시작하기 전에 make clean 명령을 입력하고 mrproper를 작성하는 것이 좋습니다.

커널 부트 만들기

선택할 수있는 두 가지 옵션이 있습니다.

anykernel 메소드를 사용할 수 있습니다 (이 XDA 스레드에서 XDA 사용자 @ osm0sis가 정의한대로). 전체 학습서를 읽어야하지만 단계 요약은 다음과 같습니다.

  1. 루트에 zImage를 배치하십시오 (dtb 및 / 또는 dtbo는 또한 사용자 정의 장치가 필요한 장치의 경우 여기로 이동해야하며 각각 포함되지 않은 경우 원래 장치로 대체됩니다)
  2. 필요한 램 디스크 파일을 / ramdisk에 넣고 모듈을 / modules에 넣습니다 (/ modules / system / lib / modules와 같은 전체 경로)
  3. 필요한 패치 파일 (일반적으로 명령과 함께 제공되는 부분 파일)을 / patch에 배치하십시오.
  4. 커널 이름, 부팅 파티션 위치, 포함 된 램 디스크 파일에 대한 권한을 추가하고 필요한 램 디스크 수정에 대한 방법을 사용하도록 anykernel.sh를 수정하십시오 (선택적으로 플래시 및 배너 파일을 루트에 배치하여 플래시 중에 표시되도록하십시오)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

사용 가능한 다른 방법은 동일한 ROM (예 : CM, TouchWiz, EMUI 등) 및 동일한 Android 버전에서 boot.img의 압축을 푸는 것입니다. 그런 다음 Zimage를 교체하십시오. 다시 말하지만 이것은 매우 복잡한 과정이므로 정확한 자습서를 읽어야하지만 단계를 요약하면 다음과 같습니다.

  1. 압축을 풉니 다.
  2. 명령 줄“unpackimg”를 사용하거나 이미지를 끌어서 놓기 만하면됩니다. 이미지를 분할하고 램 디스크를 서브 디렉토리로 압축을 풉니 다.
  3. 원하는대로 램 디스크를 변경하십시오.
  4. repackimg 배치 스크립트는 입력이 필요하지 않으며 모든 원본 이미지 정보 (분할 및 저장 됨)를 사용하여 이전에 분할 된 zImage를 새로 압축 된 수정 된 램 디스크와 재결합합니다.
  5. 정리 배치 스크립트는 split_img + ramdisk 디렉토리와 새로운 압축 램 디스크 또는 이미지 파일을 제거하여 폴더를 초기 상태로 재설정합니다.

커널을 플래시하기 전에 stock boot.img의 백업을 만든 다음 커널을 플래시하여 Android 시스템을 부팅 할 수 있는지 확인해야합니다.

커널에 기능 추가

커널에 기능을 추가하는 것은 그것을 매끄럽게 만드는 좋은 방법입니다. CPU 조정기, IO 스케줄러, GPU 오버 클로킹, 오디오 향상 등과 같이 조정할 수있는 많은 것들이 있습니다.

주지사 추가의 예는 다음과 같습니다 (이 주지사는 코드 명 Intellimm).

처음 2 개의 텍스트 상자에서 "arch / arm / configs /"의 "msm8974_sec_defconfig"및 "cm_msm8974_sec_defconfig"가 수정되었음을 알 수 있습니다.

이 파일의 140과 141 행 사이에이 텍스트가 추가되었습니다 :“CONFIG_CPU_FREQ_GOV_INTELLIMM = y”

(이 라인은 커널을 컴파일 할 때 Intellimm을 활성화하기위한 것입니다)

다른 텍스트 상자에도 동일한 기술이 적용됩니다 (추가 및 삭제 된 위치)

추가 한 기능에 따라 더 많거나 적은 파일을 수정, 추가 또는 삭제할 수 있습니다.

요약하자면 커밋은 모든 변경 사항과 그 밖의 모든 것을 볼 수 있습니다!

일반적인 팁과 요령

커널 이름과 버전을 변경하는 방법 :

간단한 방법 :

defconfig 파일에서이 줄을 편집하십시오.

 "CONFIG_LOCALVERSION ="- "이후-defconfig에서 

예 : CONFIG_LOCALVERSION =”-XenomTW-3.2.6 ″

고급 방법 :

커널 소스의 루트 폴더에서 Makefile로 이동하십시오.

다음 줄을 추가하십시오.

 CONFIG_LOCALVERSION = "nameofyourkernel"LOCALVERSION = "versionofyourkernel" 

Version, PatchLevel, Sublevel 또는 Extraversion 행을 수정하지 마십시오.

다른 방법 :

scripts / mkcompile_h로 이동하여 다음 행을 추가하십시오.

 LINUX_COMPILE_BY = "nameofyourchoice"LINUX_COMPILE_HOST = "nameofyourchoice" 

PATH 문제 해결 :

"경로가 정확합니까?"라는 오류가 발생하면 Linux 터미널에서 다음을 시도하십시오.

 "export PATH ="pathtotoolchainlocation "/ bin : $ PATH" 

Windows 10에서 Ubuntu 폴더에 액세스

우분투로가는 길은 일반적으로 다음과 같아야합니다.

C : \ Users”NAME”\ AppData \ Local \ Packages \ CanonicalGroupLimited. UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

그러나 Windows에서 직접 파일을 편집하면 안됩니다. 일반적으로 파일에 대한 권한이 손상되므로 Linux 터미널에서 권한을 재설정해야합니다.

재미있는 기사