آموزش ساخت ریکاوری TWRP از منبع

استاندارد

با سلام امرزو آموزش ساخت ریکاوری TWRP را برایتان داریم که این روزها در بین ریکاوری ها حرف اول را میزنه و دارایی امکانات فراوانی می باشد.

قبلا آموزش ساخت ریکاوری CWM را گذاشته بودم برایتان که در پنج بخش بصورت کامل هست و از بخش اول تا بخش چهار آموزش برای ساخت ریکاوری یکسان می باشد پس برای شروع از بخش اول همان آموزش شروع کنید و در ادامه از این آموزش برای کامل کردن ادامه دهید ولی بصورت خلاصه چیزهای را هم ما دوباره ذکر می کنیم

موارد مورد نیاز

سیستم عامل لینوکس.پیشنهاد ما اوبنتو 64 بیت

نیروی اراده

و طبعا یک فکر مستعد وآزاد

آماده سازی سیستم و هماهنگ سازی هم همانند بخش اول آموزش می باشد ولی در اینجا توصیه میشه بجای استفاده از CM از بیس Omnirom استفاده کنید چون در ورژنهای جدید ریکاوری TWRP در خود رامهای omni می باشد ولی در سیانوژن باید خودتان آنها را اضافه کنید و در حین کار هم ممکن مشکل زیاد پیش بیاد.

ورژن های موجود برای omni

  • android-6.0
  • android-5.1
  • android-5.0
  • android-4.4
  • android-4.3

برای نصب ترمینال را باز و کدهای زیر را بزنید

mkdir ~/NameOfTheFolder

در آخر هم برای نام پوشه دستگاه خود را بنویسید

cd ~/NameOfTheFolder
repo init -u git://github.com/omnirom/android.git -b BRANCH

بجای BRANCH ورژن اندروید را وارد کنید

repo sync -j2

می توانید از ورژن کوچک شده هم استفاده کنید بجایی بالا برای این کار ما سه ورژن پایین را داریم

  • twrp-6.0
  • twrp-5.1
  • twrp-4.4

کدها همانند بالا می باشد فقط در کد سومی تغییرات زیر را می دهیم

repo init -u git://github.com/lj50036/platform_manifest_twrp_omni.git -b BRANCH

همانند بالا ورژن را جایگزیم کلمه آخری بکیند.

 

اگر شما قبلا سیانوژن را همگام سازی کردید کافیه به این لینک بروید و ورژن مورد نظر را دانلود به فایلهای خود در مسیر home/username/NameOfTheFolder/bootable اضافه کنید و نام فایل را به recovery-twrp اضافه کنید.

 

 

کامپایل ریکاوری TWRP

بعد از انجام تمام مراحل و اضافه کردن دستگاه خود باید پوشه شما مانند عکسهای زیر باشد

[toggle title=”جهت اطلاع” load=”hide”]می توانید از این شاخه های کوچک شده برای ساخت ریکاوری هم استفاده کنید.
https://github.com/lj50036/android_device_vendor_codename
دانلود و در مسیر home/username/NameOfTheFolder/device/vendor کپی کنید[/toggle]

و در آخر برای ساخت ریکاوری کدهای زیر را در ترمینال وارد کنید

cd ~/NameOfTheFolder

    source build/envsetup.sh

    lunch

    عدد دستگاه خود را وارد کنید. برای ما 16 می باشد

    mka recoveryimage ---> با این دستور شروع به ساخت ریکاوری میکند

تمام  ریکاوری شما آماده می باشد موفق باشید

هر گونه کپی برداری بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد

آموزش ساخت ریکاوری CWMاز منبع(بخش پنجم و پایانی)

استاندارد

با بخش پایانی آموزش در خدمتتان هستیم با ما همراه باشید

زمان ساختن ریکاوری

به پوشه CM11 می رویم و در آنجا ترمینال را باز و کد زیر را وارد کنید

build/envsetup.sh

در اینجا می بینیم که شاخه دستگاه ما کاملا آمادست در قدم بعدی برای پیکربندی دستگاه کد زیر را وارد کنید

lunch cm_P780-eng

برای شروع ساخت ریکاوری از دستور زیر استفاده می کنیم

make -j4 recoveryimage

عددی که بعد از حرف J می نویسیم بیانگر تعداد کارهای است که میخواهیم در یک زمان انجام شوند به مقدار قدرت پردازش کامپیوتر خود این عدد را کم یا زیاد کنید.

بعد از اتمام کار بدون مشکلی باید مانند تصویر زیر را ببینید

و اگر از مدیاتک استفاده کردید مانند زیر می باشد

و ریکاوری جدید مانند شکل زیر می باشد

تبریک کار ساخت ریکاوری به پایان رسید در آخر به بررسی تعدادی خطاها که ممکن است در حین کار برایتان پیش بیایید می پردازیم

خطاها و راه حل برطرف کردن آنها

cp: cannot stat `/home/carliv/CM11-0/out/target/product/P780/root/init.recovery.*.rc': No such file or directory
make: [/home/carliv/CM11-0/out/target/product/P780/recovery/root.ts] Error 1 (ignored)

اگر با این خطا مواجه شدید می توانید آن را نادیده بگیرید،این خطا هنگامی که شما از init.recovery.{hardware}.rc استفاده نکنید بروز می دهید که مهم نیست

find: `bootable/recovery/res-720': No such file or directory
No private recovery resources for TARGET_DEVICE P780

این خطا به علت این قسمت رخ می دهد build/core/Makefile

ifeq ($(TARGET_RECOVERY_SCREEN_WIDTH),)
ifeq ($(TARGET_SCREEN_WIDTH),)
TARGET_RECOVERY_SCREEN_WIDTH := 720
else
TARGET_RECOVERY_SCREEN_WIDTH := $(TARGET_SCREEN_WIDTH)
endif
endif
.......
ifeq ($(recovery_resources_private),)
  $(info No private recovery resources for TARGET_DEVICE $(TARGET_DEVICE))
endif

این خطا رو هم می توان نادیده گرفت

'cortex-a7' is not a recognized processor for this target (ignoring processor)

این خطا در آخر کار اگر از مدیاتک استفاده کنید زیاد نماینگر می شود چود مدیاتک از cortex-7 arm processors پشتیبانی نمی کند پس مشکلی نیست این خطا بازم نادیده گرفته شود

