Сборка ядра | на примере Motorola QUENCH XT5 / GSmart 1305



Реп: (152)
Мануал по сборке ядра на примере Motorola Quench XT5, GSmart 1305, Commtiva Z71, Orange Boston

Маленькая ремарка: так как я использую Ubuntu - cоответственно и все пункты инструкции будут написаны с учётом использования этого дистрибутива.


| Внимание! Увага! Attention! Achtung!
Статье уже больше 5 лет и я больше не интересуюсь сборкой прошивок/ядер. Убедительная просьба — не нужно задавать мне вопросы по статье в ЛС.
Спросите в этой теме, авось кто-то поможет.


Статья подразумевает, что у вас должен быть какой-никакой опыт работы в ОС GNU/Linux, потому что если у вас возникнут трудности, например, с перемещением между папками из консоли - то разбираться вам прийдется с этим самостоятельно. Если опыта нет, но очень хочется попробовать - добро пожаловать на сайт Убунтология, учитесь работать с ОС, а потом уже будем ядра собирать.

Так же - статья не затрагивает работу с программами fastboot и adb, копание в исходных кодах и работу с git - репозиториями.
Последние два - огромнейшие темы, которые я описать не в силах. Учитесь программировать, читайте документацию и всё получится. Некоторые ссылки есть в статье. А первый пункт мне просто лень описывать. :D


| Подготовка для компиляции ядра

Итак, для начала неплохо было бы произвести с системой манипуляции, описанные в пунктах "Installing the JDK" и "Installing required packages" по ссылке - ТЫЦ.

Создайте папку aosp и папку aosp/prebuilt в домашней директории, командами
cd
mkdir aosp
cd ~/aosp
mkdir prebuilt
cd prebuilt


Скачаем большой пак файлов с помощью команды
git clone git://github.com/CyanogenMod/android_prebuilt.git .

В последней команде точка и должна быть, это не опечатка.

После - откроем файл ~/.bashrc командой
gedit ~/.bashrc

и в самый-самый конец добавим такие строчки:
PATH=$PATH:~/aosp/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
export PATH

После чего нам нужно будет перезапустить консоль.
Внимание, если вы разархивировали архив не в папку "aosp" то в этой строчке нужно поменять путь к папкам на ваш.

| Подготовка к сборке ядра
В домашней директории создадим папку "kitchen", в которой мы и будем "готовить" ядра.

Вот отсюда скачаем два скрипта, unpack-bootimg.pl и repack-bootimg.pl в папку "kitchen".
Отсюда скачаем архив и распакуем его в папку "kitchen".


| Получаем исходники ядра

В целях примера - возьмём исходники из моего репозитория на GitHub. После скачивания - распакуем архив в папку "aosp/commtiva-kernel-z71".
В данном примере исходники получается нами "варварским" путём - скачиванием архива. Есть куда более удобный способ - получение через Git. Кому интересно - добро пожаловать сюда и сюда.


| Настройка ядра и компиляция

Из консоли зайдём в папку с нашим ядром
cd ~/aosp/commtiva-kernel-z71


Произведём базовую настройку ядра из шаблона, составленного заранее.
make ARCH=arm fxx_defconfig

Тут надо сделать ремарку - в ядрах от rmcc этот шаблон называется таким образом, в стоковом ядре 2.6.29 - от называется msm7627_defconfig, посему нельзя дать точных рекомендаций.

Для владельцев других девайсов - если вы используете ядро, собранное из тех исходников, что есть у вас - конфигурационный файл можно достать прямо с телефона, с помощью команды
adb pull /proc/config.gz ~/aosp/config.gz

В папке aosp у вас появится архив с файлом config. Архив распаковать, файл переименовать по шаблону вашеназвание_defconfig, например mydevice_defconfig, и положить по пути ~/aosp/путь-к-вашим-исходникам-ядра/arch/arm/configs.
И, после, для создания файла конфигурации использовать команду
make ARCH=arm mydevice_defconfig


После конфигурации можно сделать настройку ядра с помощью команды
make ARCH=arm menuconfig

Но, если что-то поламаете - я не виноват. :)

Закончив с настройкой приступаем, собственно, к компиляции
make ARCH=arm CROSS_COMPILE=arm-eabi- -j4

Параметр -j4 нужен только если у вас многоядерный процессор. Цифра 4 определяет количество ядер(потоков, в случае с Intel i3, i5, i7 процессорами). К примеру у меня - Intel i5, он двухядерный, но поддерживает два потока на каждое ядро, поэтому 2 * 2 = 4.

Если всё прошло удачно, то в папке aosp/commtiva-kernel-z71/arch/arm/boot вы найдёте скомпилированный файлик "zImage".


| Запаковка ядра в boot.img

Нам будет нужен boot.img, так как в примере я буду компилировать ядро от Cyanogen Mod - то и boot.img я взял из архива последнего nightly build.
Через консоль зайдём в эту папку, выполним
./unpack-bootimg.pl boot.img

На выходе получим папку с рамдиском, названную "boot.img-ramdisk" и ещё несколько файлов.

После, откроем файл repack-bootimg.pl текстовым редактором и строчку
system ("mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel $ARGV[0] --ramdisk ramdisk-repack.cpio.gz -o $ARGV[2]");

Заменим на строчку
system ("mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel $ARGV[0] --ramdisk ramdisk-repack.cpio.gz -o $ARGV[2] --base 0x12E00000");

ВНИМАНИЕ! Если у вас девайс отличный от G1305, XT5, Z71, Boston - то параметр --base 0x12E00000 вам не подходит, вам нужно посмотреть смещение в файле boot.img с помощью HEX-редактора, либо узнать на форумах о ваших девайсах.
UPDATE: Узнать смещение так же можно с помощью команды
cat .config | grep PHYS_OFFSET

Где .config - это ВАШ конфиг. Спасибо _Shumaher_ за подсказку.

После - берём zImage, который мы получили после компиляции ядра и копируем в эту же папку. В консоли пишем:
./repack-bootimg.pl zImage boot.img-ramdisk new-boot.img

Если сделали всё правильно - появится файлик new-boot.img, который можно прошивать на девайс, через fastboot.


| Где ещё взять исходники для z71, G1305, XT5?
1. Kernel 2.6.29 - Стоковое ядро с прошивки 2.1
2. Kernel 2.6.32.9 - Стоковое ядро с прошивки 2.2
3. Kernel 2.6.32.9 by CML
4. Kernel 2.6.32.9 by Edgar86


| Внимание! Увага! Attention! Achtung!
Статье уже больше 5 лет и я больше не интересуюсь сборкой прошивок/ядер. Убедительная просьба — не нужно задавать мне вопросы по статье в ЛС.
Спросите в этой теме, авось кто-то поможет.

Прикрепленные файлы

Прикрепленный файлz71_CML_SOURCES.tar.gz ( 94.9 МБ )


Сообщение отредактировал otro678 - 20.03.17, 13:57



Реп: (1)
Приветствую! Кто-нибудь может подсказать, какой defconfig использовать для сборки стокового ядра HTC Sensation? Обычно вроде названиеплатформы_defconfig, но pyramid_defconfig нет в исходниках.



Реп: (152)
sblblx, если есть рабочее ядро, на основе этих исходников, то можно достать конфиг из телефона. Он лежит в архиве, по пути /proc/config.gz
Добавил в инструкцию.

Сообщение отредактировал otro678 - 27.03.12, 18:48



Реп: (1)
Не совсем то, что имелось в виду. Этот путь я знаю. Но ядро у меня другое в теле -> способ не подходит. А ставить стоковую прошивку ради .config - удовольствие сомнительное... Хотелось узнать какой именно defconfig из исходников я мог-бы использовать



Реп: (152)
sblblx, тогда остаётся связь с разработчиком тех исходников, которые есть у вас. Или же можно попробовать конфигурации по имени платформы, на которой девайс построен. В случае HTC Sensation - это будет msm8260-perf_defconfig, или msm8260_defconfig.



Реп: (1)
Нет ни одного, ни другого...



Реп: (1)
В первом пункте во втором подпункте архивом всё это добро скачать не получается, поэтому нужно качать при помощи "Git". Вот есть ссылка, в которой коротко и ясно описано, как это сделать в винде http://forum.zone-game.info/showthread.php?t=3404. Только, естественно, там код другой - не:
git clone git://github.com/mangos/mangos.git

а:
git clone git://github.com/CyanogenMode/android_prebuilt.git
.



