首先,一些背景信息:我正在尝试在Beagleboard-xM上为Android编写驱动程序和应用程序。
我下载了他们的Android开发工具包,安装了它,并可以成功地使用http://processors.wiki.ti.com/index.php/TI-Android-ICS-4.0.3-DevKit-3.0.0_DevelopersGuide中的说明构建其中的所有内容。
我已经成功地按照http://tldp.org/LDP/lkmpg/2.6/lkmpg.pdf中的步骤创建了自己的骨架内核模块,没有出现任何问题。我可以将.ko文件复制到Android设备中,进行insmod、rmmod等操作。
我厌倦了默认构建所给出的基本shell,并想添加busybox。我尝试按照http://omappedia.org/wiki/Android_Installing_Busybox_Command_Line_Tools中的说明进行操作,但是在标准libc头文件上遇到了编译错误。
经过大量挖掘,我确定了TI Android开发工具包中提供的预构建交叉编译器没有搜索正确的路径。
我通过创建自己的.c文件,包含#include 并尝试使用arm-eabi-gcc blah.c -o blah进行编译,并得到了相同的结果(无法找到相关的头文件)。 'arm-eabi-gcc -print-prog-name=cc1' -v给出了以下结果:
因此,有几个问题:
我下载了他们的Android开发工具包,安装了它,并可以成功地使用http://processors.wiki.ti.com/index.php/TI-Android-ICS-4.0.3-DevKit-3.0.0_DevelopersGuide中的说明构建其中的所有内容。
我已经成功地按照http://tldp.org/LDP/lkmpg/2.6/lkmpg.pdf中的步骤创建了自己的骨架内核模块,没有出现任何问题。我可以将.ko文件复制到Android设备中,进行insmod、rmmod等操作。
我厌倦了默认构建所给出的基本shell,并想添加busybox。我尝试按照http://omappedia.org/wiki/Android_Installing_Busybox_Command_Line_Tools中的说明进行操作,但是在标准libc头文件上遇到了编译错误。
经过大量挖掘,我确定了TI Android开发工具包中提供的预构建交叉编译器没有搜索正确的路径。
我通过创建自己的.c文件,包含#include 并尝试使用arm-eabi-gcc blah.c -o blah进行编译,并得到了相同的结果(无法找到相关的头文件)。 'arm-eabi-gcc -print-prog-name=cc1' -v给出了以下结果:
- ignoring nonexistent directory "/usr/local/google/home/android/cupcake_rel_root/usr/local/include"
- ignoring nonexistent directory "/usr/local/lib/gcc/arm-eabi/4.4.3/include"
- ignoring nonexistent directory "/usr/local/lib/gcc/arm-eabi/4.4.3/include-fixed"
- ignoring nonexistent directory "/usr/local/lib/../arm-eabi/include"
- ignoring nonexistent directory "/usr/local/google/home/android/cupcake_rel_root/usr/include"
因此,有几个问题:
- 其他所有东西(如Android、X-loader、U-boot、内核)是如何通过将交叉编译工具的bin文件夹放入$PATH中构建的呢?我假设它(make menuconfig?)会根据可执行文件的位置进行一些魔法般的修复包含路径,但...
- 为什么Busybox不以相似的基础设施方式工作,因为它似乎是用类似的方式构建的呢?
- 我该如何使自己能够交叉编译我的应用程序?
我认为我错过了一些步骤,并且应该在预构建的交叉编译器上进行某种安装/配置,但信息非常有限。我向您这位开源之神求助,指引我穿越这黑暗而多风的海洋。