понедельник, 28 января 2013 г.

Компилирование Android ядра из исходников


Для того что бы добавить в ядро поддержку ту или иную файловую систему , добавить дополнительные гувернеры , скомпилировать какой либо модуль. Но для начала вам необходимо прежде всего научиться компилировать ядро из исходников.В этой инструкции я как раз подробно и опишу о компиляции ядра Android.
Нам понадобится:
  • ARM-Eabi-Toolchain-4.4.3(Кросс-Компилятор)
  • Исходники ядра от производителя устройства(исходники ядра под каждую модель android устройства в большинсто случаях разные!)
  • Дополнительные пакеты для работы конфигуратора menuconfig
    sudo apt-get install libncurses5-dev
В этой статье я буду приводить пример компиляции ядра на официальных исходниках ядра 2.6.32.9-perf от Sony Ericsson Live With Walkman!

Cкачиваем и распаковываем ARM-Eabi-Toolchain-4.4.3 в папку ~/android
Затем скачиваем исходники ядра с сайта SONY.
После того как мы скачаем архив , то мы увидем что в архиве находятся не только исходники ядра - но в данном случае нам нужно только исходники ядра и поэтому мы копируем папку kernel из архива в папку ~/android/
В итоге у нас получается такая структура папок:
~/android/arm-eabi-4.4.3
~/android/kernel/kernel_source_code
Теперь откроем папку с исходниками ядра/arch/arm/configs/ и найдём semc_coconut_defconfig (это конфиг Live With Walkman) , скопируем его в корневую директорию исходников ядра(наша папка kernel) , и переименуем конфиг в:
.config
Убедитесь что вы правильно переименовали конфиг!
Теперь через терминал переходим в папку с исходниками ядра:
cd ~/android/kernel/
Многие используют для конфигурации конфигов текстовой конфигуратор "menuconfig" но мне больше по душе пришелся "gconfig"(gconfig графичесский конфигуратор для среды GNOME , о нём вы можете узнать подробнее самостоятельно в интернете) - но всё-таки в этой статье мы будем использовать menuconfig
make ARCH=arm CROSS_COMPILE=~/android/arm-eabi-4.4.3/bin/arm-eabi- menuconfig
В самом низу конфигуратора загружаем наш конфиг

Конфигурируем - и сохраняем!
Теперь скомпилируем ядро
 make -j4 ARCH=arm CROSS_COMPILE=~/android/arm-eabi-4.4.3/bin/arm-eabi-
После того как процесс компиляции закончится мы можем найти наше скомпилированное zImage(ядро) в ~/android/kernel/arch/arm/boot
После того как упакуем zImage в boot.img , прошьём boot.img , то в настройках увидим своё имя пользователя как хост


Примечания:
"~/" - это домашняя папка пользователя
"make -j4" - j4 это кол-во потоков , ставьте значение равное кол-ву ядер вашего пк

10 комментариев:

Unknown комментирует...

А можно поподробнее или ссылку про детальное конфигурирование ядра. Интересует сборка ядра из исходников под китайское noname устройство на которое нигде нет настроенных исходников.

Findlee комментирует...

Какой процессор у вашего noname?

Unknown комментирует...

Спецификация установленных чипов: CPU: rk2906 (GPU: Vivante GC800); Touchscreen: tf5406de (маркировка на шлейфе: XCL-G7015A-FPC3.0); Display: 800x480 (маркировка на шлейфе: 700cp5650-60 senes); RAM: elpida edj21088cse; Flash: 29f32g08cbaca;WiFi: RLT8188; G-Sensor: MMA7660FC; Audio codec: wm8960g; Camera 0.3Mp (маркировка на шлейфе: G-C03MFNZA1766-V.1); Power control: tps659102; Battery: 3,7V 2800mAh; маркировка MB: M766-MID(2906)-MB-VER2.0.

Findlee комментирует...

Для начала проверьте наличие файла /proc/config.gz , если он есть , то это несколько упростит дело.

Unknown комментирует...

такого файла нет. Однако подходит прошивка от CUBE u18gt standart только не работает тачскрин и кнопки.

Findlee комментирует...

Для тачскрина в процессорах RK производители часто делают подгружаемый модуль (module.ko) , поищите его в /system/lib/modules , или в ramdisk/lib/modules
Про исходники - Для начала попробуйте найти исходники для того устройства , от которого у вас подошла прошивка и ядро.

Unknown комментирует...

сдрасте.вот сталкнулся с проблемами:
1- файла semc_coconut_defconfig по пути ~/android/kernel/kernel_source_code/arch/arm/mach-msm/configs/ нет. так как папки configs в mach-msm нет. А есть наш файл по пути ~/android/kernel/kernel_source_code/arch/arm/configs/. почему так?
2 - при переименовании semc_coconut_defconfig в .config он исчезает,
3 - при вводе кода
make ARCH=arm CROSS_COMPILE=~/android/arm-eabi-4.4.3/bin/arm-eabi- menuconfig
в терминале выдаает ошибку
make: *** Нет правила для сборки цели `menuconfig'. Останов.
Дополнительные пакеты для работы конфигуратора menuconfig установлены. что нетак?

Findlee комментирует...
Этот комментарий был удален автором.
Findlee комментирует...

Добрый вечер.
1)Вышла опечатка , configs дожны быть в папке arm.
2)Он не исчезает , а становится скрытым файлом , что бы снова его увидеть вам нужно поставить галочку "Показать скрытые файлы" в настройках вашего Файлового Менеджера.
3)Вы точно выполняете эту команду из папки с ядром?

Unknown комментирует...

по третьему вопросу я разобрался, я сделал путь
~/android/kernel/kernel_source_code
и в kernel_source_code я закинул содержимое папки kernel. потом сделал ~/android/kernel/ и все заработало, ядро собрать получилось.
kernel_source_code - это папка или так обозвали содержимое папки kernel?