我想为android制作一个动态加载的内核模块。 我不想安装一个linux,我只是有cygwin和android NDK。android NDK可以编译内核模块的源码吗?
回答
按照这个URL,Android开发人员建议为这个虚拟Ubuntu镜像比cygwin。
是的,可以使用NDK构建内核模块。请注意,这对于Linux系统(我被告知Linux x86_64是支持的环境)效果最好,因为交叉编译区分大小写的文件系统上的内核代码(例如Windows和Mac系统上默认出现的代码)很难,因为构建内核模块需要构建ELF操作二进制文件(modpost),这些二进制文件通常只在Linux上存在,这需要ELF头文件。 这就是说...
首先,您需要将源代码获取到设备上相同的内核,并确保配置与您的设备相同。 (否则有可能会混淆构建系统)
其次,您需要确定交叉编译器工具链在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
命令当内核是建立看到,命令如gcc
和ld
注意,如果你正在构建一个x86平台,我期望你将不得不调整这些,我只为ARM构建了模块。)
接下来,你应该编译内核。 (为此,我从我的Android设备上拉下了/proc/config.gz
,在内核源代码目录中运行zcat config.gz > .config
,然后运行make menuconfig && make
。)内核构建大师在这里可能会知道一些快捷方式,但我无法正确设置内核源代码目录用于构建模块而不进行实际构建。 (如果您的构建树中的内核与您的设备匹配,则不必实际更新内核,只需插入模块。)
最后,我使用正常流程从源代码构建内核模块。通常,内核模块将具有参数化版本,该版本将以某种方式读入内核源码树目录,然后调用版本。此时,只要内核源代码树设置正确,并且设置了ARCH
和CROSS_COMPILE
,则应该创建模块!
祝你好运。我确定每个设备都有一些差异。
- 1. 哪里可以编译新的内核模块代码
- 2. !编译内核模块
- 3. FTDI编译内核模块
- 4. Linux内核模块编译
- 5. Linux内核模块编译
- 6. Android NDK:编译HDF5库,源代码
- 7. 为Android编译C++ 11源代码NDK
- 8. Android内核模块编程
- 9. 编译我的Ubuntu 10.04内核模块时可以使用-fstack-check吗?
- 10. 无法在Android内核上编译模块:MODPOST 0模块
- 11. 关闭源码Linux内核模块?
- 12. 我们只能在内核源码树中重新编译一个内核模块吗?
- 13. 内核模块可以使用内核数据结构吗?
- 14. 我们可以使用Android NDK更改Android源代码吗?
- 15. 如何根据新的源编译内核模块
- 16. 我可以在不重新编译整个内核的情况下使用gcov作为内核模块吗?
- 17. 编译linux内核模块时出错
- 18. 如何编译Linux内核模块
- 19. 编译Linux内核模块(lincan)
- 20. 交叉编译Linux内核模块
- 21. 在Chromebook上编译内核模块
- 22. 编译错误:内核模块
- 23. 编译内核模块错误
- 24. 问题编译内核模块
- 25. 编译android内核
- 26. 为不同的内核编译内核模块
- 27. 其他内核的Linux内核模块开发编译
- 28. 用很多源文件编译外部内核模块
- 29. 有什么方法可以用android NDK编译libuv吗?
- 30. 我是否需要模块编程的内核源代码?
由于linux没有内核ABI,因此您必须将模块编译到每个单独的内核。 。 – lovespring 2011-02-05 15:26:00
我可以在固定电话的应用程序中加载LKM,以干扰系统调用。有任何想法吗? – DroidBot 2013-01-18 09:14:57