ВНИМАНИЕ: Всё действия, описанные в данной статье, вы будете делать на свой страх и риск. Автор не несёт никакой ответственности за повреждение вашего устройства.
Рекомендую тщательно изучить специализированный материал по вашему аппарату.
Приведённые ниже команды нужно выполнять в терминале.
I. Подготовка
1.1. Для начала нужно установить 64-разрядный Linux дистрибутив Ubuntu (для компиляции ядра я использовал Ubuntu 13.04 x64). В принципе, если у вас нормальный ПК, то можно поставить на виртуальную машину. Как установить Ubuntu в VirtualBox по версии Google.
1.2. Также нужно иметь исходный код ядра вашего устройства (например, для Nook Color). Вот несколько ссылок, по которым вы можете получить исходники:
HTC1.3. Установить Android SDK Tools
LG
SAMSUNG
SONY
1.4. Скачать NDK Linux 32-bit (x86)
1.5. Скачать Linaro инструментарий
1.6. После установки нужно создать необходимые папки в домашней директории:
mkdir -p ~/Kernel ~/Kernel_output/modules ~/NDK ~/LINAROKernel - Корневая директория исходного кода ядра вашего устройства. Его можно получить через git clone (например, если располагается на github.com) или просто распаковав скачанный архив c исходниками.
ПРИМЕР: Получения нужных файлов с GitHub.com для планшета B&N Nook Color (encore):
git clone https://github.com/CyanogenMod/android_kernel_bn_encore.gitKernel_output - Здесь будет итоговый файл ядра после компиляции (uImage).
Kernel_output/modules - А здесь будут располагаться модули ядра (*.ko) после компиляции.
NDK - Корневая директория NDK. Сюда распаковываем скаченный ранее NDK Linux 32-bit (x86).
LINARO - Корневая директория Linaro. Сюда распаковываем скаченный ранее Linaro инструментарий.
II. Компиляция ядра с помощью NDK или Linaro
2.1. Переходим в корневую папку ядра
cd Kernel2.2. Делаем экспорт системных переменных (работают только на сессию с текущим терминалом)
2.2.1. Во первых, объявим переменную, которая указывает на целевую архитектуру компиляции (ARM)
export ARCH=arm2.2.2. Во вторых, также объявим переменную, которая указывает на сами исполняемые файлы инструментария для NDK (пункт 2.2.2.1) или для Linaro (пункт 2.2.2.2).
Для заметки: Можно использовать только одну переменную CROSS_COMPILE, если вы введёте все ниже следующие команды, то последняя окажется действующей. Можно проверить командой export без параметров и посмотреть ваши переменные.
2.2.2.1. Для NDK (GCC 4.4.3, GCC 4.6.x или GCC 4.7.x соответственно)
export CROSS_COMPILE=~/NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-или
export CROSS_COMPILE=~/NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-или
export CROSS_COMPILE=~/NDK/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86/bin/arm-linux-androideabi-2.2.2.2. Для Linaro
export CROSS_COMPILE=~/LINARO/bin/arm-linux-androideabi-2.3. Чистим директорию ядра от прошлых операций и приводим в порядок
make clean && make mrproperНа некоторых 64 разрядных дистрибутивах Ubuntu необходимо установить 32 битные библиотеки, чтобы избежать ошибку "... : Command not found"
sudo apt-get install ia32-libs2.4. Получаем файл конфигурации
2.4.1. Он обычно находится в ~/Kernel/arch/arm/configs, где нужный файл будет примерно таким: *_defconfig или *.defconfig (где * - (кодовое) название вашего устройства)
2.4.1.1. Для того, чтобы получить файл конфигурации, который использовался при компиляции ядра вашего устройства, можно:
Способ 1. На самом девайсе в Terminal Emulator набрать
cp /proc/config.gz /sdcardНа microSD карте появиться архив config.gz, распаковываем его в корневую директорию исходников ядра (~/Kernel) и переименовываем файл из config в .config
Способ 2. Через ADB
adb pull /proc/config.gz .Если вы получили файл конфигураций с устройства, то переходите к пункту 2.5
gunzip config.gz
mv config .config
2.4.2. Введите следующую команду
make *_defconfig2.5. Если нужно, производим модификации файла конфигурации
make menuconfigНа некоторых дистрибутивах Ubuntu (например, 12.04) чтобы использовать "make menuconfig" необходимо установить ncurses
sudo apt-get install libncurses5 libncurses5-devЕсли требуется подгружать в ядро собственные модули, то необходимо выбрать соответсвующий пункт в меню:
[*] Enable loadable module supportПосле внесённых изменений необходимо сохранить файл конфигурации.
2.6. Компилируем ядро
make -j4 uImageили
make -j4 zImageили
make -j4 ImageВыполняем подходящую команду компиляции. В случаем компиляции uImage или zImage не cжатый образ ядра Image компилируется автоматически.
Цифра после -j означает количество ядер центрального процессора ПК (у меня 4).
uImage, zImage или просто Image - образ скомпилированного ядра.
Если в процессе компиляции uImage у вас выходит ошибка "mkimage" command not found - U-Boot images will not be built, то установите недостающий пакет:
sudo apt-get install uboot-mkimageи начните с пункта 2.3
2.7. Если необходимы модули ядра, то компилируем и их
make modules2.8) Копируем скомпилированное ядро в директорию ~/Kernel_output
cp arch/arm/boot/uImage ../Kernel_output/uImageили
cp arch/arm/boot/zImage ../Kernel_output/zImageили
cp arch/arm/boot/Image ../Kernel_output/ImageВыполняем команду соответствующую нужному скомпилированному ядру.
2.9. Если компилировали и модули, то копируем их в директорию ~/Kernel_output/modules
find . -name "*.ko" -exec cp {} ../Kernel_output/modules \;III. Установка ядра (и модулей к нему) на устройство
Для устройств с boot.img - нужно сначала собрать соответствующий вашему устройству образ boot.img, а только потом уже проводить нижеследующие операции.
Несколько ссылок для размышлений:
Инструкции по распаковке, редактированию и запаковке boot.img
Очень удобные скрипты для редактирования boot.img
Способов установки ядра (и модулей к нему) на устройство несколько, рассмотрим основные:
3.1. Простая замена файлов *.zip архив обновления ядра или прошивки для ClockworkMod Recovery (CWM)
Нужно заполучить *.zip архива обновления ядра или прошивки для CWM под ваше устройство и произвести замену файлов на новые. В корне архива может находится kernel или uImage или zImage или boot.img - нужно его удалить и взамен поместить ваши файлы с названием удалённого файла (если был kernel, то конечный файл тоже должен быть kernel). А модули поместить в директорию system\lib\modules\. Произвести инсталляцию через CWM.
3.2. Поместить скомпилированные файлы на девайс с помощью ADB и Fastboot. Более подробно можно почитать здесь.
IV. Заключение
Если вы снова захотите скомпилировать ядро, то повторите все шаги начиная с пункта 2.1
Комментариев нет
Отправить комментарий