Взаимозаменяемость скомпилированных LKM

Возможно ли использовать модуль Loadable Kernel, скомпилированный для 3.0.8+ mod_unload ARMv5 (мое самодельное ядро) в ядре с версией 3.0.31-gd5a18e0 SMP preempt mod_unload ARMv7 (Android-ядро Android)?

Сам модуль содержит почти ничего, просто

// Defining __KERNEL__ and MODULE allows us to access kernel-level code not usually available to userspace programs.
#undef __KERNEL__
#define __KERNEL__

#undef MODULE
#define MODULE

// Linux Kernel/LKM headers: module.h is needed by all modules and kernel.h is needed for KERN_INFO.
#include    //included for all kernel modules
#include    //included for KERN_INFO
#include        //included for __init and __exit macros

MODULE_AUTHOR("martin");
MODULE_LICENSE("GPL");

static int __init hello_init(void)
{
    //printk(KERN_INFO "Hello world!\n");
    return 0;   //Non-zero return means that the module couldn't be loaded.
}

static void __exit hello_cleanup(void)
{
    //printk(KERN_INFO "Cleaning up module.\n");
}

module_init(hello_init);
module_exit(hello_cleanup);

Я заставляю insmod, но потом сбой ядра:

<1>[ 328.025360] Unable to handle kernel NULL pointer dereference at virtual address 00000061 <1>[ 328.025695] pgd = c1be8000 <1>[ 328.025848] [00000061] *pgd=00000000 <0>[ 328.026184] Internal error: Oops: 5 [#1] PREEMPT SMP <4>[ 328.026519] Modules linked in: airstream_interceptor(+)

я использую

CROSS_COMPILE=/home/adminuser/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
KDIR    ?= /home/adminuser/WORKING_DIRECTORY/android-3.0
ARCH=arm

как для построения ядра, так и для построения модуля. Но система на нем должна быть вставлена, использует свое собственное ядерное ядро.

Я пытаюсь построить модуль ядра, который можно использовать на нескольких телефонах Android (arm, armv5, armv7 и т. Д.), Но я хочу использовать 1 для всех (если это возможно в любом случае).

(редактировать)

ЗАКЛЮЧЕНИЕ № 1

  1. it should not be possible to compile one version for all ARM-devices:

    compile LKM for kernel 3.0.8 for ARMv5 and use it on a kernel 3.0.39 ARMv7

  2. it may (untested at the moment!) be possible, to compile on the lowest level (ARMv5) and use it in higher levels (ARMv6, ARMv7)

    compile LKM for kernel 3.0.8 for ARMv5 and use it on a kernel 3.0.8 ARMv7

  3. it may be possible to interchange the kernel-versions (maybe if simple LKM)

    compile LKM for kernel 3.0.8 for ARMv5 and use it on a kernel 3.0.39 ARMv5

Открытые вопросы на данный момент:

1.)

Я попытался (с общим ядром 3.0.8 и omap-kernel 3.0.39) построить для ARMv7, но результатом всегда является ARMv5-LKM.

Я вручную отредактировал .config, удалил строку ARMv5 и добавил ARMv7-строку (которая нигде не была в .config):

#CONFIG_CPU_32v5=y # I added the #
CONFIG_CPU_V7=y # didn't exist 
CONFIG_CPU_32v7=y # didn't exist 

но если я снова запустил «make» в источнике ядра, файл get будет автоматически отредактирован, а мой v7-config будет удален. Несколько месяцев назад я помню, что это не проблема, я просто добавил 2 строки, и это сработало.

Является ли это источником ядра или используемой toolchain?

2.)

В чем разница между, например, «omap-kernel» и «common-kernel» с учетом LKM-построения? Просто другая версия ядра (например, common-kernel имеет 3.0.53 и omap-kernel 3.0.39)? Я думаю, что я могу «игнорировать» конкретные варианты и использовать common-kernel для компиляции LKM?

Many thanks to alkalinity, auselen & Marko at the moment - you're helping me out of the mud.

3
nl ja de
Я разработал LKM, который я использую в своем приложении для Android. Для моего телефона это не проблема, но я хотел бы распространить его на других. Поэтому мне нужен этот LKM для нескольких устройств, которые я не могу контролировать.
добавлено автор Martin L., источник
Да, к сожалению, сейчас у меня нет другой возможности. Плохо я не могу ответить в ближайшие часы, потому что у моего провайдера кабеля сломанный волоконный кабель на данный момент:/:)
добавлено автор Martin L., источник
Сегодня я читал о «FUSE» и «CUSE» и успешно проверял, есть ли у меня/dev/fuse на моем телефоне. Может быть, это якорь, нужно сначала прочитать статьи :)
добавлено автор Martin L., источник
Разве вы не должны использовать ту же версию ядра.
добавлено автор auselen, источник
Было бы гораздо лучше задать другой вопрос для ваших открытых вопросов. Кстати, они действительно открыты и специфичны. Закрытие хорошее.
добавлено автор auselen, источник
Вы не можете этого сделать, если телефоны не укоренены правильно?
добавлено автор auselen, источник

