Модули ядра linux android

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

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

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

$ adb shell uname -r 2.6.32.9-perf

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

$ adb pull /proc/config.gz u8500-config.gz 157 KB/s (12577 bytes in 0.078s)

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

$ wget -q https://github.com/SaNek011/kernel_huawei_u8500/tarball/master -O SaNek011-kernel_huawei_u8500-0117a91.tar.gz

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

$ wget -q http://snapshots.linaro.org/android/~linaro-android/toolchain-4.7-2012.05/1/android-toolchain-eabi-linaro-4.7-2012.05-1-2012-05-18_15-49-28-linux-x86.tar.bz2
$ tar xf android-toolchain-eabi-linaro-4.7-2012.05-1-2012-05-18_15-49-28-linux-x86.tar.bz2 $ export PATH=$PATH:/home/andrey/android-toolchain-eabi/bin

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

$ sudo aptitude install -y libncurses5-dev

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

$ tar xf SaNek011-kernel_huawei_u8500-0117a91.tar.gz $ cd SaNek011-kernel_huawei_u8500-0117a91/ $ mkdir build $ gzip -dc ~/u8500-config.gz > build/.config $ make silentoldconfig prepare headers_install scripts ARCH=arm CROSS_COMPILE=arm-eabi- O=build KERNELRELEASE=2.6.32.9-perf

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

$ make menuconfig ARCH=arm CROSS_COMPILE=arm-eabi- O=build KERNELRELEASE=2.6.32.9-perf

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

$ make modules ARCH=arm CROSS_COMPILE=arm-eabi- O=build KERNELRELEASE=2.6.32.9-perf

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

$ adb push /home/andrey/SaNek011-kernel_huawei_u8500-0117a91/build/drivers/net/tun.ko /sdcard/

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

$ adb shell adb$ su adb# mount -o remount,rw -t yaffs2 /dev/block/mtdblock4 /system adb# mkdir /system/lib/modules adb# mv /sdcard/tun.ko /system/lib/modules adb# chown 0 /system/lib/modules/tun.ko adb# chgrp 0 /system/lib/modules/tun.ko adb# chmod 644 /system/lib/modules/tun.ko adb# mount -o remount,ro -t yaffs2 /dev/mtdblock4 /system

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

adb# insmod /system/lib/modules/tun.ko adb$ lsmod | grep tun tun 11051 0 - Live 0xbf000000 adb$ ls -l /dev/tun crw-r----- vpn vpn 10, 200 2012-08-24 11:16 tun

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

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

Читайте также:  Восстановить загрузку линукс минт

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

vitali@Ubuntu12:~/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 модуль собирался, но не грузился. Или грузился и вешал телефон. Удалить

Читайте также:  Команда в линукс chown

Не могли бы Вы мне подсказать, где следует поискать исходники 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. ? Ответить Удалить

Читайте также:  Linux mint начал тормозить

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

Новое ядро загрузилось и работает. При попытке установить модуль любой выдавал это: 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, не знаете, что можно придумать с гироскопом. Я просто не догадываюсь даже откуда начать копать. В интернете не нашёл ответа по этому вопросу. Удалить

Относительно модуля для гироскопа — нужно спрашивать на профильных форумах вроде xda-developers.com, 4pda.ru/forum/ и т.д. Там есть шанс найти человека, который знает ответ на ваш вопрос. Удалить

Источник

Оцените статью
Adblock
detector