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

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

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

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

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

با دقت به فریمور گوشی خود در تنظیمات کرنل متناسب را دانلود کنید

نصب کتابخانه ها و آماده سازی محیط

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

برای این کار ترمینال را باز کنید

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

sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
mkdir android

سورس کرنلی که دانلود کردید را به پوشه اندروید کپی کنید(توسط کد آخری این پوشه درست می شود)

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

cd android
tar -xjvf Source Name

در کد بالا بجای Source Name نام سورسی که دانلود کردید را وارد کنید

آماده سازی ابزارtoolchain

برای گوشیهای سونی می توانید toolchain را دانلود کنید تا تغییرات را راحت در کرنل بدهید

برای دانلود کامل ابزار DoomLord کد زیر را وارد کنید

cd android
cd kernel
git clone git://github.com/DooMLoRD/android_prebuilt_toolchains.git toolchains

یا اگر برای اندروید 4.4.3 میسازید فقط این لینک را دانلود و در روت home استخراجش کنید

اضافه کردن قابلیت به کرنل بصورت اتوماتیک

برای اینکه بصورت اتوماتیک اینکار را بکنید از ابزار toolchain استفاده کنید

برای اجرای toolchain کدهای زیر را وارد کنید

cd android
cd kernel
ARCH=arm CROSS_COMPILE=~/arm-eabi-4.4.3/bin/arm-eabi- make Device Name
make ARCH=arm CROSS_COMPILE=~/arm-eabi-4.4.3/bin/arm-eabi- menuconfig

بجای Device Name نامی که در Source/arch/arm/configs هست بگذارید
در something_DeviceCodename_user_defconfig نوشته شده است

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

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

اضافه کردن قابلیت به کرنل بصورت دستی

اضافه کردن Governors

خود CPU یک فایل C می باشد که در سورس کرنل هر توسعه دهنده ای پیدا می شود

اگر از github نتوانستید فایل governor را از کرنل استوک خود استخراج کنید

از مسیر Kernel Source/drivers/cpufreq/cpufreq_performance.c آن را بردارید

فایل Copy cpufreq_performance.c را یکجا کپی و با یرایشگر متن بازش کنید

تمام خطها را پاک کنید و فایلهای governor را از github اضافه کنید

فایل governor C را به مسیر KernelSource/drivers/cpufreq کپی کنید

فایل Kconfig را باز کنید

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

config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!

برای BadAss

config CPU_FREQ_DEFAULT_GOV_BADASS
bool "badass"
select CPU_FREQ_GOV_BADASS
help
Use the CPUFreq governor 'BADASS' as default

endchoice را پیدا کنید

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

config CPU_FREQ_GOV_BADASS
tristate "'badass' cpufreq governor"
depends on CPU_FREQ
help
'badass' - This driver adds a dynamic cpufreq policy governor.
The governor does a periodic polling and
changes frequency based on the CPU utilization.
The support for this governor depends on CPU capability to
do fast frequency switching (i.e, very low latency frequency
transitions).

فایل Makefile را باز کنید

کدهای زیر را طبق Governor اضافه کنید

obj-$(CONFIG_CPU_FREQ_GOV_BADASS) += cpufreq_badass.o

فایل Kernel Source/include/linux.* را باز کنید

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

#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_badass)
extern struct cpufreq_governor cpufreq_gov_badass;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_badass)

اضافه کردن زمانبندی I/O

فایل I/O .c را مانند فایل Governor کپی کنید در مسیر Kernel Source/block

فایل Kconfig.iosched را باز کنید

config IOSCHED_SIO
tristate "Simple I/O scheduler"
default y
---help---
The Simple I/O scheduler is an extremely simple scheduler,
based on noop and deadline, that relies on deadlines to
ensure fairness. The algorithm does not do any sorting but
basic merging, trying to keep a minimum overhead. It is aimed
mainly for aleatory access devices (eg: flash devices).
And we will add the I/O Scheduler VR Below it like:

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

config IOSCHED_VR
tristate "V(R) I/O scheduler"
default y
---help---
Requests are chosen according to SSTF with a penalty of rev_penalty
for switching head direction.
Let's assume that we saw SIO (But in different way)

