Làm thế nào để xây dựng MediaTek Android Kernal từ nguồn

Nhiều người dùng Android thích cài đặt các hạt nhân được tùy chỉnh, có thể cung cấp một loạt các cải tiến về hiệu suất và tuổi thọ pin. Nhưng nếu bạn không thể tìm thấy hạt nhân bạn thích, hoặc không có sẵn cho thiết bị của bạn, đôi khi bạn chỉ cần xây dựng của riêng bạn. Hướng dẫn này sẽ tập trung vào cách xây dựng hạt nhân từ nguồn cho các thiết bị Mediatek.

Xin được cảnh báo hướng dẫn này không dành cho người mới, nó dành cho những người có hiểu biết về việc tùy biến ROM Android, làm việc trong các thiết bị đầu cuối Linux và chỉ cần một chút kiến ​​thức làm việc về những gì chúng tôi đang làm.

Yêu cầu:

  1. Một hệ điều hành Linux
  2. Một số kiến ​​thức cơ bản về C và cách làm việc với Makefiles
  3. NDK của Android

Để bắt đầu, bạn sẽ cần phải tải xuống các gói sau cho Linux:

  • Python
  • GNU Make
  • JDK
  • Git

sudo apt-get cài đặt git gnupg flex bison gperf xây dựng-thiết yếu 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 xây dựng-thiết yếu zip curl zlib1g-dev zlib1g-dev: i386 libc6-dev lib32ncurses5 lib32z1 lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev: i386 libreadline6-dev: i386 lib32z-dev libgl1-mesa-glx: i386 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 libwxgtk2. 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

Bây giờ hãy truy cập vào etc / udev / rules.d / 51-android.rules:

# giao thức adb về niềm đam mê (Nexus One)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4e12 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức fastboot về niềm đam mê (Nexus One)
SUBSYSTEM == usb, ATTR {idVendor} == 0bb4 ″, ATTR {idProduct} == 0fff, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức adb trên crespo / crespo4g (Nexus S)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4e22 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức fastboot trên crespo / crespo4g (Nexus S)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4e20 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# adb protocol trên stingray / wingray (Xoom)
SUBSYSTEM == usb, ATTR {idVendor} == 22b8 ″, ATTR {idProduct} == 70a9 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# fastboot protocol trên stingray / wingray (Xoom)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 708c, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức adb trên maguro / toro (Galaxy Nexus)
SUBSYSTEM == usb, ATTR {idVendor} == 04e8 ″, ATTR {idProduct} == 6860 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức fastboot trên maguro / toro (Galaxy Nexus)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4e30 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức adb trên gấu trúc (PandaBoard)
SUBSYSTEM == usb, ATTR {idVendor} == 0451 ″, ATTR {idProduct} == d101 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức adb trên gấu trúc (PandaBoard ES)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == d002 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức fastboot trên panda (PandaBoard)
SUBSYSTEM == usb, ATTR {idVendor} == 0451 ″, ATTR {idProduct} == d022 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức usbboot trên gấu trúc (PandaBoard)
SUBSYSTEM == usb, ATTR {idVendor} == 0451 ″, ATTR {idProduct} == d00f, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức usbboot trên gấu trúc (PandaBoard ES)
SUBSYSTEM == usb, ATTR {idVendor} == 0451 ″, ATTR {idProduct} == d010 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức adb trên cá mú / cá rô phi (Nexus 7)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4e42 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức fastboot trên cá mú / cá rô phi (Nexus 7)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4e40 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức adb trên manta (Nexus 10)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4ee2 ″, MODE = 0600 ″, CHỦ SỞ HỮU =
# giao thức fastboot trên manta (Nexus 10)
SUBSYSTEM == usb, ATTR {idVendor} == 18d1 ″, ATTR {idProduct} == 4ee0 ″, MODE = 0600 ″, CHỦ SỞ HỮU =

Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây

Và trong bash.rc:

xuất khẩu USE_CCACHE = 1
Bây giờ cuối cùng:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Vì vậy, bây giờ chúng tôi đã sẵn sàng để thiết lập môi trường xây dựng. Trong terminal, gõ:

xuất TARGET_BUILD_VARIANT = người dùng TARGET_PRODUCT = devicename MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Đây là những gì các lệnh này sẽ làm:

BUILD_VARIANT: xác định kernel sẽ được xây dựng cho cái gì.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: cho Linux biết nên sử dụng các tệp cụ thể của thiết bị nào.
MTK_ROOT_CUSTOM: chỉ định thư mục của thư mục mediatek / custom. nhớ mide này nằm trong cùng thư mục với nguồn kernel.
PATH: đặt tệp thực thi chuỗi công cụ của bạn vào đường dẫn của bạn.
CROSS_COMPILE: Trình biên dịch chéo là trình biên dịch có khả năng tạo mã thực thi cho một nền tảng khác với nền tảng mà trình biên dịch đang chạy. Toolchain tạo điều kiện cho hàm này
ARCH = arm, ARM là một bộ kiến ​​trúc bộ hướng dẫn cho các bộ vi xử lý máy tính dựa trên kiến ​​trúc tính toán tập lệnh (RISC) được phát triển bởi công ty ARM Holdings của Anh. ARM cũng được sử dụng trong Android.

Vì vậy, khi chúng tôi gõ 'xuất khẩu ARCH = cánh tay' vào thiết bị đầu cuối, chúng tôi về cơ bản nói với Linux rằng chúng tôi đang xây dựng cho kiến ​​trúc ARM.

Vì vậy, bây giờ chúng tôi đã sẵn sàng để bắt đầu cấu hình hạt nhân. Bạn cần phải cực kỳ cẩn thận, bởi vì hạt nhân về cơ bản là bộ điều khiển cho điện thoại của bạn. Vì vậy, chỉ cần làm theo cùng một cách cẩn thận.


Bạn sẽ tìm thấy cấu hình cơ bản trong kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Chúng ta có thể sử dụng cấu hình cơ sở này và xây dựng nó với các yêu cầu khác nhau, ví dụ như cho phép hoặc vô hiệu hóa các quyền SELinux. Bạn luôn có thể xây dựng một cấu hình cơ sở từ đầu, nhưng tôi thực sự không khuyên bạn nên nó.

Vì vậy, bây giờ chúng ta hãy gõ vào thiết bị đầu cuối Linux:

cd kernel_source
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
làm menuconfig

Điều này sẽ tạo ra một giao diện đồ họa cho phép bạn thêm các tính năng vào hạt nhân. Ví dụ: bạn có thể tinh chỉnh Lịch biểu I / O, Thống đốc CPU, Tần suất GPU, v.v.
Khi bạn đã tinh chỉnh các thiết lập mong muốn, bạn đã sẵn sàng để biên dịch kernel. Vì vậy, gõ vào thiết bị đầu cuối Linux:
tạo zImage

Và nó sẽ trả lại một cái gì đó như:

arch / arm / boot / zImage sẵn sàng

Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây

Facebook Twitter Google Plus Pinterest