Реп: (152)
sblblx, можно попробовать любой рабочий конфиг подсунуть, после выполнить команду
make ARCH=arm oldconfig

И после - уже руками настраивать изменившиеся настройки, через menuconfig.

loven-doo,
loven-doo @ 29.03.2012, 10:25 *
git clone git://github.com/CyanogenMode/android_prebuilt.git

Буква e лишняя. :)

Сообщение отредактировал otro678 - 29.03.12, 18:42



Реп: (101)
А может ктото собрать ядро, ну тоесть вот я прошу, возьмется ли ктото? если да то сообщите пожалст, там просто один файлик отредактировать и собрать, редактирование не критичное и ошибок не вызовет...



Реп: (152)
Touch´ик, а в чём сложность сделать это самостоятельно?



Реп: (101)
sergeyotro, не выходит подготовить систему ввиду отсутсвия опыта и всяческие косяки с несовпадением ответных системных действий на пункты инструкции...



Реп: (152)
Touch´ик, в инструкции есть ссылки на базовое руководство по Ubuntu. Она прекрасно ставится на виртуальную машину, вам не нужно будет даже разбивать диск. А если что не получится по инструкции - спрашивайте, это ведь форум, он для этого и нужен. Тем более, я вполне допускаю, что мог допустить ошибки при написании инструкции.



Реп: (101)
sergeyotro, может быть както натолкнешь на решение? может быть скажешь какая система или еще чего, не выходит сделать так как описано...



Реп: (152)
Touch´ик, не могу подсказать конкретно в вашем случае. В настройках ОС, в пункте "Источники приложений" следует включить "установку софта от партнёров", или как-то так этот пункт называется. Это первое, что приходит в голову как проблема, при установке JDK.



Реп: (1)
доброго времени суток))
хочю (ну, пытаюсь) собрать ядро. :yes2: файл config.gz, который занимает 14.20 к это и есть исходник ядра? (я немножко нуб в этом плане)
если я возьму исходник ядра со стоковой прошивки, то можно будет сделать разгон и изменить напряжение? (что нужно будет для этого сделать с ядром?)
сори за нубские вопросы... :offtopic:



Реп: (152)
RAZR1, а теперь встречный вопрос - вы вообще инструкцию читали? Хотя бы поверхностно, ну.



Реп: (1)
sergeyotro, дошло на конец... всеровно есть много вопросов :scratch_one-s_head:



Реп: (152)
RAZR1, что бы "сделать разгон и изменить напряжение" нужно обладать хотя бы поверхностными навыками программирования на языке С, так же - ориентироваться в архитектуре Linux Kernel.



Реп: (891)
sergeyotro, вопрос такого рода,есть исходники ядра старого(под 2.2),а на девайсе теперь актуальное стоковое 2.6.35.7
в общем хотел узнать,правильно ли собирать с config.gz нового ядра или все таки нужен старый?
реально вчера только попробовал собрать,но в девайсе есть подвох,сырой саппорт и криворукие разрабы,сделали что то,что в прошивке 2.3.4 работает только новое ядро(пробовал бут стоковый переупаковывать)
как думаешь,можно старое завести какнить?

Сообщение отредактировал gulyuk - 04.04.12, 06:06



Реп: (152)
gulyuk @ 04.04.2012, 06:04 *
в общем хотел узнать,правильно ли собирать с config.gz нового ядра или все таки нужен старый?

Можно попробовать, но что останавливает от добывания конфига из старого ядра?

gulyuk @ 04.04.2012, 06:04 *
но в девайсе есть подвох,сырой саппорт и криворукие разрабы,сделали что то,что в прошивке 2.3.4 работает только новое ядро(пробовал бут стоковый переупаковывать)

Не путайте тёплое с мягким. Сырой саппорт и криворукие разрабы - это когда девайс перезагружается по 5 раз на дню, а это никто не хочет фиксить. Или хочет, но не может, за недостатком знаний. То, что описали вы - это абсолютно нормально, так как практически ни одно ядро, не будет корректно работать с библиотеками, написанными под другую версию ядра.

gulyuk @ 04.04.2012, 06:04 *
как думаешь,можно старое завести какнить?

И давайте, всё-таки, на "вы".


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 29.03.24, 18:31