Computer >> 컴퓨터 >  >> 문제 해결 >> Android

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

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

이 가이드에서는 Windows 10에서 Android 커널을 빌드하는 방법을 보여 드리겠습니다. 예, 여전히 Linux 빌드 환경을 사용하지만 Windows 10 내의 Linux 하위 시스템이 됩니다. 따라서 Windows 10인 경우 Android용 개발에 관심이 있는 사용자는 가이드를 주의 깊게 따르세요.

이 가이드에서는 특히 ARM 및 MediaTek 장치용 커널을 빌드하고 기능을 추가하고 Git 사용에 대한 기본 개요를 학습합니다.

요구사항

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

Linux 환경 설정

  1. Windows 10의 경우 설정> 업데이트 및 보안> 개발자용으로 이동하여 개발자 모드를 활성화합니다.
  2. 이제 제어판> 프로그램> Windows 기능 켜기 또는 끄기> Linux용 Windows 하위 시스템 활성화로 이동합니다.
  3. PC를 재부팅합니다.
  4. Linux 하위 시스템을 시작하고 다운로드 프로세스를 거치도록 합니다. 비밀번호를 설정하고 분실하지 마세요.
  5. 이제 Windows 앱 스토어로 이동하여 Ubuntu를 다운로드합니다.
  6. Windows 10 데스크톱에서 Ubuntu를 실행하면 사용자 이름과 암호를 요청합니다.
  7. Ubuntu에서 기본 터미널을 실행하고 다음 명령을 입력하십시오. 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'을 입력하고 'git'이 이미 설치되어 있으면 기본 git 명령이 많이 표시됩니다.
  14. 이제 몇 가지 도구 모음이 필요합니다(GCC, Linaro 및 소수의 사용자 지정 항목을 비롯한 여러 유형이 있음). 일부 기기에는 다른 도구 모음이 필요할 수 있습니다. 예를 들어 모든 기기 커널이 GCC로 부팅되거나 컴파일되지는 않습니다.

ARM 장치용

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

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

ARM 64 기기용

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

기기의 소스 파일 가져오기

커널 소스를 호스팅하는 GitHub 리포지토리를 찾아야 하기 때문에 이것은 까다로운 부분입니다. 물론 검색해야 하며 XDA 포럼에서 찾을 수 있습니다.

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

왼쪽 상단에 "Branch:Completed by xxxx"가 표시되어야 합니다.

커널/프로젝트의 여러 버전이 있으며 일반적으로 "테스트", "베타", "최종 릴리스" 등으로 구분됩니다.

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

  • /arch/arm/configs :거버너 등 장치에 대한 다양한 구성 파일이 포함되어 있습니다.
  • /output/arch/arm/boot/ :zimage가 저장되는 곳입니다.
  • build.sh :구축 과정을 단순화하는 스크립트입니다.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 :일반적으로 커널 소스에 있는 도구 모음이므로 찾기가 더 쉽습니다.

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

Linux 터미널을 열고 이전에 생성한 커널 폴더(cd kernel)에 있는지 확인합니다.

그런 다음 터미널에 다음을 입력합니다. "git clone "github 커널의 URL" -b "분기 이름"

예:'git clone https://github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW'

커널 구축

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

툴체인과 커널 소스에 대해 내부에 두 개의 폴더가 표시되어야 합니다. 커널 소스 폴더로 이동합니다.

ARM 장치용

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

#!/bin/bashexport ARCH=armexport CROSS_COMPILE=mkdir outputmake -C $(pwd) O=output "필요한 경우 defconfig 및 변형 이름"make -j4 -C $(pwd) O=output

다음은 이러한 명령이 하는 일에 대한 개요입니다. 이를 통해 앞으로 더 쉽게 수행할 수 있습니다.

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

다른 예:

#!/bin/bashexport ARCH=armexport CROSS_COMPILE=$(pwd)/arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi-mkdir outputmake -C $ (pwd) O=출력 msm8974_sec_defconfig VARIANT_DEFCONFIG=msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG=selinux_defconfigmake -j4 -C $(pwd) O=outputcp 출력)/arch/arm/boot/이미지 $(pwd) 

ARM 64 기기용

#!/bin/bashexport ARCH=arm64export CROSS_COMPILE="도구 체인 경로"("nameofarch-something-"와 같은 것으로 끝나야 함)mkdir outputmake -C $(pwd) O=output "defconfig의 이름 필요한 경우 변형" make -j4 -C $(pwd) O=output

Mediatek(MTK) 장치용

#!/bin/bashexport CROSS_COMPILE="도구 체인 경로"("nameofarch-something-"과 같은 것으로 끝나야 함)export ARCH=arm ARCH_MTK_PLATFORM=make "필요한 경우 defconfig 및 변형 이름"make - j4

커널 아키텍처에 필요한 단계를 완료하면 터미널에 다음을 입력할 수 있습니다. sudo bash build.sh

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

시간이 걸릴 수 있지만 일반적으로 그리 오래 걸리지는 않습니다. 커널을 컴파일하는 것은 전체 Android 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 및 make mrproper 명령을 입력하는 것이 좋습니다.

커널 부팅 만들기

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

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

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

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

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

커널을 플래시하기 전에 기본 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 터미널에서 다음을 시도하십시오.

"내보내기 PATH="pathtotoolchainlocation"/bin:$PATH"

Windows 10에서 Ubuntu 폴더 액세스

Ubuntu에 대한 경로는 일반적으로 다음과 같아야 합니다.

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

그러나 Windows에서 직접 파일을 편집해서는 안 됩니다. 일반적으로 파일에 대한 권한이 손상되기 때문입니다. 그런 다음 Linux 터미널 내에서 권한을 재설정해야 합니다.