【问题标题】:android cross compile,ndk,toolchainandroid交叉编译,ndk,工具链
【发布时间】:2012-04-11 02:13:22
【问题描述】:
我想为 android 构建一个内核模块。
而且我知道我使用交叉编译。在内核内部,我想我可以使用一些通用的交叉编译,例如 arm-none-linux-gnueabi-gcc。我的想法正确吗?或者任何其他用于 android 的交叉编译,你可以提示给我?还有关于如何在 ubuntu 中为交叉编译构建环境的文章?
其次,每当我编译模块时,如何将它作为模块加载到内核中?
最后,有人解释一下NDK,交叉编译和工具链之间的关系吗?
谢谢
【问题讨论】:
标签:
android
android-ndk
cross-compiling
【解决方案1】:
嗯,这是一个很大的问题,但我至少会尝试回答我所知道的。我相信特定的硬件制造商将拥有一个包含一整套工作软件的 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-”(或您正在使用的实际交叉编译器的前缀)。注意结尾的“-”,它在交叉编译前缀中很重要。
以下链接介绍了如何设置开发环境。
Android Development environment set up.
注意,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 接口有何不同。
我希望你觉得这很有用。