آموزش ساخت ریکاوری 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از منبع(بخش اول)

استاندارد

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

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

سیستم عامل اوبنتو یا ماشین مجازی(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

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

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