Checking build tools versions...
/home/carliv/CM11-0/out/target/product/P780/obj/APPS/SignatureTest_intermediates
"ebtables is disabled on this build"
find: `src': No such file or directory

این خطا هنگامی رخ می دهد که از اندروید کیت کات استفاده کنید که بخاطر نبودن پوشه src در مسیر frameworks/base/tests/TileBenchmark می باشد تا اندروید 4.3 این پوشه وجود داشت.(cm 10.2)

ولی در هر شاخه اندروید 4.4 این پوشه وجود ندارد،دلیل نبودن این پوشه کاملا عجیب می باشد چون در فایل Android.mk همان پوشه فراخوانی می شود؟

برای حل این مشکل دو راه وجود دارد

راه اول ویرایش فایل Android.mk در TileBenchmark از

LOCAL_SRC_FILES := $(call all-java-files-under, src)

به این شکل

LOCAL_SRC_FILES :=

یا راه حل دوم پوشه src را از cm-10.2 کپی کنید به مسیر فایلهای خودتان.

در هر حال اگر هم نمی خواهید میتوانید بازم این خطا را نادیده بگیرید هیچ مشکلی در ساخت فایل شما بوجود نمی آید

[email protected]:~/CM11-0$ lunch cm_P780-eng
build/core/product_config.mk:239: *** _nic.PRODUCTS.[[device/Lenovo/P780/cm.mk]]: "device/lenovo/P780/device_P780.mk" does not exist.  Stop.
Device P780 not found. Attempting to retrieve device repository from CyanogenMod Github (http://github.com/CyanogenMod).
Repository for P780 not found in the CyanogenMod Github repository list. If this is in error, you may need to manually add it to your local_manifests/roomservice.xml.
build/core/product_config.mk:239: *** _nic.PRODUCTS.[[device/Lenovo/P780/cm.mk]]: "device/lenovo/P780/device_P780.mk" does not exist.  Stop.

** Don't have a product spec for: 'cm_P780'
** Do you have the right repo manifest?

این خطا کاملا جدی می باشد و میتواند تمام پروسه ساخت را متوقف کند.برای ما موقعی رخ داد که به جایی استفاده از “lenovo” از “Lenovo” استفاده کردیم پس اگر برای شما رخ داد نام دستگاه را در تمام مسیر شاخهای دستگاه خود چک کنید

device/lenovo/P780/

پس دنبال خطایی املای و حروف بزرگ و کوچیک باشید برای رفع خطا چون نمی شود این خطا را نادیده گرفت و باید آن را حل کرد،به فایل زیر ما برای رفع مشکل حرف بزرگ اول اسم لنوو دقت کنید

[email protected]:~/CM11-0$ lunch cm_P780-eng
Trying dependencies-only mode on a non-existing device tree?

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.4
CM_VERSION=
TARGET_PRODUCT=cm_P780
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a7
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-43-generic-x86_64-with-Ubuntu-12.04-precise
HOST_BUILD_TYPE=release
BUILD_ID=KTU84Q
OUT_DIR=/home/carliv/CM11-0/out
============================================

[email protected]:~/CM11-0$

 

پایان کار امیدوارم این آموزش هم مانند دیگر آموزشها مفید واقع شود موفق و پیروز باشید

هرگونه کپی برداری از متن بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد

آموزش ساخت ریکاوری CWMاز منبع(بخش چهارم)

استاندارد

با بخش چهارم در خدمتتان هستم در بخش پنجم آموزش ما پایان می یاید

مستقیم میریم برای آموزش اول فایل BoardConfig.mk را باز کنید باید مانند شکل زیر باشد

USE_CAMERA_STUB := true

# inherit from the proprietary version
-include vendor/lenovo/P780/BoardConfigVendor.mk

TARGET_ARCH := arm
TARGET_NO_BOOTLOADER := true
TARGET_BOARD_PLATFORM := unknown
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := cortex-a7
TARGET_CPU_SMP := true
ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_BOOTLOADER_BOARD_NAME := P780

BOARD_KERNEL_CMDLINE := 
BOARD_KERNEL_BASE := 0x10000000
BOARD_KERNEL_PAGESIZE := 2048

# fix this up by examining /proc/mtd on a running device
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_FLASH_BLOCK_SIZE := 131072

TARGET_PREBUILT_KERNEL := device/lenovo/P780/kernel

BOARD_HAS_NO_SELECT_BUTTON := true

 

خوب باید تغییراتی را بدهیم در اول اگر mkvendor نوع اسکریپ پلتفرم موبایل را نشناخت

TARGET_BOARD_PLATFORM := unknown

اگر نام سی پی یو خود را نمی دانید در ADB دستور زیر را تایپ کنید تا نمایان شود

adb shell cat /proc/cpuinfo

بعنوان نمونه اطلاعات سی پی یو موبایل ما را در زیر ببینید

Processor	: ARMv7 Processor rev 2 (v7l)
processor	: 0
BogoMIPS	: 2439.94

Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 2

Hardware	: MT6589
Revision	: 0000
Serial		: 0000000000000000

فایل را طبق نام سی پی یو تغییر می دهیم مانند زیر

TARGET_BOARD_PLATFORM := mt6589

برای تعریف مقدار حجم پارتیشن در کدهای زیر

 در گوشی به مسیر proc/mtd برای تغییر بروید
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_FLASH_BLOCK_SIZE := 131072

 

برای گرفتن اطلاعات پارتیشن گوشی خود در ADB دستور adb shell cat /proc/mtd یا adb shell cat /proc/emmc یا برای مدیاتک adb shell cat /proc/dumchar_info را تایپ کنید و اطلاعات پارتیشن گوشی خود را جایگزین کدهای بالایی بکنید برای ما کد زیر می باشد

# مقدار حجم پارتیشن
BOARD_BOOTIMAGE_PARTITION_SIZE := 6291456
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 6291456
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 939524096
BOARD_USERDATAIMAGE_PARTITION_SIZE := 1283457024
BOARD_FLASH_BLOCK_SIZE := 512

در قسمت آخرین کد board flash block siz این یک عدد مخصوص می باشد که برای مدیاتک معمولا 512 می باشد ولی عدد پیش فرض 131072 نیز کار می کند

همچنین در کد زیر وارد کنید

TARGET_USERIMAGES_USE_EXT4 := true

اگر پارتیشن گوشی شما EXT4 باشد البته برای فهمیدن پارتیشن گوشی fstab یا default.prop در boot.img ramdisk را چک کنید.

خط بعدی که باید درست شود

TARGET_PREBUILT_KERNEL := device/lenovo/P780/kernel

اگر یادتان باشد کرنل را در پوشه prebuilt گذاشتیم پس باید اینگونه باشد

TARGET_PREBUILT_KERNEL := device/lenovo/P780/prebuilt/kernel

 

در بعضی موارد نیاز است که از پرچم دیگری استفاده شود

TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888"

 

باید چک کنید که اگر گوشی شما دارای PIXEL FORMAT باشد یا پرچم در آن استفاده نشده باشد وگرنه ریکاوری شما بوت نخواهد شد.

اکنون بزارید fstab و init.rc را سفارشی سازی کنیم

TARGET_RECOVERY_INITRC := device/lenovo/P780/recovery/init.{hardware}.rc
TARGET_RECOVERY_FSTAB := device/lenovo/P780/recovery/recovery.fstab

برای ما اینگونه می باشد

TARGET_RECOVERY_INITRC := device/lenovo/P780/recovery/init.mt6589.rc
TARGET_RECOVERY_FSTAB := device/lenovo/P780/recovery/recovery.fstab

اگر می خواهید از init.recovery.{hardware}.rc استفاده کنید شما آن را در مسیر recovery/root دارید پرچم را رد کنید و فقط از کد زیر استفاده کنید

TARGET_RECOVERY_FSTAB := device/lenovo/P780/recovery/recovery.fstab

یادتان باشد مسیر device/lenovo/P780 برای گوشی نمونه ما هست شما باید نام گوشی خود رابنویسید

ساخت ریکاوری CWM

تا اینجای کار مراحلی که انجام دادیم کلی بودند اکنون دیگر برای ساخت Clockworkmod Recovery میرویم که از ریکاوری پیش فرض CM11 استفاده کردیم برای ساخت ولی اگر می خواهید cwm نوعی دیگر یا کاملا دست ساز بسازید باید پرچم در BoardConfig را مطابق پوشه ریکاوری مورد نظر مانند ریکاوری های recovery-cm, recovery-twrp, recovery-philz, recovery-miui در پرچم BoardConfig قرار دهید

RECOVERY_VARIANT := twrp

یا

RECOVERY_VARIANT := philz

برای مدیاتک نیز یک پرچم اضافه باید وارد کنید

BOARD_CUSTOM_BOOTIMG_MK := device/lenovo/P780/mkmtkbootimg.mk

چیز دیگری هم که می توانید اضافه کنید کد زیر می باشد

TARGET_RECOVERY_LCD_BACKLIGHT_PATH := \"/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness\"

در درون گوشی خود بگردید برای lcd-backlight معمولا در مسیر sys/devices/platform/leds پیدا می شود برای ریکاوری های (twrp, philz) نیاز است.همچنین می توانید فونت دلخواه خود را به ریکاوری اضافه کنید که در مسیر bootable/recovery or recovery-variant/minui میتوانید فوت را انتخاب کنید،فونت بصورت عددی 00x00 هست که عدد نشانه عرض و طول می باید که طبق صفحه نمایش گوشیتان میتوانید تغییرش دهید.

بعنوان مثال برای مقدار صفحه 540×960 فونت roboto_15x24.h را انتخاب می کنیم.

BOARD_USE_CUSTOM_RECOVERY_FONT := \"roboto_15x24.h\"

و در آخر فایل ما شبیه به زیر می شود

USE_CAMERA_STUB := true

# inherit from the proprietary version
-include vendor/lenovo/P780/BoardConfigVendor.mk

TARGET_ARCH := arm
TARGET_NO_BOOTLOADER := true
TARGET_BOARD_PLATFORM := mt6589
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := cortex-a7
TARGET_CPU_SMP := true
ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_BOOTLOADER_BOARD_NAME := P780

BOARD_KERNEL_CMDLINE := 
BOARD_KERNEL_BASE := 0x10000000
BOARD_KERNEL_PAGESIZE := 2048

# fix this up by examining /proc/mtd on a running device
BOARD_BOOTIMAGE_PARTITION_SIZE := 6291456
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 6291456
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 939524096
BOARD_USERDATAIMAGE_PARTITION_SIZE := 1283457024
BOARD_FLASH_BLOCK_SIZE := 512
TARGET_USERIMAGES_USE_EXT4 := true

TARGET_PREBUILT_KERNEL := device/lenovo/P780/prebuilt/kernel
TARGET_RECOVERY_INITRC := device/lenovo/P780/recovery/init.mt6589.rc
TARGET_RECOVERY_FSTAB := device/lenovo/P780/recovery/recovery.fstab

BOARD_HAS_NO_SELECT_BUTTON := true

BOARD_CUSTOM_BOOTIMG_MK := device/lenovo/P780/mkmtkbootimg.mk

BOARD_USE_CUSTOM_RECOVERY_FONT := \"font_17x33.h\"
DEVICE_RESOLUTION := 720x1280
TARGET_RECOVERY_LCD_BACKLIGHT_PATH := \"/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness\"

خوب تا اینجا شاخه های دستگاه ما برای ساخت ریکاوری آماده شدند و می توانیم بریم برای ساخت که در بخش آخر آموزش می توانید با همراه باشید

کپی برداری از متن بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد

آموزش ساخت ریکاوری CWMاز منبع(بخش سوم)

استاندارد

با بخش سوم آموزش در خدمتتان هستیم خیلی سریع بریم برای ادامه کار

برای فایل fstab شما باید فایل stock boot.img را آنپک کنید،فایل را داخل برنامه آنپک که قبلا گذاشتیم بذارید و کد زیر را تایپ کنید

unpack_img boot.img

اگر هم پردازنده مدیاتک بود از کد زیر استفاده کنید

unpack_MTK_img boot.img

بعد از آن پوشه ramdisk را باز و فایل fstab را به مسیر recovery/root انتقال بدهید و نام آن را همانطور که قبلا گفتیم طبق چیپ موبایلتان مانند fstab.{hardware} تغییر دهید.

به پوشه cm11 بروید در مسیر bootable/recovery/etc فایل init.rc به محل موبایلتان پوشه /recovery انتقال دهید و نامش را به init.{hardware}.rc تغییر دهید.

در cm11 از fstab ورژن دو استفاده شده شما برای  کامل کردن محتوای fstab.{hardware} و recovery.fstab می توانید از سایت github دنبال یک گوشی هم چیپ گوشی خودتان بگردید و در پوشه آن فایل fstab را مقابل فایل خود بگذارید و همانند آن ویرایشش کنید

یک نمونه فایل fstab متعلق به گوشی HTC M7

 Copyright (C) 2014 The CyanogenMod Project

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
dev/block/platform/msm_sdcc.1/by-name/dsps /firmware_dsps vfat ro,shortname=lower wait
dev/block/platform/msm_sdcc.1/by-name/radio /firmware_radio vfat ro,shortname=lower wait
dev/block/platform/msm_sdcc.1/by-name/adsp /firmware_q6 vfat ro,shortname=lower wait
dev/block/platform/msm_sdcc.1/by-name/wcnss /firmware_wcnss vfat ro,shortname=lower wait
dev/block/platform/msm_sdcc.1/by-name/boot /boot emmc defaults defaults
dev/block/platform/msm_sdcc.1/by-name/recovery /recovery emmc defaults defaults
dev/block/platform/msm_sdcc.1/by-name/misc /misc emmc defaults defaults
dev/block/platform/msm_sdcc.1/by-name/devlog /devlog ext4 noatime,nosuid,nodev,barrier=0 wait
dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,noatime,barrier=0 wait
dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 noatime,nosuid,nodev,barrier=0 wait
dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 noatime,nosuid,nodev,noauto_da_alloc,barrier=0 wait,encryptable=/dev/block/platform/msm_sdcc.1/by-name/extra
 SD card
devices/platform/msm_sdcc.1/mmc_host/mmc0 auto auto defaults voldmanaged=sdcard0:36,noemulatedsd
 USB storage
devices/platform/msm_hsusb_host/usb auto auto defaults voldmanaged=usbdisk:auto

یک نمونه recovery.fstab برای گوشی MTK Lenovo P780

# Android fstab file.
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
/[email protected] /system ext4 ro,noatime wait
/[email protected] /cache ext4 noatime,nosuid,nodev,noauto_da_alloc wait
/[email protected] /data ext4 noatime,nosuid,nodev,noauto_da_alloc wait,encryptable=footer
# vold-managed volumes
/devices/platform/mtk-msdc.0/mmc_host/mmc0 auto auto defaults voldmanaged=sdcard1:8,
/devices/platform/mtk-msdc.1/mmc_host/mmc1 auto auto defaults voldmanaged=sdcard0:auto
/dev/bootimg /boot emmc defaults defaults
/dev/nvram /nvram emmc defaults defaults
/dev/recovery /recovery emmc defaults defaults
/dev/uboot /uboot emmc defaults defaults
/dev/misc /misc emmc defaults defaults

در مدیاتک fstab.mt6589 دارای دو پارتیشن اضافه می باشد(امنیتی)

# Android fstab file.
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
/[email protected] /system ext4 ro,noatime wait
/[email protected] /cache ext4 noatime,nosuid,nodev,noauto_da_alloc wait
/[email protected] /data ext4 noatime,nosuid,nodev,noauto_da_alloc wait,encryptable=footer
/[email protected]_f /protect_f ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check
/[email protected]_s /protect_s ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check
# vold-managed volumes
/devices/platform/mtk-msdc.0/mmc_host/mmc0 auto auto defaults voldmanaged=sdcard0:8
/devices/platform/mtk-msdc.1/mmc_host/mmc1 auto auto defaults voldmanaged=sdcard1:auto
/devices/platform/mt_usb/sda/sda1 auto auto defaults voldmanaged=usbotg:auto
/dev/bootimg /boot emmc defaults defaults
/dev/nvram /nvram emmc defaults defaults
/dev/recovery /recovery emmc defaults defaults
/dev/uboot /uboot emmc defaults defaults
/dev/misc /misc emmc defaults defaults

ولی بقیه در recovery.fstab یکی می باشند اگر تغییر دیگری هست به نسبت موبایل خودتان باید خودتان پیدایش کنید در زیر یک نمونه مدیاتک دیگر برایتان میذاریم

# Android fstab file.
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK

#<src>          <mnt_point>        <type>       <mnt_flags and options>       <fs_mgr_flags>

/[email protected]       /system       ubifs      ro,noatime      wait
/[email protected]       /cache        ubifs      noatime,nosuid,nodev,noauto_da_alloc     wait
/[email protected]       /data         ubifs      noatime,nosuid,nodev,noauto_da_alloc     wait,encryptable=footer

# vold-managed volumes
/devices/platform/mtk-msdc.0/mmc_host/mmc0      auto     auto    defaults voldmanaged=sdcard0:8,
/devices/platform/mtk-msdc.1/mmc_host/mmc1      auto     auto    defaults voldmanaged=sdcard1:auto

/dev/mtd/mtd6      /boot             mtd         defaults                     defaults
/dev/mtd/mtd2        /nvram            mtd         defaults                     defaults
/dev/mtd/mtd7     /recovery         mtd         defaults                     defaults
/dev/mtd/mtd5        /uboot            mtd         defaults                     defaults
/dev/mtd/mtd9         /misc             mtd         defaults                     defaults

برای کسب اطلاعات بیشتر درباره پارتیشن کد زیر را برای فراخوانی مسیر دستگاهتان وارد کنید

adb shell ls /proc

و نام فایل مورد نظر خود را در آخر کد زیر وارد و آن را ببینید

adb shell cat /proc/the_name_you_see

و نام پارتیشنی که میخواهید اطلاعات مورد نیاز خودتان را بیابید بنویسید

در زیر نمونه proc list ما را ببینید

C:\Users\carliv>adb shell ls /proc
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

        1
........
98

 <- ignored
aed
asound
audio
batdrv_log
boot_mode
bootprof
buddyinfo
bus
cgroups
clkmgr
cmdline
consoles
cpu
cpu_ss
cpufreq
cpuinfo
crypto
devices
diskstats
dma-mappings
driver
dumchar_info
emifreq
emmc
execdomains
fat
fb
fgadc_log
filesystems
fm
freqhopping
fs
golden_setting
gpt_stat
gpufreq
interrupts
iomem
ioports
irq
kallsyms
kmsg
kpagecount
kpageflags
last_kmsg
lk_env
loadavg
locks
log_ts
mcdi
meminfo
misc
modules
mounts
msdc_FT
msdc_debug
msdc_help
msdc_tune
msdc_tune_flag
mt_hotplug_test
mtd
mtk_battery_cmd
mtk_mdm_txpwr
mtk_sched
mtkcooler
mtkfb_size
mtktsbattery
mtktscpu
mtktspa
mtktspmic
mtktz
mtprof
net
nt35590_hd720_dsi_vdo_truly
pagetypeinfo
partitions
pm_init
ptp
pvr
rid
sched_debug
schedstat
scsi
sd_upgrade
self
softirqs
stat
swaps
sys
sysram
sysram_flag
timer_list
tty
uid_stat
uptime
version
vmallocinfo
vmstat
wdk
wmt_tm
xlog
yaffs
zoneinfo

C:\Users\carliv>

>

در قدم بعدی فایل init.{hardware}.rc را از ریکاوری باز کنید باید در آن تغییراتی بدید که بتوانید از رابط USB mass storage و sdcards استفاده کنید

import /init.recovery.${ro.hardware}.rc

on early-init
    # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
    write /sys/fs/selinux/checkreqprot 0

    # Set the security context for the init process.
    # This should occur before anything else (e.g. ueventd) is started.
    setcon u:r:init:s0

    start ueventd
    start healthd

on init
    export PATH /sbin:/system/bin
    export ANDROID_ROOT /system
    export ANDROID_DATA /data
    export EXTERNAL_STORAGE /sdcard

    symlink /system/etc /etc

    mkdir /boot
    mkdir /recovery
    mkdir /sdcard
    mkdir /internal_sd
    mkdir /external_sd
    mkdir /sd-ext
    mkdir /datadata
    mkdir /emmc
    mkdir /system
    mkdir /data
    mkdir /cache
    mount tmpfs tmpfs /tmp

    chown root shell /tmp
    chmod 0775 /tmp

    mkdir /mnt 0775 root system
    mkdir /storage 0050 root sdcard_r
    mount tmpfs tmpfs /storage mode=0050,uid=0,gid=1028

    # See storage config details at http://source.android.com/tech/storage/
    mkdir /mnt/shell 0700 shell shell

    # Directory for putting things only root should see.
    mkdir /mnt/secure 0700 root root

    # Create private mountpoint so we can MS_MOVE from staging
    mount tmpfs tmpfs /mnt/secure mode=0700,uid=0,gid=0

    # Directory for staging bindmounts
    mkdir /mnt/secure/staging 0700 root root

    # Fuse public mount points.
    mkdir /mnt/fuse 0700 root system
    mount tmpfs tmpfs /mnt/fuse mode=0775,gid=1000

on fs
    mkdir /dev/usb-ffs 0770 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000

    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct D001
    write /sys/class/android_usb/android0/f_ffs/aliases adb
    write /sys/class/android_usb/android0/functions adb
    write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
    write /sys/class/android_usb/android0/iProduct ${ro.product.model}
    write /sys/class/android_usb/android0/iSerial ${ro.serialno}

on boot

    ifup lo
    hostname localhost
    domainname localdomain

    class_start default

on property:sys.powerctl=*
    powerctl ${sys.powerctl}

service ueventd /sbin/ueventd
    critical
    seclabel u:r:ueventd:s0

service healthd /sbin/healthd -n
    critical
    seclabel u:r:healthd:s0

service recovery /sbin/recovery
    seclabel u:r:recovery:s0

service setup_adbd /sbin/setup_adbd
    oneshot

service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
    disabled
    socket adbd stream 660 system system
    seclabel u:r:adbd:s0

service vold /sbin/minivold
    socket vold stream 0660 root mount
    ioprio be 2
    seclabel u:r:recovery:s0

# setup_adbd will start adb once it has checked the keys
on property:service.adb.root=1
    write /sys/class/android_usb/android0/enable 0
    restart adbd
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=1
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct D003
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=0
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct D001
    write /sys/class/android_usb/android0/functions adb
    write /sys/class/android_usb/android0/enable ${service.adb.root}

بازم هنوز قسمتهای کم دارد و ممکن است که دو قسمت sdcards را نخواند،این کدها را در فایل init.recovery.{hardware}.rc در مسیر recovery/root هم می توانید قرار بدهید. در ذهن داشته باشید این برای سیستم اندرویدfstab می باشد و برای ریکاوری کاملا متفاوتر می باشد برای نمونه به کدهای زیر نگاهی بندازید

1. noemulated

on early-init
    # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
    write /sys/fs/selinux/checkreqprot 0

    # Set the security context for the init process.
    # This should occur before anything else (e.g. ueventd) is started.
    setcon u:r:init:s0

    start ueventd
    start healthd

on init
    export PATH /sbin:/system/bin
    export ANDROID_ROOT /system
    export ANDROID_DATA /data
    export EXTERNAL_STORAGE /storage/sdcard0
    export SECONDARY_STORAGE /storage/sdcard1

    symlink /system/etc /etc

    mkdir /boot
    mkdir /recovery
    mkdir /sdcard
    mkdir /internal_sd
    mkdir /external_sd
    mkdir /sd-ext
    mkdir /datadata
    mkdir /sdcard2
    mkdir /system
    mkdir /cache
    mkdir /data
    mount tmpfs tmpfs /tmp

    chown root shell /tmp
    chmod 0775 /tmp

    # See storage config details at http://source.android.com/tech/storage/
    mkdir /mnt 0775 root system
    mkdir /storage 0050 root sdcard_r
    mount tmpfs tmpfs /storage mode=0050,uid=0,gid=1028

    mkdir /mnt/media_rw/sdcard0 0700 media_rw media_rw
    mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw
    mkdir /storage/sdcard0 0700 root root
    mkdir /storage/sdcard1 0700 root root

    symlink /storage/sdcard0 /sdcard
    symlink /storage/sdcard0 /mnt/sdcard
    symlink /storage/sdcard1 /sdcard2
    symlink /storage/sdcard1 /mnt/sdcard2

    mkdir /mnt/shell 0700 shell shell

    # Directory for putting things only root should see.
    mkdir /mnt/secure 0700 root root

    # Create private mountpoint so we can MS_MOVE from staging
    mount tmpfs tmpfs /mnt/secure mode=0700,uid=0,gid=0

    # Directory for staging bindmounts
    mkdir /mnt/secure/staging 0700 root root

    # Fuse public mount points.
    mkdir /mnt/fuse 0700 root system
    mount tmpfs tmpfs /mnt/fuse mode=0775,gid=1000

on fs
    mkdir /dev/usb-ffs 0770 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000

    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct D003
    write /sys/class/android_usb/android0/f_ffs/aliases adb
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
    write /sys/class/android_usb/android0/iProduct ${ro.product.model}
    write /sys/class/android_usb/android0/iSerial ${ro.serialno}

on boot
	ifup lo
    hostname localhost
    domainname localdomain

    class_start default

on property:sys.powerctl=*
    powerctl ${sys.powerctl}

service ueventd /sbin/ueventd
    critical
    seclabel u:r:ueventd:s0

service healthd /sbin/healthd -n
    critical
    seclabel u:r:healthd:s0

service recovery /sbin/recovery
    seclabel u:r:recovery:s0

service setup_adbd /sbin/setup_adbd
    oneshot

service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
    disabled
    socket adbd stream 660 system system
    seclabel u:r:adbd:s0

service vold /sbin/minivold
    socket vold stream 0660 root mount
    ioprio be 2
    seclabel u:r:recovery:s0

# virtual sdcard daemon running as media_rw (1023)
service fuse_sdcard0 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard0 /storage/sdcard0
    class late_start
    disabled

# virtual sdcard daemon running as media_rw (1023)
service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1
    class late_start
    disabled

# setup_adbd will start adb once it has checked the keys
on property:service.adb.root=1
    write /sys/class/android_usb/android0/enable 0
    restart adbd
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=1
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct D003
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=0
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct D001
    write /sys/class/android_usb/android0/functions adb
    write /sys/class/android_usb/android0/enable ${service.adb.root}

2. one emulated:

on early-init
    # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
    write /sys/fs/selinux/checkreqprot 0

    # Set the security context for the init process.
    # This should occur before anything else (e.g. ueventd) is started.
    setcon u:r:init:s0

    start ueventd
    start healthd

on init
    export PATH /sbin:/system/bin
    export ANDROID_ROOT /system
    export ANDROID_DATA /data
    export EXTERNAL_STORAGE /storage/sdcard0

    symlink /system/etc /etc
    symlink /data/media/0 /storage/sdcard0

    mkdir /boot
    mkdir /recovery
    mkdir /sdcard
    mkdir /internal_sd
    mkdir /external_sd
    mkdir /sd-ext
    mkdir /datadata
    mkdir /system
    mkdir /emmc
    mkdir /cache
    mkdir /data
    mount tmpfs tmpfs /tmp

    chown root shell /tmp
    chmod 0775 /tmp

    # See storage config details at http://source.android.com/tech/storage/
    mkdir /mnt 0775 root system
    mkdir /storage 0050 root sdcard_r
    mount tmpfs tmpfs /storage mode=0050,uid=0,gid=1028

    mkdir /mnt/shell 0700 shell shell

    # Directory for putting things only root should see.
    mkdir /mnt/secure 0700 root root

    # Create private mountpoint so we can MS_MOVE from staging
    mount tmpfs tmpfs /mnt/secure mode=0700,uid=0,gid=0

    # Directory for staging bindmounts
    mkdir /mnt/secure/staging 0700 root root

    # Fuse public mount points.
    mkdir /mnt/fuse 0700 root system
    mount tmpfs tmpfs /mnt/fuse mode=0775,gid=1000

on fs
    mkdir /dev/usb-ffs 0770 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000

    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 0BB4
    write /sys/class/android_usb/android0/idProduct 0C03
    write /sys/class/android_usb/android0/f_ffs/aliases adb
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
    write /sys/class/android_usb/android0/iProduct ${ro.product.model}
    write /sys/class/android_usb/android0/iSerial ${ro.serialno}

on boot
	ifup lo
    hostname localhost
    domainname localdomain

    class_start default

on property:sys.powerctl=*
    powerctl ${sys.powerctl}

service ueventd /sbin/ueventd
    critical
    seclabel u:r:ueventd:s0

service healthd /sbin/healthd -n
    critical
    seclabel u:r:healthd:s0

service recovery /sbin/recovery
    seclabel u:r:recovery:s0

service setup_adbd /sbin/setup_adbd
    oneshot

service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
    disabled
    socket adbd stream 660 system system
    seclabel u:r:adbd:s0

service vold /sbin/minivold
    socket vold stream 0660 root mount
    ioprio be 2
    seclabel u:r:recovery:s0

# setup_adbd will start adb once it has checked the keys
on property:service.adb.root=1
    write /sys/class/android_usb/android0/enable 0
    restart adbd
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=1
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 0C03
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=0
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 0C01
    write /sys/class/android_usb/android0/functions adb
    write /sys/class/android_usb/android0/enable ${service.adb.root}

3. one emulated and one noemulated:

on early-init
    # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
    write /sys/fs/selinux/checkreqprot 0

    # Set the security context for the init process.
    # This should occur before anything else (e.g. ueventd) is started.
    setcon u:r:init:s0

    start ueventd
    start healthd

on init
    export PATH /sbin:/system/bin
    export ANDROID_ROOT /system
    export ANDROID_DATA /data
    export EXTERNAL_STORAGE /storage/sdcard0
    export SECONDARY_STORAGE /storage/sdcard1

    symlink /system/etc /etc
    symlink /data/media/0 /storage/sdcard0

    mkdir /boot
    mkdir /recovery
    mkdir /sdcard
    mkdir /internal_sd
    mkdir /external_sd
    mkdir /sd-ext
    mkdir /sdcard2
    mkdir /datadata
    mkdir /system
    mkdir /emmc
    mkdir /cache
    mkdir /data
    mount tmpfs tmpfs /tmp

    chown root shell /tmp
    chmod 0775 /tmp

    # See storage config details at http://source.android.com/tech/storage/
    mkdir /mnt 0775 root system
    mkdir /storage 0050 root sdcard_r
    mount tmpfs tmpfs /storage mode=0050,uid=0,gid=1028
    mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw  		
    mkdir /mnt/shell 0700 shell shell
    mkdir /storage/sdcard1 0700 root root
    symlink /storage/sdcard1 /mnt/sdcard2

    # Directory for putting things only root should see.
    mkdir /mnt/secure 0700 root root

    # Create private mountpoint so we can MS_MOVE from staging
    mount tmpfs tmpfs /mnt/secure mode=0700,uid=0,gid=0

    # Directory for staging bindmounts
    mkdir /mnt/secure/staging 0700 root root

    # Fuse public mount points.
    mkdir /mnt/fuse 0700 root system
    mount tmpfs tmpfs /mnt/fuse mode=0775,gid=1000

on fs
    mkdir /dev/usb-ffs 0770 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000

    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 0BB4
    write /sys/class/android_usb/android0/idProduct 0C03
    write /sys/class/android_usb/android0/f_ffs/aliases adb
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
    write /sys/class/android_usb/android0/iProduct ${ro.product.model}
    write /sys/class/android_usb/android0/iSerial ${ro.serialno}

on boot
	ifup lo
    hostname localhost
    domainname localdomain
    class_start default

on property:sys.powerctl=*
    powerctl ${sys.powerctl}

service ueventd /sbin/ueventd
    critical
    seclabel u:r:ueventd:s0

service healthd /sbin/healthd -n
    critical
    seclabel u:r:healthd:s0

service recovery /sbin/recovery
    seclabel u:r:recovery:s0

service setup_adbd /sbin/setup_adbd
    oneshot

service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
    disabled
    socket adbd stream 660 system system
    seclabel u:r:adbd:s0

service vold /sbin/minivold
    socket vold stream 0660 root mount
    ioprio be 2
    seclabel u:r:recovery:s0

# virtual sdcard daemon running as media_rw (1023)
service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1
    class late_start
    disabled

# setup_adbd will start adb once it has checked the keys
on property:service.adb.root=1
    write /sys/class/android_usb/android0/enable 0
    restart adbd
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=1
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 0C03
    write /sys/class/android_usb/android0/functions mass_storage,adb
    write /sys/class/android_usb/android0/enable 1

on property:sys.storage.ums_enabled=0
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 0C01
    write /sys/class/android_usb/android0/functions adb
    write /sys/class/android_usb/android0/enable ${service.adb.root}

همان طور که می بینید برای حافظه خارجی (/storage/sdcard1) وقتی که موجود باشد دسترسی بصورت other/world” (-w 1023) می باشد

ولی برای حافه داخلی هم یوزر هم دیگران دسترسی کامل دارند.برای داشتن این دسترسی ها در ریکاوری کدهای بالا را در init.recovery.{hardware}.rc کپی کنید در آخر باید شبیه به کد زیر باشد

on init
    export EXTERNAL_STORAGE /storage/sdcard0
    export SECONDARY_STORAGE /storage/sdcard1

    mkdir /sdcard2

    # See storage config details at http://source.android.com/tech/storage/

    mkdir /mnt/media_rw/sdcard0 0700 media_rw media_rw
    mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw
    mkdir /storage/sdcard0 0700 root root
    mkdir /storage/sdcard1 0700 root root

    symlink /storage/sdcard0 /sdcard
    symlink /storage/sdcard0 /mnt/sdcard
    symlink /storage/sdcard1 /sdcard2
    symlink /storage/sdcard1 /mnt/sdcard2

on fs

    write /sys/class/android_usb/android0/functions mass_storage,adb

on boot

# virtual sdcard daemon running as media_rw (1023)
service fuse_sdcard0 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard0 /storage/sdcard0
    class late_start
    disabled

# virtual sdcard daemon running as media_rw (1023)
service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1
    class late_start
    disabled

و در آخر دو فایل idVendor و idProduct را نیز چک می کنیم

write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct D003
    write /sys/class/android_usb/android0/f_ffs/aliases adb
    write /sys/class/android_usb/android0/functions mass_storage,adb

در شکل اولیه اینگونه بود

write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct D001
    write /sys/class/android_usb/android0/f_ffs/aliases adb
    write /sys/class/android_usb/android0/functions adb

برای استفاده از mass storage این تغییرات را دادیم، این به شما بستگی دارد ولی برای بررسی شمارها باید 18D1 و D001″, “D003 باشند در صورت نصب درایورهای گوگل باشند.

تا اینجا بخش سوم را به پایان می دهیم با ما باشید تا پایان آموزش

کپی برداری از متن بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد

آموزش ساخت ریکاوری CWMاز منبع(بخش دوم)

استاندارد

با بخش دوم آموزش در خدمتتان هستیم آموزشهای این بخش دیگر بیشتر کلی هستن و برای تمام MTK  کد جداگانه نیست
اکنون بعد از پایان بخش اول باید پوشه شاخه اصلی دستگاه ما به شکل زیر باشد

https-_drive-google

برای شروع نیاز به ساختن فایل vendorsetup.sh داریم در محتوای زیر

add_lunch_combo cm_P780-eng

یا برای راحتی کار میتوانید از یک گوشی دیگر فایل راکپی کنید و فقط نام گوشی خود را وارد کنید

در کل فایل شبیه به محتوای زیر می باشد

#
# Copyright (C) 2013 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# This file is executed by build/envsetup.sh, and can use anything
# defined in envsetup.sh.
#
# In particular, you can add lunch options with the add_lunch_combo
# function: add_lunch_combo generic-eng

add_lunch_combo cm_P780-eng

 

در مرحله بعد فایل AndroidBoard.mk را به Android.mk تغییر دهید و تغییرات زیر را اعمال کنید

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)

# برای دستگاهای منبع باز نیستن
-include vendor/lenovo/P780/AndroidBoardVendor.mk

باید دارایی کدهای زیر باشد

#
# Copyright (C) 2013 The Android Open-Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# WARNING: Everything listed here will be built on ALL platforms,
# including x86, the emulator, and the SDK.  Modules must be uniquely
# named (liblights.tuna), and must build everywhere, or limit themselves
# to only building on ARM if they include assembly. Individual makefiles
# are responsible for having their own logic, for fine-grained control.

LOCAL_PATH := $(call my-dir)

ifeq ($(TARGET_DEVICE),P780)
include $(call all-makefiles-under,$(LOCAL_PATH))
endif

فایل AndroidProducts.mk نیازی به تغییر ندارد،فایل BoardConfig.mk را هم برای آخر کارمان می گذاریم

یک پوشه به نام prebuilt درست کنید و فایل kernel را درون آن بگذارید

پوشه ای به نام recovery ایجاد و فایل recovery.fstab را درونش بگذارید

فایل device_P780.mk را باز کنید برای ادیت از برنامه خوبی استفاده کنید ما از  Geany استفاده می کنیم برای فراخوانی کرنل چون مکان آن را تغییر دادیم مسیر را از

LOCAL_PATH := device/lenovo/P780

به مسیر زیر تغییر می دهیم

LOCAL_PATH := device/lenovo/P780/prebuilt

همچنین برای قرار دادن قوانینی در default propوramdisk می توانید کدهای زیر را اضافه کنید

ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0 \
ro.allow.mock.location=1 \
persist.mtk.aee.aed=on \
ro.debuggable=1 \
persist.service.acm.enable=0 \
persist.sys.usb.config=mass_storage \
ro.bootloader.mode=download \
ro.mount.fs=EXT4 \
ro.persist.partition.support=no

و اگر فایلهای بلااستفاده goldfish را در ramdisk نمی خواهید کد زیر را هم اضافه کنید

PRODUCT_COPY_FILES_OVERRIDES += \
 root/fstab.goldfish \
root/init.goldfish.rc \
 recovery/root/fstab.goldfish

این را هم بدانید در cm11 هر فایل با init شروع شود از روت ramdisk پاک می شوند همان طور که در build/core/Makefile می بینید

@echo -e ${CL_CYN}"Modifying ramdisk contents..."${CL_RST}
$(hide) rm -f $(TARGET_RECOVERY_ROOT_OUT)/init*.rc

پس برای قرار دادن فایلهای init در ramdisk شما باید یک پوشه بنام recovery درست کنید که ما قبلا درست کردیم و در آنجا یک پوشه که مطابق recovery ramdisk باشد درست کنید مانند etc, res, sbin… و در آخر یک پوشه root و فایلها را در آنجا قرار دهیم.

خوب زمان آن است تا فایلهای را به پوشه ریکاوری انتقال دهیم، پس فایلهای init.rc و fstab  نسبت به چیپ مانند نمونه برای کوالکام init.qualcomm.rc و fstab.qualcomm و اگر مدیاتک باشد init.mt6589.rc و fstab.mt6589 و یا اسم هر چیپ که باشد. فایل fstab در مسیر recovery/root قرار می گیرد و فایلهای init در ریکاوری باقی می مانند

تا اینجا بخش دوم را تمام می کنید با ما باشید با ادامه آموزش در روزهای آینده

هرگونه کپی برداری از متن بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد

آموزش ساخت ریکاوری CWMاز منبع(بخش اول)

استاندارد

آموزشهای درباره پورت ریکاوری براتون قبلا آماده کرده بودیم ولی امروز با آموزش کامل ساخت ریکاوری از کدهای منبع در خدمتتون هستیم تا دیگر مشکلات پورت را نداشته باشید با ما همراه باشید

موارد مورد نیاز

سیستم عامل اوبنتو یا ماشین مجازی(64 بیت)

یک کامپیوتر نسبتا قدرتمند

فایل boot.img استوک گوشیتون

فایل recovery.img استوک گوشیتون

ابزار آنپک و ریپک (که از لینک زیر می توانید دانلود کنید)

 

CarlivImageKitchen-Linux_x64_v1.3

آماده سازی سیستم

برای شروع کد زیر را در ترمینال وارد کنید

sudo apt-get update

اگر از آخریم نسخه لینوکس12 استفاده می کنید برای نصب تمام منابع برای اندروید از کد  زیر استفاده کنید

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev libreadline6-dev libgl1-mesa-dri-lts-trusty:i386 libgl1-mesa-dev-lts-trusty g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop ccache gnupg python gcc g++ cpp

و کد زیر

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

بعد از آن این را هم نصب کنید

sudo apt-get install ia32-libs

اگر اوبنتو 14 استفاده می کنید از کد زیر استفاده کنید

sudo apt-get install bison g++-multilib git gperf libxml2-uti

بعد از آن

sudo apt-get install gnupg ccache lzop flex build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z1-dev libgl1-mesa-glx:i386 libgl1-mesa-dev mingw32 tofrodos python-markdown xsltproc libreadline6-dev lib32readline-gplv2-dev libncurses5-dev bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev squashfs-tools pngcrush pngquant schedtool dpkg-dev

و کد زیر

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

اگر از چیپ MTK استفاده میکنید کد زیر را به کد بالایی اضافه کنید

SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666", GROUP="plugdev", OWNER="your_username"

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c03", MODE="0666", GROUP="plugdev", OWNER="your_username"

بعد از آن SDK اندروید را دانلود و استخراج کنید

tar xzf $HOME/Downloads/android-sdk_rxx-linux.tgz

نام ورژن فایل که دانلود می کنید می باشدrxx

برای نصب جاوا ورژن 7

sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.7.0_67/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/jdk1.7.0_67/bin/javac" 1

یا کد زیر

sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.6.0_45/bin/java" 2
sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/jdk1.6.0_45/bin/javac" 2

برای قرار دادن bashrc در مسیر نصب

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

یا کد زیر برای جاوا 7

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

و کد زیر برای جاوا 6 و چیپ MTK

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

و برای جابه جایی بین این دو از کد زیر استفاده کنید

sudo update-alternatives --config java
sudo update-alternatives --config javac

برای قرار دادن جاوا در مسیر خودتان

sudo gedit ~/.bashrc

و در آخر

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

export PATH=$HOME/bin:$HOME/android-sdk/platform-tools/:$HOME/android-sdk/tools:$PATH

export USE_CCACHE

برای اطمینان از صحت نصب جاوا کد زیر را وارد کنید

java -version
which java
echo $JAVA_HOME

همگام سازی ساختار repo ریکاوری

در اینجا اول نیاز به سازگار کردن سورس سیانوژن دارید که آموزشش را در پست زیر در سایت می توانید دنبال کنید

[symple_button url=”http://www.gsm-developers.com/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b3%d8%a7%d8%b2%da%af%d8%a7%d8%b1-%da%a9%d8%b1%d8%af%d9%86-device-tree-%d8%a8%d8%b1%d8%a7%db%8c-%da%a9%d8%a7%d9%85%d9%be%d8%a7%db%8c%d9%84-%d8%b1%d8%a7%d9%85-%d8%b3/” color=”black” button_target=”_self” btnrel=”nofollow”]آموزش سازگار کردن سورس سیانوژن برای کامپایل رام[/symple_button]

 

بعد آماده شدن سورس سیانوژن برای استفاده از سورس جدید مانند سیانوژن 14 باید تغییرات زیر را در جاوا بدهید فایل build/core/main.mk را باید ویرایش کنید به صورت زیر

java_version := $(shell java -version 2>&1 | head -n 1 | grep '^java .*[ "]1\.[67][\. "$$]')
ifneq ($(shell java -version 2>&1 | grep -i openjdk),)
java_version :=
endif
ifeq ($(strip $(java_version)),)
$(info ************************************************************)
$(info You are attempting to build with an unsupported version)
$(info of java.)
$(info $(space))
$(info Your version is: $(shell java -version 2>&1 | head -n 1).)
$(info The correct version is: Java SE 1.6 or 1.7.)
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
$(info ************************************************************)
endif

# ورژن جاوا خودتان را چک کنید
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.[67][\. "$$]')
ifeq ($(strip $(javac_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of javac.)
$(info $(space))
$(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
$(info The correct version is: 1.6 or 1.7.)
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
$(info ************************************************************)
$(error stop)
endif

کد زیر را اضافه کنید

java_version_str := $(shell unset _JAVA_OPTIONS && java -version 2>&1)
javac_version_str := $(shell unset _JAVA_OPTIONS && javac -version 2>&1)

# Check for the correct version of java, should be 1.7 by
# default, and 1.6 if LEGACY_USE_JAVA6 is set.
ifeq ($(LEGACY_USE_JAVA6),)
required_version := "1.7.x"
required_javac_version := "1.7"
java_version := $(shell echo '$(java_version_str)' | grep '^java .*[ "]1\.7[\. "$$]')
javac_version := $(shell echo '$(javac_version_str)' | grep '[ "]1\.7[\. "$$]')
else # if LEGACY_USE_JAVA6
required_version := "1.6.x"
required_javac_version := "1.6"
java_version := $(shell echo '$(java_version_str)' | grep '^java .*[ "]1\.6[\. "$$]')
javac_version := $(shell echo '$(javac_version_str)' | grep '[ "]1\.6[\. "$$]')
endif # if LEGACY_USE_JAVA6

ifeq ($(strip $(java_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of java.)
$(info $(space))
$(info Your version is: $(java_version_str).)
$(info The required version is: $(required_version))
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/initializing.html)
$(info ************************************************************)
$(error stop)
endif

# Check for the current JDK.
#
# For Java 1.7, we require OpenJDK on linux and Oracle JDK on Mac OS.
# For Java 1.6, we require Oracle for all host OSes.
requires_openjdk := false
ifeq ($(LEGACY_USE_JAVA6),)
ifeq ($(HOST_OS), linux)
requires_openjdk := true
endif
endif

# Check for the current jdk
ifeq ($(requires_openjdk), true)
# The user asked for java7 openjdk, so check that the host
# java version is really openjdk
ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
$(info ************************************************************)
$(info You asked for an OpenJDK 7 build but your version is)
$(info $(java_version_str).)
$(info ************************************************************)
$(error stop)
endif # java version is not OpenJdk
else # if requires_openjdk
ifneq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
$(info ************************************************************)
$(info You are attempting to build with an unsupported JDK.)
$(info $(space))
$(info You use OpenJDK but only Sun/Oracle JDK is supported.)
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
$(info ************************************************************)
$(error stop)
endif # java version is not Sun Oracle JDK
endif # if requires_openjdk

# Check for the correct version of javac
ifeq ($(strip $(javac_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of javac.)
$(info $(space))
$(info Your version is: $(javac_version_str).)
$(info The required version is: $(required_javac_version))
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
$(info ************************************************************)
$(error stop)
endif

 

آماده سازی سورس ریکاوری برای موبایل

برای این کار از فایل mkvendor.sh استفاده می کنیم

اول از همه فایل recovery.img استوک خودتان را به پوشه رام بیس که اینجا ما از CM11 استفاده کردیم و نمونه گوشی موبایل ما Lenovo P780 می باشد انتقال دهید(فقط کافی شما نام موبایل و ورژن سیانوژن خودتان را در بین آموزشها تغییر دهید)

https-_drive-google

به فایل build.prop درون سیستم گوشی خودتان یه نگاهی به دو کد زیر بندازید

ro.product.manufacturer=LENOVO
ro.product.device=P780

پس دستور را در ترمینال مطایق با نام گوشی به شکل زیر بنویسید

./build/tools/device/mkvendor.sh lenovo P780 recovery.img

اگر با خطایی زیر رو به رو شدید

"unpackbootimg not found. Is your android build environment set up and have the host tools been built?"

از کد زیر استفاده کنید

build/envsetup.sh
make -j4 otatools

بعد از آن ما فایل آنپک بوت خودمان را در پوشه cm11 پیدا می کنیم بازم اگر خطایی دارد مشکلی ندارد فایل آماده است.بعد از آن کد زیر را در ترمینال وارد کنید

cp $HOME/CM11_folder/out/host/linux-x86/bin/unpackbootimg $HOME/bin

بعد از آن در پوشه Bin راحت فایل بوت خود را می توانید پیدا کنید برای بررسی کردن وجود فایل بوت کد زیر را وارد کنید

which unpackbootimg

https-_drive-google

اکنون کد زیر را وارد کنید

cd CM11-0

کد زیر را وارد کنید تا شاخه های مرتبط با موبایلتان ساخته شود

build/tools/device/mkvendor.sh lenovo P780 recovery.img

بعد از اتمام کار می بینید که یک پوشه جدید در مسیر device به اسم گوشی ساخته می شود

https-_drive-google

این روش برای گوشیهای با چیپ MTK سازگار نمی باشد و با اشکال زیر مواجه می شوید

https-_drive-google

برای چیپهای MTK نیاز هست که کارهای اضافه ای انجام بدهیم اول برنامه آنپ و ریپک در اول پست را دانلود و در مسیر پوشه هوم استخراج کنید فایل ریکاوری خود را به آنجا انتقال دهید و کد زیر را وارد کنید

unpack_MTK_img recovery.img

بعد برای ریپک

repack_img recovery

نام فایل را recovery بگذارید و آنرا به مسیر CM11 کپی کنید و در ترمینال تایپ کنید

725build/tools/device/mkvendor.sh lenovo P780 recovery.img7اکنون فایل  recovery.fstab باید اینگونه باشد
boot       		/boot       emmc      defaults        defaults
/dev/block/mmcblk0p2      /cache      ext4      defaults        defaults
پپ/dev/block/mmcblk0p3      /data       ext4      defaults        defaults
misc      				  /misc       emmc      defaults        defaults
recovery  				  /recovery   emmc      defaults        defaults
/dev/block/mmcblk0p4      /sdcard     vfat      defaults        defaults
/dev/block/mmcblk0p6      /system     ext4      defaults        defaults

تا اینجای کار فقط آغاز کارمان بود در بخش دوم بیشتر وارد اصل کار می شویم

هرگونه کپی برداری بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد