Dies ist ein Tutorial, das die Schritte für:
Dieser Tuto wurde für das folgende Ziel durchgeführt:
Downlad ADB und Fastboot von Ihrem Paketmanager oder folgen Sie diesem Handbuch.
sudo apt-get install adb fastboot
Starten Sie den ADB -Daemon , vergewissern Sie sich, dass Sie das Telefon mit ADB sehen können und starten Sie es im Bootloader -Modus (Fastboot -Modus) neu.
adb start-server
adb devices
adb reboot bootloader
Stellen Sie sicher, dass Sie das Telefon mit Fastboot sehen und den Bootloader entsperren können
fastboot devices
fastboot oem unlock
(or fastboot flashing unlock for newest phones)
Sie können diesen offiziellen Handbuch auch folgen, um manuell im Fastboot -Modus zu starten und den Bootloader freizuschalten.
Hier finden Sie andere Fastboot -Befehle .
Ich habe zum ersten Mal versucht, den neuesten stabilen NDK aus dem offiziellen Repo zu verwenden.
(Laden Sie es nicht herunter !! Es funktioniert nicht)
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-
Aber ich hatte sehr seltsame Warnungen bei der Zusammenstellung, die das endgültige Bincing blockierte.
Nachdem ich hier nur wenige Forschungen feststellte, die ich hier fand, war es besser, den Arm-ABI-GCC als den Arm-Linux-Androideabi-GCC zu verwenden.
Deshalb habe ich die neueste Version von ARM-ABI-4.8 heruntergeladen.
==> extrahieren Sie es auf /home/user/ndk/arm-eabi-4.8
export PATH=$PATH:/home/user/ndk/arm-eabi-4.8/bin
export CROSS_COMPILE=arm-eabi-
Hinweis: Ich kann die Auswahl des Arm-EABI-4.8 bestätigen, da es sich um den Cross-Compiler handelt, der im Kernel-Bild selbst in Build.Config definiert ist:
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
"
Um unser eigenes Kernel -Modul in den Nexus 6 -Kernel einzufügen, müssen die Kernel -Konfigurationsoptionsladungsmodul aktiviert werden. Wenn Sie Ihr Telefon bereits verwurzelt haben, können Sie es überprüfen, wenn Sie es aufnehmen, andere Vertrauen Sie mir:
adb shell su -c "lsmod"
or
adb shell su -c "insmod /data/local/tmp/glitchmin.ko"
Diese Funktionen sind in Android -Kerneln standardmäßig nicht autorisiert. Daher werden wir einen neuen Kernel mit dem Option Ladable Modul Support aktiviert.
Der von uns erhaltene Nexus 6 (Shamu) wurde wie folgt konfiguriert:
Laut dieser Liste habe ich diesen offiziellen Google-Kernel Android-MSM-Shamu-3.10-Marschmallow heruntergeladen.
==> extrahieren Sie es auf /home/user/images_kernel/msm-android-msm-shamu-3.10-marshmallow Export mykernel =/home/user/images_kernel/msm-android-msm-shamu-3.10-marshmaler CD $ mykernel
Sie können auch den [Cyanogenmod Kernel android_kernel_moto_shamu] (https://github.com/cyanogenmod/android_kernel_moto_shamu) verwenden (<- schließlich booten diese nicht)
Anschließend können Sie Ihren Kernel nach den nächsten Schritten erstellen (inspiriert aus diesem Handbuch oder diesem Handbuch oder [dieses eine] (https://source.android.com/setup/build/devices oder dieser letzte).
In $ mykernel/arch/arm/configs/shamu_config, ersetzen Sie
# CONFIG_MODULES is not set
von
CONFIG_MODULES=y
Dann
cp arch/arm/configs/shamu_config .config
make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- shamu_defconfig
Überprüfen Sie, ob die Unterstützung der Option aktiviert werden kann. Die Unterstützung des ladbaren Moduls ist gut aktiviert mit: make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
==> Wenn Sie nicht die Unterstützung für das ladbare Modul aktivieren, drücken Sie den Speicherplatz auf Ihrer Tastatur und wählen Sie dann Speichern und Beenden
Schließlich kompilieren Sie den gesamten Kernel (es dauert viel Zeit ...): make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- -j4
(Hinweis: -jn bedeutet, dass es N -Prozessor in Parallel verwendet)
Sie müssen am Ende so etwas wie folgt erhalten:
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
Sie finden Ihr Bild , Zimage und Zimage-DTB in $ mykernel/arch/arm/boot/
Sie finden den Device Tree Blob .dtb unter $ mykernel/arch/arm/boot/dts*. Dtb
Sie haben Ihren Kernel bereit. Bei den meisten eingebetteten Systemen, die das Ende Ihrer Arbeit sein werden. Normalerweise kopieren Sie den Kernel an die SD -Karte oder den NFS -Standort, und das Board startet. Aber auf Android ist es anders. Sie müssen eine spezielle Startpartition vorbereiten, die Sie dann mit Fastboot booten können.
Weitere Informationen zu Kernel und Boot -Bild auf diesem Link.
Sie müssen also das Herunterladen des Android -Images für Ihr Telefon von Google Sites herunterladen. Gehen Sie zur Site von Nexus Factory Images und laden Sie das Werksbild herunter, das mit der Android -Version übereinstimmt, die auf Ihrem Telefon steht.
Laden Sie hier das Werksbild für den Nexus6 (Shamu) Android 6.0.1 (MMB29K) herunter.
==> extrahieren Sie es an/home/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
Oder laden Sie den Boot.img von diesem Link herunter.
Inspiriert von [diesem Handbuch] (http://rexshen.net/android-unpackpack-factory-images/.
sudo apt-get install abootimg
Gehen Sie in die unzippierte Factory -Bilddatei oder in die Datei boot.img herunter.
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.
Wenn Sie die Stammdateisystem -Rootfs aus dem RAMDISK inspizieren möchten:
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]
HINWEIS: Die Option "-r" , wobei RamDisk initrd.img ist, nicht der RamDisk-Ordner.
Hinweis: Es ist mein Fall, es funktioniert nur mit Zimage-DTB , weder mit Zimage noch ** Bild
Laden Sie das offizielle Google -Tool herunter.
==> extrahieren Sie es an/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
Laden Sie dieses Tool herunter.
git clone https://github.com/bzyx/bootimg-tools
export BOOTIMGTOOL=/home/user/bootimg-tools
Dann müssen Sie das .img aus Ihrem Werksbild auspacken. Fügen Sie es in Ihren benutzerdefinierten Kernel ein und verpacken Sie es neu.
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 bootloaderoder manuell drücken und für einige Sekunden niedriger klingen .
Dann Taping: fastboot devices
Ihr Gerät muss in der Liste angezeigt werden
Wenn Sie schnell testen möchten, ob Ihr neuer fastboot boot boot.img boot.img gut funktional ist
Wenn Sie nicht fehlgeschlagen sind, können Sie versuchen, es im Speicher mit:
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 oder fastboot -w update image-shamu-mmb29k.zip
fastboot reboot
Wenn Sie mehr über die unterschiedlichen Partitionen, das Android -System, die Fastboot -Befehle usw. erfahren möchten, werfen Sie hier einen Blick darauf auf.
Sie können ein automatisches Skript wie CF-Auto-Root dafür verwenden.
Oder befolgen Sie diese nächsten Schritte, die aus diesem Leitfaden inspiriert sind.
/*
* 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
Es sollte das Modul erstellen.KO
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"
Sie können weitere Informationen mit:
adb shell su -c "cat /proc/kmsg"
Weitere Informationen zur Kernel -Modulprogrammierung hier.