Возможно ли использовать модуль 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
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
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
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.