バージョン(android stock-kernel)の3.0.8+ mod_unload ARMv5
カーネルで(自分で作成したカーネル)用にコンパイルされたローダブルカーネルモジュールを使用することは可能ですか?3.0.31-gd5a18e0 SMP preempt mod_unload ARMv7
モジュール自体にはほとんど何も含まれていません。
// 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 <linux/module.h> // included for all kernel modules
#include <linux/kernel.h> // included for KERN_INFO
#include <linux/init.h> // 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]仮想アドレス00000061でカーネルNULLポインターの逆参照を処理できません<1>[328.025695]pgd = c1be8000 <1> [328.025848] [00000061] * pgd = 00000000 <0> [328.026184]内部エラー:おっと: 5 [#1] PREEMPT SMP <4> [328.026519]リンクされているモジュール: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
すべてのARMデバイスに対して1つのバージョンをコンパイルできないようにする必要があります。
compile LKM for kernel 3.0.8 for ARMv5 and use it on a kernel 3.0.39 ARMv7
最も低いレベル(ARMv5)でコンパイルし、より高いレベル(ARMv6、ARMv7)で使用することが可能である可能性があります(現時点ではテストされていません!)。
compile LKM for kernel 3.0.8 for ARMv5 and use it on a kernel 3.0.8 ARMv7
カーネルバージョンを交換できる可能性があります(おそらく単純なLKMの場合)
compile LKM for kernel 3.0.8 for ARMv5 and use it on a kernel 3.0.39 ARMv5
現時点で未解決の質問:
1.)
(common-kernel3.0.8およびomap-kernel3.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」を再実行すると、ファイルは自動的に編集され、v7-configが削除されます。数ヶ月前、これは問題なかったのを覚えています。2行追加しただけでうまくいきました。
これはカーネルソースのものですか、それとも使用されているツールチェーンですか?
2.)
LKM構築の観点から、たとえば「omap-kernel」と「common-kernel」の違いは何ですか?他のカーネルバージョン(たとえば、common-kernelには3.0.53とomap-kernel 3.0.39があります)?特定のバリアントを「無視」して、LKMコンパイルに共通カーネルを使用できると思いますか?
現時点では、アルカリ性、auselen、Markoに感謝します。あなたは、泥の中から私を助けてくれます。