Сборка модулей ядра для android

Сборка модулей ядра для android

Этот материал не претендует на абсолютную истину, может быть, что-то можно сделать проще и быстрее. Автор как знает, так и делает. Кроме того он не является большим экспертом в области nix-систем. Всё, что написано ниже, найдено на просторах интернета, в большинстве своём на не русскоязычных форумах, систематизировано и изложено на родном для автора языке — русском.

Коллеги, не задавайте мне вопросы по данной теме в личку, уже несколько лет как я забросил Android и не интересуюсь развитием ядер, как впрочем и самого Android-a.

Сообщение отредактировал PaWill — 08.03.16, 14:54

Часть 1. Необходимые инструменты и исходники

Для компиляции ядра нам потребуется nix-подобная операционная система. Я использовал Ubuntu 10.04 LTS — Long-term support 32-bit, которую установил на виртуальную машину VMware Workstation. Где всё это добро скачать/купить, как установить мы здесь обсуждать не будем. Если вы это не смогли сделать самостоятельно или с помощью гугла, то читать эту статью для вас ещё рано (или уже поздно). 🙂
И так, у нас всё установлено и работает. Теперь проверим все ли необходимые компоненты присутствуют в системе, возможно какие то пакеты придётся доустановить.
Запускаем терминал:

В терминале вводим следующую команду [1]:

Судя по последней строке у меня все пакеты на месте:

У вас, вероятней всего, не будет важного пакета — sun-java6-jdk on Ubuntu 10.04 (Lucid). Для его автоматической загрузки нужно в адреса репозитория добавить дополнительные ссылки. Введите в терминале:

После того как всё скачается и установится опять команда [1] пока не будет ошибок. Будем считать что с Ubuntu покончили.

Теперь нам потребуются собственно сами исходники ядра. Их можно найти на http://opensource.samsung.com/. В строке поиска вводим «I9000» и получаем:

Нас интересует JPX GT-I9000_OpenSource_Froyo_update2.zip (211 МБ), делаем как на скрине и жмём «Continue».

Ещё нам потребуется кросс-компилятор, которым будем собирать ядро:
http://www.codesourcery.com/sgpp/lite/arm/. nux-gnu.tar.bz2 (80 МБ)

И последнее что потребуется — это initramfs.cpio. Я выдрал его из JS8. Как это сделать расскажу как-нибудь отдельно.
JS8_initramfs.tar ( 2.64 МБ )

Пока всё, продолжение следует.

Сообщение отредактировал PaWill — 19.03.11, 19:38

Часть 2. Распаковка исходников

Всё что вы скачали будет находится в каталоге /home/имя_пользователя/Загрузки. У меня этот путь выглядит как:

Источник

Блог инженера

Заметки о Linux, системном администрировании, программировании, электронике и не только

Поиск по блогу

пятница, 24 августа 2012 г.

Сборка недостающих модулей ядра для платформы Android

Давненько мне хотелось попробовать себя в сборке модулей ядра для моего телефона на базе Android. Вчера мне потребовался OpenVPN, но для его работы нужен модуль tun/tap, который отсутствует в моей прошивке. Поискав по маркету я нашел приложение TUN.ko Installer, которое позволяет установить модуль нужной вам версии, если такой есть в репозитории проекта. Но поскольку спать еще не хотелось, и простых решения я не искал, то было решено собрать модуль самостоятельно.

Для начала я посмотрел версию ядра, которая используется в моем телефоне.

Затем скачал из телефона конфигурацию текущего ядра.

Дольше всего пришлось искать исходники нужного мне ядра. Если кому-то нужна ссылка на архив с исходниками, то вот она.

Теперь нужно установить toolchain для компиляции под кросскомпиляции под платформу ARM. Такой нашелся на одном из сайтов проекта Linaro. Скачиваем нужный toolchain

И устанавливаем его

Для работы menuconfig я установил пакет libncurses5-dev.

Далее готовим ядро к компиляции

На этом этапе важно правильно указать значение переменной KERNELRELEASE, иначе модуль не загрузится. После окончания подготовки я включил в menuconfig нужный мне модуль («Device Drivers» / «Network device support» / «Universal TUN/TAP device driver support»)

