2012-04-11 101 views
0

我想为android构建一个内核模块。 我知道我使用交叉编译。在内核中,我想我可以使用一些通用的交叉编译,例如arm-none-linux-gnueabi-gcc.Is我的想法是否正确?或者任何其他交叉编译为android,u可以提示给我?还有任何关于如何在ubuntu中为交叉编译构建环境的artile?其次,无论何时编译模块,我如何将它作为模块加载到内核中? 最后,谁都解释了NDK,交叉编译和工具链之间的关系? THXandroid跨编译,ndk,工具链

+0

我想添加一些东西给这个问题,下面的链接给出了两件事NDK和NDK与工具链。这是什么区别? http://developer.android.com/tools/sdk/ndk/index.html – sandyJoshi 2013-09-19 18:27:04

回答

3

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

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

构建Linux for 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卡原料:

须藤DD如果=的/ dev/SDB BS = 1M的=的uImage寻求= 1;同步

至于NDK去,我根本没有经验。我对它的理解,它是Android Java应用程序的一个接口,用于向时间关键功能的“C”和“CPP”代码发出呼叫。我不知道的是它对JNI接口的优势,以及它与JNI接口的不同之处。

我希望你觉得这个有用且有帮助。