config DEFAULT_SIO

bool "sio" if IOSCHED_SIO=y

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

config DEFAULT_VR
               bool "V(R)" if IOSCHED_VR=y
default "sio" if DEFAULT_SIO
default "vr" if DEFAULT_VR

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

obj-$(CONFIG_IOSCHED_SIO) += sio-iosched.o
[obj-$(CONFIG_IOSCHED_VR) += vr-iosched.o

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

در مسیر KernelSource/arch/arm/mach-msm/acpuclock-XxXX.c دو فایل هستند

acpuclock-7×30.c

acpuclock-8×50.c

که فایلی که .c و .o می باشد باید ویرایش کنید برای اورکلاک

کامپایل

در آخر برای کامپایل

cd android
cd kernel
export ARCH=arm
export CROSS_COMPILE=~/android/kernel/arm-eabi-4.4.3/bin/arm-eabi-

برای اضافه کردن کمی ویرایش

make <your_config_name>_defconfig

به جای <your_config_name> نامی که در Source/arch/arm/configs هست را وارد کنید

make menuconfig
make -j<cpucore>

به جای <cpucore> تعداد هسته گوشی را بنویسید

make clean
make oldconfig
make -j<cpucore>

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

تمام میتونید کرنل خود را تست کنید موفق باشید

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


439 نوشته
محسن هستم 30 ساله طرفدار دنیایی متنوع اندروید و کاستوم رامها در Gsm-Developers

24 Comments

  1. فرشاد

    سلام محسن جان حالت خوبه
    میخواستم cm 14 مدل lenovo a5000
    برای huawei honor3c h30u10
    پورت کنم
    مشخصاتشون کاملا یکی هست بجز رم که مدل لنوو یک گیگه مال هواوی دو گیگه
    مدل لنوو اندروید 7.1.1 سیانوژن داره ولی هواوی من نداره میتونم این رام رو پورت کنم؟
    مبشه کرنل براش درست کرد؟
    ممنون میشم راهنمایی کنی
    داخل ویندوز میشه کاراشو انجام داد چون مک ندارم

      1. mohsen

        سلام دوست عزیز
        به غیر از مشخصاتو برای پورت ورژن نسخه اندروید هم باید یکی باشه…بخوایید کرنل سیانوژن بسازید باید رام رو کلا از منبع بسازید فقط هم روی لینوکس جوابگو هست آموزشهای توسعه رام رو باید دنبال کنید که میشه مشکلترین قسمت توسعه دهندگی هم هستن

          1. فرشاد

            سپاس فراوان
            فرمودید ساخت کرنل سیانوژن
            چون برای گوشیم سیانوژن سیزده اومده
            میتونم از کرنل اون برای سیانوژن چهارده استفاده کنم؟ یا باید کرنل تازه بسازم؟
            من با برنامه نویسی آشنایی ندارم
            امکانش هست بتونم کرنل بسازم؟

              1. mohsen

                سلام
                کرنل اندروید 6 که به 7 نمیخوره پس نمیشه کرنل سیانوژن 13 رو روی 14 استفاده کرد
                ساخت کرنل رو لینوکس با ساخت رام هستش که گفتم بهتون حداقلش باید مسلط به دستورات یونیکس باشید برای کار تا با مشکلات زیادی که پیش میاد بتونید لاقل رفع کنید بتونید این کار و کامل انجام بدید میشید یه توسعه دهنده حرفه ای رام کلا

  1. نیما

    سلام
    محسن جان
    میتونم رام سبانوژن 14.1 برای honor3c پورت کنم؟
    برای lenovo a5000 با همین مشخصات گوشی من موجود هست ولی برای گوشی من خیر
    مشخصات یکی هست اما کرنل متفاوته میشه یک کرنل براش ساخت و رام رو برای گوشی من پورت کرد؟

      1. mohsen

        سلام بله امکان داره حتی میتونید پورت کرنل رو هم تست کنید سرچ کنید آموزشش هست

  1. android phone

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

      1. mohsen

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

  1. android phone

    سلام اقا محسن یک سوال خیلی خیلی مهم
    برنامه هایی مثل viper4 یا xposed که بعد از نصب باید درایورشون نصب شه رو باید کجای رام گذاشت تا با نصب رام نصب بشن منظورم نصب کامله یعنی نیاز نباشه بعد از فلش رام درایور هاشون رو نصب کرد میخام وقتی رام نصب شد اونام کامل نصب شن

      1. mohsen

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

  1. android phone

    چطور محسن جان
    چند تا کیچن رو امتحان کردم aroma option گزینه ای نداره واسه اضافه کردن xposed

  1. Sudo

    پوشه اندروید رو با دستور mkdir ساختم توش هم یه پوشه دیگه هست به نام کرنل فایل سورس رو اکسترکت کردم ولی نمیتونم توی پوشه اندروید کپی کنم محتویاتش هم دوتا فایل kernel.tar.gz و پلتفرمه پوشه اندروید هم روش یه علامته قفله هیچی توش کپی نمیشه اون دستوری هم که گفتین زدم چند بار اسم خود فایل و کرنل و محل پوشه رو میزنم ارور میده (bzip2 :(studin
    is not a bzip2 file
    tar:child returned status 2
    tar child : sm:a720 f _mm opensource.zip : no such file or directory
    tar: error is not recorable :exiting now
    سامسونگ

      1. mohsen

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

  1. sudo

    سلام اگه خودتون گروه توی تلگرام دارین لینک بدین شاید یکی راه حلی بده لینک توی کانال خرابه

      1. mohsen

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

  1. mahnaz

    سلام باید kernel.tar.gz رو اسمشو باید بدیم یا خود فایل سورس که زیپ هست ؟؟
    راستی از این تولچین واسه سامسونگ هم میشه ؟؟

      1. mohsen

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

      1. Inanloukarim

        عزیز تول چاین در واقع کامپایلر کرنل هست و بدون اون کرنل ساخته نمیشه.و ورژن های مختلف برای معماری های مختلف داره که شما با توجه به سی پی یو باید دانلود کنید.به مدل گوشی ارتباطی نداره فقط به معماری cup مربوط میشه.مثال arm یاarm64 ,Armeabi…

  1. الیاس

    سلام خشته نباشید
    من یک گوشی اچ تی سی دارم و وقتی فایل رو از سایت اچ تی سی دانلود کردم فرمتش bz2 نیست چیکار کنم
    هیچ \یش زمینه ای در این مورد ندارم
    اگه میشه راهنمایی کنید.

      1. mohsen

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

  1. علی

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

  1. منصور

    سلام محسن جان. واقعا اموزش خوبي بود ولى من حقيقتش نتونستم انجام بدم .اول اينكه گوشى من شيائومي نوت ٤ ايكس هست ونميدونم سورسش رو از كجا بيارم. اگه زحمتى نيست اين اموزشو بصورت تصويرى انجام بديد. خيلى بهش نياز دارم. من nethunter روى گوشيم نصب كردم ولى كارت شبكه نميخونه.

      1. masoud

        سلام داداش من هم net hunter rروی redmi note 4x نصب کردم نسخه oreoتو xda هست کارت شبکه هم خیلی خوب کار میکنه فقط کرنل اصلا پایدار نیست پر از باگه گوشی دایما کرش میکنه
        من میخواستم بدونم میشه قابلیت های یک کرنل رو برداشت و به کرنل دیگه اضافه کرد ? مسلا کرنل extreme پایداره ولی خیلی هم خوب کار میکنه رو اندروید 8 ولی کرنل net hunter باگ داره ولی قابلیت اضافه کردن کارت شبکه به گوشی داره میخوام این قابلیت رو به کرنل extremeاضافه کنم امکانش هست?????

      1. منصور

        سلام مسعود جان. ايدى تلگرام بده تا باهم صحبت كنيم. يابه اين ايدي پيام بده
        @mansour19810

پاسخ دهید

فیلدهای مورد نیاز با * علامت گذاری شده اند