2 ответы

Вы не можете использовать один и тот же двоичный драйвер с разными версиями Linux.

    

Linux не имеет двоичного интерфейса ядра и не имеет стабильного интерфейса ядра. ( источник )

  
3
добавлено
Вероятно, это возможно, что вы не можете принять , что можете. Вероятно, существуют пары версий, которые достаточно близки к тому, что конкретное подмножество функциональности будет работать, если будет предложено попробовать в любом случае.
добавлено автор Chris Stratton, источник
@ChrisStratton Я не знаю, на самом деле. Даже такая же версия может иметь различную конфигурацию, приводящую к другому интерфейсу/макету.
добавлено автор auselen, источник

Нет, это невозможно. Ядро Linux с архитектурой , а модули ARMv5 несовместимы с ARMv7. Существуют разные файлы заголовков, которые будут иметь разные наборы инструкций или сопоставления регистров или любое количество важных вариантов.

В любом случае версии ядра в этом случае тоже разные, что означает, что API-интерфейс ядра может меняться, поэтому модуль ядра не будет работать, по всей вероятности, даже если бы архитектура была одинаковой.

Вам придется перекрестно скомпилировать отдельные версии вашего модуля ядра. Это не так сложно, если у вас есть доступ ко всему дереву ядра. Изготовитель должен был опубликовать свои источники ядра (в соответствии с GPL). Если они этого не сделали, они должны вам источники.

Если вам интересно ознакомиться с особенностями загрузки модулей ядра, у IBM есть серия статей «анатомия». Ниже приведены загружаемые модули ядра . Перейдите в раздел «Сведения о загрузке модуля», чтобы понять, почему ядро ​​отказывается от вставки вашего модуля в отсутствие силовой нагрузки.

1
добавлено
Пух, это тяжелый удар для меня. Не читал нигде. Правильно ли, что я могу хотя бы использовать ядро ​​3.0.8 (android 4.0), построить SIMPLE LKM и скомпилировать его для ARMv5, ARMv7 и т. Д., И он должен «работать» в любой новой версии ядра (например, 3.0.39 , который является Jelly Bean). Или мне действительно нужно строить каждое созвездие (невозможно для Android-приложения)? Должен ли я повторно создать источник ядра для каждого случая с ARCH = armvxx или это просто необходимо для make ARCH = armvxx .. modules ?
добавлено автор Martin L., источник
Я принимаю ответ на щелочность, хотя ответ авселена, безусловно, тоже правильный. Вы все помогли мне очистить мои мысли. Большое спасибо!
добавлено автор Martin L., источник
Поэтому я очень благодарен вам! Я думаю, что не использую специальные предложения, и я видел эти варианты в 2.6-модулях. Что общего с vs.omap и т. Д. (Процессор?)?
добавлено автор Martin L., источник
Это то, о чем я думал. Вы видите мой полный тестовый код выше :( Несколько месяцев назад я создавал LKM с ARMv7, и это работало на моем телефоне ARMv7.
добавлено автор Martin L., источник
Борьба @Marko будет зависеть от сложности двоичного кода в случае различий в модели памяти. en.wikipedia.org/wiki/… , я до сих пор не думаю, что v5 против v7 - большая проблема в этом вопросе.
добавлено автор auselen, источник
ARMv7 должен иметь возможность запускать двоичные файлы ARMv5.
добавлено автор auselen, источник
@auselen это вряд ли будет так. Существует целый ряд различий между платформами ARM SoC, которые могут привести к тому, что структуры данных ядра будут по-разному выложены и существенная разница в коде, скомпилированном в ядро. Существует также вопрос инструкции SWP, которая устарела в ARMv7 и может быть или не быть исправлена ​​в ядрах ARMv7. Если вам удалось обмануть ядро, чтобы каким-то образом загрузить модуль, результат, скорее всего, будет довольно кратким.
добавлено автор marko, источник
@auselen Еще одна действительно хорошая причина, почему это сбой и сжигание - это то, что одним ядром является SMP, а другой нет. Множество кода синхронизации не компилируется ни в чем из сборки, отличной от SMP.
добавлено автор marko, источник
@auselen Binaries, да, но не модули ядра.
добавлено автор alkalinity, источник
Извините, что являюсь плохими новостями! Это зависит от того, что вы хотите сделать. Если вы не используете что-либо «специальное», например API, который изменился между версиями, тогда вы в порядке, не меняя свой код. Если что-то изменилось, вам придется сделать несколько вариантов, но эта часть не так уж плоха. Вам нужно будет добавить кучу #ifdefs, включив и обернув LINUX_VERSION_CODE вокруг частей варианта.
добавлено автор alkalinity, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru