0

我想为android构建一个内核模块。而且我知道我使用交叉编译。在内核内部,我想我可以使用一些通用的交叉编译,例如 arm-none-linux-gnueabi-gcc。我的想法正确吗?或者任何其他用于 android 的交叉编译,你可以提示给我?还有关于如何在 ubuntu 中为交叉编译构建环境的文章?其次,每当我编译模块时,如何将它作为模块加载到内核中?最后,有人解释一下NDK,交叉编译和工具链之间的关系吗?谢谢

4

1 回答 1

3

好吧,这是一个很大的问题,但我至少会尝试回答我所知道的。我相信特定的硬件制造商将拥有一个包含一整套工作软件的 Android“捆绑包”。这将包括工具链、Linux 内核源代码、u-boot 引导程序和整个 Android 系统。就我而言,飞思卡尔为他们提供的特定处理器和评估板提供了 Android 捆绑包。

就术语而言,“交叉编译器”将包含在“工具链”中。术语“工具链”涵盖了整个交叉编译器、交叉库等。每个工具链都是为主机(即 Linux、cygwin 等)和目标处理器(arm、mips、PowerPC 等)构建的。

为 Android 构建 Linux 与构建 Linux 并没有什么不同。建议使用与构建 Android 系统其余部分相同的工具链来构建 Linux。要构建 Linux,请设置环境变量“ARCH=arm”和“CROSS_COMPILE=arm-none-linux-gnueabi-”(或您正在使用的实际交叉编译器的前缀)。注意结尾的“-”在交叉编译前缀中很重要。

以下链接介绍了如何设置开发环境。

安卓开发环境搭建。

注意,Ubuntu 10.04 到 11.04 运行良好。建议保持在这些版本之一内。

将 Linux 内核放到目标上完全取决于目标。对于我正在使用的飞思卡尔,它希望在 SD 卡上的偏移 0x800 块处找到 Linux 内核(SD 卡上的每个块为 512 字节)。我使用以下内容写入 SD 卡原始数据:

sudo dd if=uImage of=/dev/sdb bs=1M seek=1; 同步

就NDK而言,我根本没有经验。我对它的理解是,它是 Android Java 应用程序调用“C”和“CPP”代码以实现计时关键功能的接口。我不知道的是它相对于 JNI 接口的优势,以及它与 JNI 接口的不同之处。

我希望你觉得这很有用和有帮助。

于 2012-04-11T14:03:20.067 回答