Ini tutorial yang menunjukkan langkah -langkah untuk:
Tuto ini telah dilakukan untuk target berikut:
Downlad adb dan fastboot dari manajer paket Anda atau mengikuti panduan ini.
sudo apt-get install adb fastboot
Mulai daemon ADB , verifikasi Anda dapat melihat telepon dengan ADB dan restart dalam mode bootloader (FastBoot Mode).
adb start-server
adb devices
adb reboot bootloader
Verifikasi Anda dapat melihat telepon dengan fastboot dan membuka kunci bootloader
fastboot devices
fastboot oem unlock
(or fastboot flashing unlock for newest phones)
Anda juga dapat mengikuti panduan resmi ini untuk memulai secara manual dalam mode fastboot dan untuk membuka kunci bootloader.
Anda dapat menemukan perintah fastboot orang lain di sini.
Saya pertama kali mencoba menggunakan NDK stabil terbaru dari repo resmi.
(Jangan unduh !! Tidak berhasil)
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-
Tapi saya memiliki peringatan yang sangat aneh di kompilasi yang menghalangi Lincking terakhir.
Jadi setelah AA beberapa penelitian yang saya temukan di sini lebih baik menggunakan lengan-GCC daripada Arm-Linux-Androideabi-GCC .
Oleh karena itu saya mengunduh versi terbaru dari Arm-EABI-4.8.
==> Ekstraknya ke /home/user/ndk/arm-eabi-4.8
export PATH=$PATH:/home/user/ndk/arm-eabi-4.8/bin
export CROSS_COMPILE=arm-eabi-
CATATAN: Saya dapat mengkonfirmasi pilihan Arm-EABI-4.8 karena itu adalah kompiler silang yang didefinisikan dalam gambar kernel itu sendiri di 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
"
Untuk memasukkan modul kernel kita sendiri ke dalam kernel Nexus 6, kita perlu memiliki dukungan Modul Opsi Kernel yang dapat diaktifkan. Jika Anda sudah melakukan rooting ponsel, Anda dapat memverifikasinya, Otherelse Percayalah kepada saya:
adb shell su -c "lsmod"
or
adb shell su -c "insmod /data/local/tmp/glitchmin.ko"
Fungsi ini tidak disahkan secara default dalam kernel Android. Oleh karena itu, kami akan mem -flash kernel baru dengan dukungan modul yang dapat dimuat opsi diaktifkan.
Nexus 6 (shamu) yang kami terima dikonfigurasi sebagai berikut:
Menurut daftar ini, saya mengunduh Google Kernel Android-MSM-Shamu-Shamu-3.10-Marshmallow resmi ini.
==> Ekstraknya ke /home/user/images_kernel/msm-android-msm-shamu-3.10-marshmallow ekspor mykernel =/home/user/images_kernel/msm-android-msm-shamu-3.10-marshmallow cd $ mykernel
Anda juga dapat menggunakan [cyanogenmod kernel android_kernel_moto_shamu] (https://github.com/cyanogenmod/android_kernel_moto_shamu) (<- akhirnya yang ini tidak boot)
Kemudian Anda dapat membangun kernel mengikuti langkah selanjutnya (terinspirasi dari panduan ini atau panduan ini atau [yang ini] (https://source.android.com/setup/build/devices atau yang terakhir ini).
Dalam $ mykernel/arch/arm/configs/shamu_config, pengganti
# CONFIG_MODULES is not set
oleh
CONFIG_MODULES=y
Kemudian
cp arch/arm/configs/shamu_config .config
make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- shamu_defconfig
Verifikasi Jika opsi mengaktifkan dukungan modul yang dapat dimuat diaktifkan dengan baik dengan: make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
==> Jika tidak pilih Enable Loadable Module Support , tekan ruang pada keyboard Anda dan kemudian pilih Simpan dan Keluar
Akhirnya kompilasi seluruh kernel (dibutuhkan banyak waktu ...): make ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-eabi- -j4
(Catatan: -jn berarti akan menggunakan prosesor N di Parallele)
Anda harus mendapatkan pada akhirnya sesuatu seperti:
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
Anda dapat menemukan gambar , zimage , dan zimage-dtb Anda di $ mykernel/arch/arm/boot/
Anda dapat menemukan gumpalan pohon perangkat .dtb di $ mykernel/arch/arm/boot/dts/*. Dtb
Anda sudah menyiapkan kernel. Pada sebagian besar sistem tertanam yang akan menjadi akhir dari pekerjaan Anda. Biasanya Anda akan menyalin kernel ke kartu SD atau lokasi NFS, dan papan akan boot. Tapi di Android itu berbeda. Anda perlu menyiapkan partisi boot khusus yang kemudian dapat Anda boot menggunakan fastboot.
Info lebih lanjut tentang kernel dan gambar boot di tautan ini.
Jadi, Anda harus mulai dari mengunduh gambar Android untuk ponsel Anda dari Google Situs. Buka situs gambar Nexus Factory dan unduh gambar pabrik yang cocok dengan versi Android yang ada di ponsel Anda.
Unduh gambar pabrik untuk NEXUS6 (SHAMU) Android 6.0.1 (MMB29K) di sini.
==> Ekstrak ke/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
Atau unduh boot.img dari tautan ini.
Terinspirasi dari [panduan ini] (http://rex-shen.net/android-unpackpack-factory-images/.
sudo apt-get install abootimg
Masuk ke file gambar pabrik yang tidak diusir atau file boot.img yang diunduh,
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.
Jika Anda ingin memeriksa rootf sistem file root dari 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]
Catatan: Opsi "-r" , di mana Ramdisk adalah initrd.img, bukan folder Ramdisk.
Catatan: Ini kasus saya, ini hanya berfungsi dengan zimage-dtb , bukan dengan gambar zimage atau **
Unduh alat Google resmi.
==> Ekstrak ke/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
Unduh alat ini.
git clone https://github.com/bzyx/bootimg-tools
export BOOTIMGTOOL=/home/user/bootimg-tools
Maka Anda perlu membongkar .img dari gambar pabrik Anda. Masukkan kernel khusus Anda dan kembalikan.
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 bootloaderAtau menekan kekuatan manual dan terdengar lebih rendah selama beberapa detik.
Lalu rekaman: fastboot devices
Perangkat Anda harus muncul dalam daftar
Jika Anda ingin menguji dengan cepat jika boot.img kustom baru Anda berfungsi dengan baik, coba: fastboot boot boot.img
Jika tidak mengembalikan Anda gagal , Anda dapat mencoba mem -flash dalam memori menggunakan:
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 atau fastboot -w update image-shamu-mmb29k.zip
fastboot reboot
Jika Anda ingin mempelajari lebih lanjut tentang partisi perbedaan, sistem Android, perintah fastboot, dll ..., melemparkan pandangan ini meluncur di sini.
Anda dapat menggunakan skrip otomatis seperti CF-Auto-Root untuk itu.
Atau ikuti langkah selanjutnya yang terinspirasi dari panduan ini.
/*
* 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
Itu harus membuat modul.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"
Anda dapat memiliki info lebih lanjut dengan:
adb shell su -c "cat /proc/kmsg"
Info lebih lanjut tentang program modul kernel di sini.