ソースからMediaTekAndroidカーネルを構築する方法



問題を排除するために楽器を試してください

多くのAndroidユーザーは、カスタマイズされたカーネルのインストールを楽しんでいます。これにより、さまざまなパフォーマンスとバッテリー寿命を向上させる調整が可能になります。ただし、必要なカーネルが見つからない場合、またはデバイスで使用できるカーネルがない場合は、独自のカーネルを作成する必要がある場合があります。このガイドでは、Mediatekデバイスのソースからカーネルを構築する方法に焦点を当てます。



このガイドは初心者向けではないことに注意してください。AndroidROMのカスタマイズ、Linux端末での作業、および私たちが行っていることについての全体的な実用的な知識を理解している人を対象としています。



要件:

  1. Linuxオペレーティングシステム
  2. いくつかの基本的なCの知識とMakefileの操作方法
  3. Android NDK

まず、Linux用の次のパッケージをダウンロードする必要があります。



  • Python
  • GNU Make
  • JDK
  • 行く

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g ++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git-core lzop ccache gnupg flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5 lib32z1 lib32bz2-1.0 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z-dev libgl1-mesa-glx:i386 libgl1-mesa-dev g ++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6 lib32readline -gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwgt 8-dev python gcc g ++ cpp gcc-4.8 g ++-4.8 && sudo ln -s / usr / lib / i386-linux-gnu / mesa / li bGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

次に、etc / udev / rules.d /51-android.rulesに移動します。

#情熱に関するadbプロトコル(Nexus One)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4e12”、MODE =” 0600”、OWNER =””
#情熱に関するfastbootプロトコル(Nexus One)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 0bb4”、ATTR {idProduct} ==” 0fff”、MODE =” 0600”、OWNER =””
#crespo / crespo4gのadbプロトコル(Nexus S)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4e22”、MODE =” 0600”、OWNER =””
#crespo / crespo4gのfastbootプロトコル(Nexus S)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4e20”、MODE =” 0600”、OWNER =””
#stingray / wingrayのadbプロトコル(Xoom)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 22b8”、ATTR {idProduct} ==” 70a9”、MODE =” 0600”、OWNER =””
#stingray / wingrayのfastbootプロトコル(Xoom)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 708c”、MODE =” 0600”、OWNER =””
#maguro / toroのadbプロトコル(Galaxy Nexus)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 04e8”、ATTR {idProduct} ==” 6860”、MODE =” 0600”、OWNER =””
#maguro / toroのfastbootプロトコル(Galaxy Nexus)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4e30”、MODE =” 0600”、OWNER =””
#パンダのadbプロトコル(PandaBoard)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 0451”、ATTR {idProduct} ==” d101”、MODE =” 0600”、OWNER =””
#パンダのadbプロトコル(PandaBoard ES)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” d002”、MODE =” 0600”、OWNER =””
#パンダのfastbootプロトコル(PandaBoard)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 0451”、ATTR {idProduct} ==” d022”、MODE =” 0600”、OWNER =””
#パンダのusbbootプロトコル(PandaBoard)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 0451”、ATTR {idProduct} ==” d00f”、MODE =” 0600”、OWNER =””
#パンダのusbbootプロトコル(PandaBoard ES)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 0451”、ATTR {idProduct} ==” d010”、MODE =” 0600”、OWNER =””
#ハタ/ティラピアのadbプロトコル(Nexus 7)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4e42”、MODE =” 0600”、OWNER =””
#ハタ/ティラピアのfastbootプロトコル(Nexus 7)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4e40”、MODE =” 0600”、OWNER =””
#マンタのadbプロトコル(Nexus 10)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4ee2”、MODE =” 0600”、OWNER =””
#マンタのfastbootプロトコル(Nexus 10)
SUBSYSTEM ==” usb”、ATTR {idVendor} ==” 18d1”、ATTR {idProduct} ==” 4ee0”、MODE =” 0600”、OWNER =””



そしてbash.rcで:

USE_CCACHE = 1をエクスポートします
ついに:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
これで、ビルド環境をセットアップする準備が整いました。ターミナルで、次のように入力します。

export TARGET_BUILD_VARIANT = user TARGET_PRODUCT = devicename MTK_ROOT_CUSTOM = ../ mediatek / custom / TARGET_KERNEL_V
これらのコマンドの機能は次のとおりです。

BUILD_VARIANT:カーネルが何のためにビルドされるかを指定します。
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT:使用するデバイス固有のファイルをLinuxに指示します。
MTK_ROOT_CUSTOM:mediatek / customフォルダーのディレクトリを指定します。このmideもカーネルソースと同じディレクトリにあることを忘れないでください。
PATH:ツールチェーンの実行可能ファイルをパスに設定します。
CROSS_COMPILE:クロスコンパイラーは、コンパイラーが実行されているプラ​​ットフォーム以外のプラットフォーム用の実行可能コードを作成できるコンパイラーです。ツールチェーンはこの機能を容易にします
ARCH = arm、ARMは、英国の会社ARM Holdingsによって開発された縮小命令セットコンピューティング(RISC)アーキテクチャに基づくコンピュータプロセッサ用の命令セットアーキテクチャのファミリです。 ARMはAndroidでも使用されています。

したがって、ターミナルに「export ARCH = arm」と入力すると、基本的にLinuxにARMアーキテクチャ用に構築していることを伝えます。

これで、カーネルの構成を開始する準備が整いました。カーネルは基本的に携帯電話のコントローラーであるため、細心の注意を払う必要があります。したがって、注意深く従ってください。


基本構成は、kernel_source / mediatek / config / devicename / autoconfig / kconfig / platformにある可能性があります。
この基本構成を使用して、SELinuxアクセス許可を有効または無効にするなど、さまざまな要件でビルドできます。基本構成を最初から作成することもできますが、実際にはお勧めしません。

それでは、Linuxターミナルに入力してみましょう。

cd kernel_source
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
menuconfigを作成します

これにより、カーネルに機能を追加できるグラフィカルインターフェイスが作成されます。たとえば、I / Oスケジュール、CPUガバナー、GPU頻度などを微調整できます。
必要な設定を微調整したら、カーネルをコンパイルする準備が整います。したがって、Linuxターミナルに入力します。
zImageを作成します

そしてそれは次のようなものを返すはずです:

arch / arm / boot / zImage Ready

読んだ3分