gpt4 book ai didi

android - 已编译 LKM 的互换性

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:21 24 4
gpt4 key购买 nike

是否有可能在版本为 3.0.31- 的内核中使用为 3.0.8+ mod_unload ARMv5(我自制的内核)编译的可加载内核模块gd5a18e0 SMP 抢占 mod_unload ARMv7(android stock-kernel)?

模块本身几乎什么都没有,只是

// 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] 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. 不可能为所有 ARM 设备编译一个版本:

    为 ARMv5 内核 3.0.8 编译 LKM 并在内核 3.0.39 ARMv7 上使用它

  2. 它可能(目前未经测试!)在最低级别 (ARMv5) 上编译并在更高级别(ARMv6、ARMv7)上使用它

    为 ARMv5 内核 3.0.8 编译 LKM 并在内核 3.0.8 ARMv7 上使用它

  3. 可能可以互换内核版本(可能是简单的 LKM)

    为 ARMv5 内核 3.0.8 编译 LKM 并在内核 3.0.39 ARMv5 上使用它

目前悬而未决的问题:

1.)

我尝试(使用 common-kernel 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”,文件会自动编辑,我的 v7-config 也会被删除。几个月前,我记得这没问题,我只是添加了 2 行就可以了。

这是内核源代码还是使用的工具链?

2.)

e.g. 和 e.g. 之间有什么区别?鉴于 LKM build ,“omap 内核”和“通用内核”?只是另一个内核版本(例如,common-kernel 现在有 3.0.53 和 omap-kernel 3.0.39)?我想我可以“忽略”特定变体并使用通用内核进行 LKM 编译?

非常感谢 alkalinity、auselen 和 Marko 此刻 - 你正在帮助我摆脱困境。

最佳答案

您不能在不同版本的 Linux 上使用相同的二进制驱动程序。

Linux does not have a binary kernel interface, nor does it have a stable kernel interface. (source)

关于android - 已编译 LKM 的互换性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com