gpt4 book ai didi

android - android NDK可以编译内核模块源码吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:01 26 4
gpt4 key购买 nike

我想为 android 制作一个动态加载的内核模块。我不想安装 linux,我只有 cygwin 和 android NDK。

最佳答案

是的,可以使用 NDK 构建内核模块。请注意,这在 Linux 系统上效果最好(我被告知 Linux x86_64 是受支持的环境),因为在区分大小写的文件系统(例如 Windows 和 Mac 系统默认提供的文件系统)上交叉编译内核代码更加困难,并且因为构建内核模块需要构建 ELF 操作二进制文件 (modpost),这需要 ELF header ,通常只存在于 Linux 上。也就是说……

首先,您需要获取设备上完全相同内核的源代码,并确保配置与您的设备相同。 (否则你可能会混淆构建系统)

其次,您需要确定交叉编译器工具链在您的 Android NDK 中的哪个位置。以下是我如何找到我的:

$ cd $NDK_HOME
$ find . | grep '\-gcc$'
./toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi-gcc
./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc

(注意,$NDK_HOME 是我安装 Android NDK 的地方)

第三,您需要将 $NDK_HOME/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin 目录(或系统上的任何位置)添加到您的 PATH环境变量。

然后需要导出两个环境变量:

export ARCH=arm 
export CROSS_COMPILE=arm-eabi-

(注意,arm-eabi-前缀和我们在find命令中看到的是一样的。构建内核时,等命令gccld 将以此为前缀。请注意,如果您正在为 x86 平台构建,我希望您必须调整这些。我只为 ARM 构建了模块。)

接下来,您应该编译内核。 (为此,我从我的 Android 设备上下载了 /proc/config.gz,在内核源目录中运行 zcat config.gz > .config,然后运行 ​​make menuconfig && make。)内核构建专家可能知道这里的一些快捷方式,但我无法正确设置内核源目录以在不进行实际构建的情况下构建模块。 (如果构建树中的内核与您的设备匹配,则无需实际更新内核,只需插入模块即可。)

最后,我使用正常过程从源代码构建内核模块。通常内核模块会有一个参数化的构建,它将以某种方式读取内核源代码树目录,然后调用构建。此时,只要正确设置了内核源代码树并设置了 ARCHCROSS_COMPILE,您的模块就应该构建了!

祝你好运。我确定每个设备都有一些差异。

关于android - android NDK可以编译内核模块源码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865469/

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