이 튜토리얼은 다음 단계를 보여줍니다.
이 tuto는 다음과 같은 목표를 위해 수행되었습니다.
패키지 관리자 또는이 안내서를 따르 십시오 .
sudo apt-get install adb fastboot
ADB 데몬을 시작하고 ADB를 사용하여 전화기를보고 BootLoad 모드 (FastBoot 모드)로 다시 시작할 수 있는지 확인하십시오.
adb start-server
adb devices
adb reboot bootloader
Fastboot 로 전화를 볼 수 있고 부트 로더 잠금 해제를 할 수 있는지 확인하십시오.
fastboot devices
fastboot oem unlock
(or fastboot flashing unlock for newest phones)
이 공식 가이드를 따라 Fastboot 모드에서 수동으로 시작하고 부트 로더를 잠금 해제 할 수도 있습니다.
여기에서 다른 사람의 Fastboot 명령을 찾을 수 있습니다.
나는 공식 리포에서 최신 안정적인 NDK를 처음 사용하려고 노력했다.
(다운로드하지 마십시오! 작동하지 않습니다)
export PATH=$PATH:/home/user/ndk/android-ndk-r17b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/
export CROSS_COMPILE=arm-linux-androideabi-
그러나 나는 최종 링크를 차단 한 편집에서 매우 이상한 경고를 받았습니다.
따라서 몇 가지 연구 후 여기에서 발견 한 후 Arm- Linux-Androideabi -GCC 대신 Arm-Abi -GCC를 사용하는 것이 낫습니다.
따라서 최신 버전의 Arm-Abi-4.8을 다운로드했습니다.
==> /home/user/ndk/arm-ebi-4.8로 추출하십시오
export PATH=$PATH:/home/user/ndk/arm-eabi-4.8/bin
export CROSS_COMPILE=arm-eabi-
참고 : Build.config : Conrel 이미지 자체에 정의 된 크로스 컴파일러이므로 Arm-Abi-4.8 의 선택을 확인할 수 있습니다.
ARCH=arm
BRANCH=android-msm-shamu-3.10
CROSS_COMPILE=arm-eabi-
DEFCONFIG=shamu_defconfig
EXTRA_CMDS=''
KERNEL_DIR=private/msm-moto
LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin
FILES="
arch/arm/boot/zImage-dtb
vmlinux
System.map
"
자체 커널 모듈을 Nexus 6 커널에 삽입하려면 커널 구성 옵션 로드 가능한 모듈 지원이 활성화되어 있어야합니다. 이미 휴대 전화를 루팅 한 경우 테이핑을 확인할 수 있습니다.
adb shell su -c "lsmod"
or
adb shell su -c "insmod /data/local/tmp/glitchmin.ko"
이러한 기능은 기본적으로 Android 커널에서 승인되지 않습니다. 따라서 옵션 로드 가능한 모듈 지원이 활성화 된 옵션으로 새 커널을 플래시합니다.
우리가받은 Nexus 6 (Shamu)은 다음과 같이 구성되었습니다.
이 목록에 따르면이 공식 Google 커널 Android-MSM-Shamu-3.10-Marshmallow를 다운로드했습니다.
==> 추출/home/user/images_kernel/msm-10-droid-msm-shamu-3.10-marshmallow 내보내기 mykernel =/home/user/images_kernel/msm-droid-msm-shamu-3.10-marshmallow cd $ mykernel
[Cyanogenmod 커널 Android_kernel_moto_shamu] (https://github.com/cyanogenmod/android_kernel_moto_shamu)를 사용할 수 있습니다 (<- 마지막으로 부팅되지 않음).
그런 다음 다음 단계 (이 안내서 또는이 안내서에서 영감을 얻은 다음 단계 또는 [https://source.android.com/setup/build/devices 또는 마지막 마지막)에 따라 커널을 만들 수 있습니다.
$ mykernel/arch/arm/configs/shamu_config, 대체
# CONFIG_MODULES is not set
~에 의해
CONFIG_MODULES=y
그 다음에
cp arch/arm/configs/shamu_config .config
make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- shamu_defconfig
로드 가능한 모듈 지원 옵션이 make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- menuconfig 과 같이 잘 활성화되어 있는지 확인하십시오.
==> 선택하지 않으면 로드 가능한 모듈 지원 활성화를 선택하고 키보드의 공간을 누른 다음 저장 및 종료를 선택합니다.
마지막으로 전체 커널을 컴파일합니다 (많은 시간이 걸립니다 ...) : make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- -j4
(참고 : -jn은 n 프로세서를 병렬로 사용한다는 것을 의미합니다)
끝에 다음과 같은 것을 얻어야합니다.
Kernel: arch/arm/boot/Image is ready
DTC arch/arm/boot/dts/apq8084-shamu-p2.dtb
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gzip
CC arch/arm/boot/compressed/misc.o
CC arch/arm/boot/compressed/decompress.o
CC arch/arm/boot/compressed/string.o
SHIPPED arch/arm/boot/compressed/hyp-stub.S
SHIPPED arch/arm/boot/compressed/lib1funcs.S
SHIPPED arch/arm/boot/compressed/ashldi3.S
AS arch/arm/boot/compressed/hyp-stub.o
AS arch/arm/boot/compressed/lib1funcs.o
AS arch/arm/boot/compressed/ashldi3.o
AS arch/arm/boot/compressed/piggy.gzip.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
CAT arch/arm/boot/zImage-dtb
Kernel: arch/arm/boot/zImage-dtb is ready
$ mykernel/arch/arm/boot/ 에서 이미지 , Zimage 및 Zimage-DTB를 찾을 수 있습니다.
$ mykernel/arch/arm/boot/dts/*. dtb 에서 장치 트리 blob .dtb를 찾을 수 있습니다.
커널이 준비되어 있습니다. 작업의 끝이 될 대부분의 임베디드 시스템에서. 일반적으로 커널을 SD 카드 또는 NFS 위치에 복사하면 보드가 부팅됩니다. 그러나 안드로이드에서는 다릅니다. 특수 부트 파티션을 준비한 다음 FastBoot를 사용하여 부팅 할 수 있습니다.
이 링크에서 커널 및 부팅 이미지에 대한 자세한 정보.
따라서 Google 사이트에서 휴대 전화의 Android 이미지를 다운로드하는 데 시작해야합니다. Nexus Factory 이미지 사이트로 이동하여 휴대 전화에있는 Android 버전과 일치하는 공장 이미지를 다운로드하십시오.
Nexus6 (Shamu) Android 6.0.1 (MMB29K)의 공장 이미지를 다운로드하십시오.
==>/홈/user/factory/shamu-mmb29k로 추출하십시오
export FACTORY=/home/user/factory/shamu-mmb29k
cd $FACTORY
mkdir unziped_img
unzip ./image-shamu-mmb29k.zip -d unziped_img
cd unziped_img
또는이 링크에서 boot.img를 다운로드하십시오.
[이 안내서] (http://rex-shen.net/android-unpackpack-factory-images/에서 영감을 얻었습니다.
sudo apt-get install abootimg
압축되지 않은 공장 이미지 파일 또는 다운로드 된 boot.img 파일로 이동
mkdir boot
cd boot
abootimg -x ../boot.img
# after the successful execution of the last command, we will have initrd.img (= ramdisk), zImage (= kernel) and bootimg.cfg (= kernel config)
# inside the boot folder.
Ramdisk 에서 루트 파일 시스템 루프를 검사하려면 :
file initrd.img
# the output should be similar to the following line:
# initrd.img: gzip compressed data, from Unix
mkdir ramdisk
cd ramdisk
# "gunzip -c" means unpack to standard output, and "cpio -i" convert standard output in files
gunzip -c ../initrd.img|cpio -i
# to create an image:
abootimg --create boot.img -f bootimg.cfg -k $MYKERNEL/arch/arm/boot/zImage-dtb -r initrd.img [-s <secondstage>] -c bootsize=[SIZE_IT_WANTS]
# to update an existing image:
abootimg -u boot.img -f bootimg.cfg -k $MYKERNEL/arch/arm/boot/zImage-dtb -r initrd.img [-s <secondstage>] -c bootsize=[SIZE_IT_WANTS]
참고 : Ramdisk가 Ramdisk 폴더가 아닌 initrd.img 인 옵션 "-r" .
참고 : 제 경우에는 Zimage 나 ** 이미지가 아닌 Zimage-DTB 에서만 작동합니다.
공식 Google 도구를 다운로드하십시오.
==>/home/user/bootimgtool로 추출하십시오
mkdir $FACTORY/unpacked_img
export BOOTIMGTOOL=/home/user/bootimgtool
cd $BOOTIMGTOOL
./unpack_bootimg --boot_img $FACTORY/unziped_img/boot.img --out $FACTORY/unpacked_img
cp $MYKERNEL/arch/arm/boot/zImage-dtb $ $FACTORY/unpacked_img/kernel
./mkbootimg --kernel $FACTORY/unpacked_img/kernel --ramdisk $FACTORY/unpacked_img/ramdisk -o $FACTORY/boot.img
이 도구를 다운로드하십시오.
git clone https://github.com/bzyx/bootimg-tools
export BOOTIMGTOOL=/home/user/bootimg-tools
그런 다음 공장 이미지에서 .img를 풀어야합니다. 사용자 정의 커널을 삽입하고 다시 포장하십시오.
cd $BOOTIMGTOOL
make
cd mkbootimg
./unmkbootimg -i $FACTORY/unziped_img/boot.img
cp $MYKERNEL/arch/arm/boot/zImage-dtb $ $FACTORY/unpacked_img/kernel
./mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x00008000 --ramdisk_offset 0x02000000 --second_offset 0x00f00000 --tags_offset 0x01e00000 --cmdline 'console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=shamu msm_rtb.filter=0x37 ehci-hcd.park=3 utags.blkdev=/dev/block/platform/msm_sdcc.1/by-name/utags utags.backup=/dev/block/platform/msm_sdcc.1/by-name/utagsBackup coherent_pool=8M' --kernel kernel --ramdisk ramdisk.cpio.gz -o $FACTORY/boot.img
adb reboot bootloader 에서 먼저 휴대 전화 설정또는 수동으로 전원을 눌러 몇 초 동안 아래로 내리십시오 .
그런 다음 테이핑 : fastboot devices
장치가 목록에 나타나야합니다
새로운 사용자 정의 boot.img가 잘 작동하는 경우 빠르게 테스트하려면 시도해보십시오 : fastboot boot boot.img
반환되지 않으면 실패하면 다음 을 사용하여 메모리에서 플래시를 시도 할 수 있습니다.
fastboot flash boot boot.img
fastboot reboot
cd $FACTORY
zip -r ../image-shamu-mmb29k.zip boot.img
fastboot devices ==> device must appear in the list
./flash-all.sh 또는 fastboot -w update image-shamu-mmb29k.zip
fastboot reboot
Differents Partitions, Android 시스템, Fastboot Commands 등에 대해 자세히 알아 보려면 여기에 슬라이드를 한 눈에 시전하십시오.
CF-Auto-Root와 같은 자동 스크립트를 사용할 수 있습니다.
또는이 안내서에서 영감을 얻은 다음 단계를 따르십시오.
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.n");
}
ccflags-y += -fno-stack-protector -fno-pic -Wno-unused-function
obj-m += module.o
module-objs := hello-1.o hello-2.o hello-3.o
CROSS_COMPILE=/home/user/ndk/arm-eabi-4.8/binarm-eabi-
KERNEL_DIR=/home/user/images_kernel/msm-android-msm-shamu-3.10-marshmallow
TMP_BUILD ?= /tmp/build
MODULE_NAME = module.ko
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(patsubst %/,%,$(dir $(mkfile_path)))
all:
mkdir -p $(TMP_BUILD)
cp ./*.c ./*.h ./Makefile $(TMP_BUILD)
make -C ${KERNEL_DIR} M=$(TMP_BUILD) ARCH=arm PLATFORM=shamu CROSS_COMPILE=${CROSS_COMPILE} modules V=1
cp $(TMP_BUILD)/$(MODULE_NAME) $(PWD)/$(MODULE_NAME)
rm -rf $(TMP_BUILD)
clean:
make -C ${KERNEL_DIR} M=$(PWD) clean
make
모듈을 만들어야합니다
adb push module.ko /data/local/tmp
adb shell su -c "lsmod"
adb shell su -c "insmod /data/local/tmp/module.ko"
adb shell su -c "lsmod"
다음과 같이 추가 정보를 가질 수 있습니다.
adb shell su -c "cat /proc/kmsg"
커널 모듈 프로그램에 대한 자세한 정보는 여기를 참조하십시오.