И собрал нужный мне модуль

Собранный модуль находится в /home/andrey/SaNek011-kernel_huawei_u8500-0117a91/build/drivers/net/tun.ko. Загрузим его в телефон

Затем, получив права root, установим модуль в /system/lib/modules

Теперь пробуем загрузить модуль

Теперь порядок — можно ставить OpenVPN.

21 комментарий:

Спасибо. Но у меня мой модуль грузитса только через insmod ftdi_sio.ko После перезагрузки надо повторять ручной запуск модуля. Модуль в нужной папке с нужными правами: /system/lib/modules/ftdi_sio.ko , owner root, group root, 644. Как вылечить?

Чайниковский вопрос возник.
Ubuntu 12.10 x64

/linux-2.6.35.7$ make modules ARCH=arm CROSS_COMPILE=arm-eabi- O=build KERNELRELEASE=2.6.35.7-perf
make[1]: arm-eabi-gcc: Команда не найдена
Using /home/vitali/linux-2.6.35.7 as source for kernel
GEN /home/vitali/linux-2.6.35.7/build/Makefile
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[2]: `include/generated/mach-types.h’ не требует обновления.
CC kernel/bounds.s
/bin/sh: 1: arm-eabi-gcc: not found
make[2]: *** [kernel/bounds.s] Ошибка 127
make[1]: *** [prepare0] Ошибка 2
make: *** [sub-make] Ошибка 2

Путь проверил. Даже поставил /home/vitali/android-toolchain-eabi/bin в начало
arm-eabi-gcc на месте
android-toolchain-eabi переустанавливал

Возможно у вас 32-битный тулчейн и он просто не запускается в 64-битной системе. Попробуйте запустить arm-eabi-gcc в терминале.

Вы правы.
Поставил Ubuntu 32-бит
Заработало.

Большое спасибо!
Замечательная статья.

Пытаюсь скомпилировать модуль для тачскрина FT5406 (FocalTech FT5406EE8). Я абсолютный новичок в этом деле.

Имеются проблемы:
— Нет хорошего исходника.
— Вылезает куча разных ошибок (типа ISO90 запрещает смешивать данные с кодом и т.п.)

С горем пополам поправил код — получил готовый модуль, закинул в планшет. Естественно, он не работает.

Подскажите пожалуйста где почитать, так чтобы быстро овладеть основными понятиями.

PS
Собственно у меня есть единственный рабочий модуль(нет исходника), который подошёл к моему планшету, но он не для моего разрешения. Надо 800×480, а есть для 480×320 -работает примерно только левая верхняя четверть тачскрина.

Была мысль: скомпилировать несколько (путь нерабочих) модулей под разное разрешение, сравнить их. А потом по аналогии поправить готовый модуль в HEX-редакторе.

Не получилось — с моим исходником генерятся одинаковые модули (нужен другой исходник).

К сожалению опыта по правке модулей у меня нет.

Подскажите пожалуйста, для компиляции модуля (только) подойдет любое ядро, например с kernel.org, при условии совпадении версии и наличии конфигурационного файла ядра?

Почти наверняка не подойдет. У меня с ядром от kernel.org модуль собирался, но не грузился. Или грузился и вешал телефон.

Не могли бы Вы мне подсказать, где следует поискать исходники DNS AirTab M975W (он же window n90fhd) 🙂 ?

Не подскажу, я андроидом не занимаюсь. Попробуйте спросить на профильных форумах: 4pda.ru, xda-developers.com, etc

Может подскажете, а у вас на телефоне лежит конфиг ядра? Я так и не нашёл его.

Зависит от опций сборки ядра. Мне повезло и у меня конфиг был.

Ни прибавить, ни убавить. Сразу виден талантище! Еще и статейки в инетет пишет.

я ищу возможность использовать большой сенсорный экран (Touch Monitor) с телевизионной приставкой, которая работает под андроидом 5.1
Купил Tronsmart Vega S95 с надеждой, что если аппарат малость фирменный то и поддержка сенсорного экрана будет. Испробовал с ним 2 монитора (Iiyama Pro­Li­te T2435MSC-B1 и HP S230tm) но компьютер не реагирует на сенсорный экран.
На YouTube я видел несколько фильмов с демонстрацией работы всяких андроидных приставок с сенсорными экранами. То есть в принципе проблема решаема.
Представитель фирмы Iiyama мне сообщил, что ихним мониторам нужен стандартный драйвер «HID Touch».
Мой вопрос: как проверить в Андроиде, есть ли в нём драйвер «HID Touch» и если нет его, то как его добавить?

Для начала я бы подключил такой монитор к linux и посмотрел заработает или нет. Если работает, то смотреть какие модули использованы. В jessie на предмет hid touch есть только это:

$ find /lib/modules/`uname -r`/ -name ‘*hid*touch*’
/lib/modules/3.16.0-4-686-pae/kernel/drivers/hid/hid-keytouch.ko
/lib/modules/3.16.0-4-686-pae/kernel/drivers/hid/hid-multitouch.ko

Чтобы собрать модуль ядра в android нужно иметь исходники именно того ядра, которое использует android и его конфиг. Стоит сходить на xda-developers.com или на forum.4pda.ru — возможно там помогут.

Несколько попутный вопрос. Будет ли работать собранный модуль, точнее комплект модулей, которые собираются вместе с ядром, если я закину ядро, то есть подменю в ядре bzImage, прошью его, а потом путём закину модули на флешку и при помощи rootexplorer перетащу их с заменой на старые? У меня например на работают так. Причина того, что так не делается или возможная причина сборки ядра и модулей на x64 ubuntu, соответственно и компилятор был использован мз системы родной, а платформа аппарата на котором всё это должно работать х86. Процессор intel. ?

По вашему описанию мне не ясно ни загрузилось ли новое ядро, ни какую ошибку выдает при попытке загрузить модули.

Новое ядро загрузилось и работает. При попытке установить модуль любой выдавал это: required key not available
Решил эту проблему путём изменения конфигурации в конфиге девайса и в головном makefile. Изменил CONFIG_MODULE_SIG_ALL на CONFIG_MODULE_SIG, а остальным проверкам, CONFIG_MODULE_SIG_FORCE и алгоритмам SHA-512 поставил is not set. Это решило проблему подписей раз и на всегда. Но осталась другая проблема. Драйвер гироскопа не работает. Да я даже и не знаю, куда его ставить и откуда брать. Предполагаю, что он основан на микросхеме mpu3050, но как собрать теперь не пойму. Кстати мне устанавливать даже не пришлось все модули от стокового ядра, они сами встали. Подкидывать новособранные не пришлось. Собирал ядро из исходников с офсайта производителя. Может кому пригодится, как решить проблему с ответом required key not available. Правда это касается лишь для пересобранного ядра. В остальных случаях нужно сначала стирать подпись модуля из ядра.
Andrey Tataranovich, не знаете, что можно придумать с гироскопом. Я просто не догадываюсь даже откуда начать копать. В интернете не нашёл ответа по этому вопросу.

Источник

Строим Android x86

Установка окружения для сборки

Для сборки Android потребуется 64 битная версия Linux. Еще один важный момент: обратите внимание на версию GCC, которая установлена на системе. Google поддерживает версию GCC 4.4 и выше. Так же на системе должна быть установлена реализация Java от Oracle.
Установка дополнительных зависимостей для Ubuntu 12.04:

Установите символьную ссылку для устранения конфликта имен:

Загрузка дерева исходных кодов

Установка Repo

Repo — утилита управления репозиториями, упрощающая работу с Git для Android. Более подробную информацию можно прочесть здесь (http://source.android.com/source/version-control.html)
Для установки, инициализации и настройки Repo выполните следующие шаги:
• Убедитесь, что у вас есть директория bin в вашем домашнем каталоге и она прописана в PATH:

• Загрузите Repo скрипт и выставите права на выполнение:

Инициализация Repo клиента

После установки Repo, настройте доступ к репозиториям исходных кодов Android:
• Создайте пустую директорию для исходных файлов и перейдите в нее. Например, это может выглядеть так:

• Запустите скрипт repo init, чтобы обновить версию самого Repo.

Эта команда подключит ветку master из дерева исходных кодов Android. Вы можете указать любую другую, используя ключ -b:

Для просмотра всех доступных веток введите команду:

Нас интересуют наиболее последние версии Android от Google:

  • Jelly Bean: remotes/origin/android-4.1.1_r6
  • Ice Cream Sandwich: remotes/origin/android-4.0.4_r2.1

Можно выбрать любую на ваш вкус, дальнейшие шаги не будут отличаться. Для демонстрации процесса сборки под VirtualBox возьмем версию Jelly Bean (JB).
В случае успешной инициализации вы увидите сообщение о том, что Repo инициализирован в вашей директории и в ней появится папка .repo

Загрузка файлов

Чтобы загрузить исходные файлы из репозитория в вашу рабочую директорию выполните команду:

Начальная синхронизация может занять больше часа времени.

Сборка ядра

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

Воспользуемся заранее подготовленной версией ядра от Intel:

Перейдем в директорию ядра:

Теперь у нас есть исходники ядра. Нужно модифицировать конфигурационный файл и пересобрать. Чтобы сократить время на полную настройку ядра, воспользуемся конфигурационным файлом, который подготовили для на разработчики. Важный момент — не забывайте указать архитектуру для которой происходит сборка ядра, в нашем случае это x86.

Через несколько секунд загрузится графическое меню настройки ядра. Стрелками «вверх», «вниз» вы можете передвигаться по пунктам меню, «Enter» чтобы зайти в подменю. Все точно так же как с обычным ядром Linux.

Чтобы включить поддержку мыши:
• Зайдите в «Device Drivers»
• Выберите «Input device Support»
• Отметьте «Mice»
Вы можете зайти в подменю «Mice» и посмотреть дополнительные настройки драйверов.
Затем выйдите из меню конфигурации ядра. Это можно сделать с помощью нескольких нажатий на «Esc». Не забудьте сохранить настройки, когда меню конфигурации предложит это сделать.
Сделав необходимые настройки ядра, соберем его. Это не займет много времени, особенно если вы используете многоядерную машину — можете указать опцию команды make: -j N, где N — число ядер (например, для написания статьи использовалась make -j 32).

При успешной компиляции вы увидите сообщение:

Путь до нового ядра указан в последней строке.

Подмена ядра

Путь к ядру, которое будет использовано в сборке для VirtualBox можно определить следующим образом:

Должно вывестись примерно следующее:

Скопируем bzImage по найденному пути:

Построение Android

Установим окружение для сборки:

Теперь все готово к тому, чтобы начать компиляцию исходников Android. Первым шагом необходимо указать цель для сборки:

После выполнения команды вы увидите информацию о предстоящей сборке:

Затем необходимо запустить сборку исходников командой make. Хорошим тоном считается сохранять лог сборки, это можно сделать с помощью утилиты tee.

Процесс сборки может занять значительное время, конкретные цифры зависят от мощности центрального процессора и объема оперативной памяти машины. На системе, которая использовалась для подготовки статьи это заняло около часа. Рекомендуемое число потоков для сборки можно определить из расчета 2GB оперативной памяти на поток.
При успешной компиляции, последняя строка вывода будет содержать путь и размер образа:

Далее необходимо собрать загрузочный образ для VirtualBox:

Если сборка прошла успешно, в консоли должна появиться запись:

Настройка VirtualBox

Эмулятор Jelly Bean

Сборка эмулятора мало чем отличается от сборки версии для VirtualBox. Если у вас уже есть исходные коды, то приступайте к сборке с шага инициализации окружения. Для чистоты эксперимента, будет процесс постройки эмулятора будет изложен с самого начала. Поэтому создадим отдельную директорию для Jelly Bean Emulator и повторим уже знакомые шаги.

Загрузка исходных кодов

Выбор сборки эмулятора

В случае успеха вы увидите:

Пока идет процесс компиляции, скопируем конфигурационный файл и соберем ядро для эмулятора.

Теперь сборка эмулятора завершена.
Самый простой способ запустить его:

Например, можно запустить с только что собранным ядром, с разрешением 480×800, объемом оперативной памяти 512 мегабайт и включенным аппаратным ускорением графики.

Более подробно о возможностях и настройках эмулятора можно прочитать здесь

Источник

Читайте также:  Пикабу отключить рекламу андроид
Оцените статью