هذا البرنامج التعليمي الذي يوضح خطوات:
تم القيام بهذا التوت للهدف التالي:
Downlad ADB و Fastboot من مدير الحزمة الخاص بك أو متابعة هذا الدليل.
sudo apt-get install adb fastboot
ابدأ تشغيل ADB Daemon ، تحقق من أنك قادر على رؤية الهاتف مع 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-
لكن كان لدي تحذيرات غريبة للغاية في التجميع الذي منعت Lincking النهائية.
لذلك بعد قلة من الأبحاث التي وجدتها هنا ، كان من الأفضل استخدام ARM-OEBI-GCC بدلاً من ARM-Linux-Androideabi-GCC .
لذلك قمت بتنزيل أحدث إصدار من ARM-OEBI-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-OEBI-4.8 لأنه المتقاطع المحدد في صورة kernel نفسها في 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
"
من أجل إدخال وحدة kernel الخاصة بنا في kernel Nexus 6 ، نحتاج إلى تنشيط وحدة تحميل خيار kernel. إذا كنت قد قمت بالفعل بتأصيل هاتفك ، فيمكنك التحقق من ذلك ، وثق بي الآخرون:
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-droid-msm-shamu-3.10-marshmallow التصدير mykernel =/hom
يمكنك أيضًا استخدام [cyanogenmod kernel android_kernel_moto_shamu] (https://github.com/cyanogenmod/android_kernel_moto_shamu) (<- أخيرًا لا يتم تشغيل هذا واحد)
بعد ذلك ، يمكنك إنشاء kernel بعد الخطوات التالية (مستوحاة من هذا الدليل أو هذا الدليل أو [هذا الدليل] (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
==> إذا لم يكن تحديد دعم تمكين وحدة التحميل ، اضغط على Space على لوحة المفاتيح الخاصة بك ثم حدد حفظ والخروج
أخيرًا ، قم بتجميع النواة بأكملها (يستغرق الكثير من الوقت ...): 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 blob .dtb $ mykernel/arch/ARM/BOOT/DTS/*. DTB
لديك kernel جاهزة. في معظم الأنظمة المضمنة التي ستكون نهاية عملك. عادةً ما تقوم بنسخ موقع Kernel إلى SD Card أو NFS ، وسيتم تشغيل اللوحة. ولكن على أندرويد الأمر مختلف. تحتاج إلى إعداد قسم تمهيد خاص والذي يمكنك بعد ذلك التمهيد باستخدام Fastboot.
مزيد من المعلومات حول kernel وصورة التمهيد على هذا الرابط.
لذلك تحتاج إلى البدء من تنزيل صورة Android لهاتفك من مواقع Google. انتقل إلى موقع Nexus Factory Images وقم بتنزيل صورة المصنع التي تتطابق مع إصدار Android الموجود على هاتفك.
قم بتنزيل صورة المصنع لـ Nexus6 (Shamu) Android 6.0.1 (MMB29K) هنا.
==> استخراجه إلى/الصفحة الرئيسية/المستخدم/المصنع/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.
إذا كنت ترغب في فحص ROOTFs لنظام ملفات الجذر من 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 ولا صورة **
قم بتنزيل أداة Google الرسمية.
==> استخراجه إلى/الصفحة الرئيسية/المستخدم/botimgtool
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 من صورة المصنع الخاصة بك. أدخلها kernel المخصصة وإعادة حربها.
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
يجب أن يظهر جهازك في القائمة
إذا كنت ترغب في الاختبار بسرعة إذا كان التمهيد المخصص الجديد الخاص بك 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
يجب أن تنشئ الوحدة النمطية
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"
مزيد من المعلومات حول برمجة وحدة kernel هنا.