Это учебник, который показывает шаги для:
Этот Тут был сделан для следующей цели:
Downlad ADB и Fastboot от вашего менеджера пакетов или следующего за этим руководством.
sudo apt-get install adb fastboot
Запустите демон ADB , убедитесь, что вы можете увидеть телефон с ADB и перезапустите его в режиме загрузчика (режим 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-EABI-GCC , а не ARM-Linux-Andoideabi-GCC .
Поэтому я скачал последнюю версию ARM-EABI-4.8.
==> Извлечь его в /HOME/USER/NDK/ARM-EABI-4.8
export PATH=$PATH:/home/user/ndk/arm-eabi-4.8/bin
export CROSS_COMPILE=arm-eabi-
Примечание: я могу подтвердить выбор ARM-EABI-4.8, потому что это кросс-компилятор, определяемый на самом изображении ядра в Build.config :
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 Kernel Android-MSM-Shamu-3.10-Marshmallow.
==> Извлечь его в /HOME/USER/IMAGES_KERNEL/MSM-ANDROID-MSM-SHAMU-3.10-MARSHMALLE EXPORT MYKERNEL =/HOME/USER/IMAVERS_KERNEL/MSM-ANDOR
Вы также можете использовать [cyanogenmod kernel android_kernel_moto_shamu] (https://github.com/cyanogenmod/android_kernel_moto_shamu) (<- Наконец-то этот не загружается)
Затем вы можете построить свое ядро после следующих шагов (вдохновленное этим руководством или этим руководством или [This One] (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
Вы можете найти свое изображение , Zimage и Zimage-DTB в $ mykernel/arch/arm/boot/
Вы можете найти Blob Tree Device .dtb по адресу $ mykernel/arch/arm/boot/dts/*. Dtb
У вас есть готовое ядро. На большинстве встроенных систем, которые станут концом вашей работы. Обычно вы копируете ядро на SD -карту или местонахождение NFS, и плата будет загружаться. Но на Android все по -другому. Вам необходимо подготовить специальный загрузочный раздел, который затем можно загрузить, используя Fastboot.
Больше информации о ядре и загрузке изображения по этой ссылке.
Таким образом, вам нужно начать с загрузки изображения Android для вашего телефона с сайтов Google. Перейдите на сайт изображений Nexus Factory и загрузите заводское изображение, которое соответствует версии Android, которая находится на вашем телефоне.
Загрузите заводское изображение для Nexus6 (Shamu) Android 6.0.1 (MMB29K) здесь.
==> Извлечь его в/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
Или загрузите 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]
Примечание: опция "-r" , где ramdisk является initrd.img, а не папка Ramdisk.
Примечание: это мой случай, он работает только с Zimage-DTB , а не с Zimage Net ** Image
Загрузите официальный инструмент 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
Ваше устройство должно появиться в списке
Если вы хотите быстро протестировать, если ваш новый пользовательский загрузка. 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
Если вы хотите узнать больше о различных разделах, системе Android, командах Fastboot и т. Д., Откройте здесь слайды.
Вы можете использовать автоматический скрипт, такой как 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
Он должен создать module.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"
Вы можете получить больше информации с:
adb shell su -c "cat /proc/kmsg"
Больше информации о программе модуля ядра здесь.