首先,一些背景知识:我正在尝试在 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 等。
我厌倦了默认构建提供的基本外壳,并认为我会添加busybox。我尝试按照http://omappedia.org/wiki/Android_Installing_Busybox_Command_Line_Tools上的说明进行操作,但在标准 libc 头文件中出现编译错误。
经过一番挖掘,我确定 TI android 开发套件中提供的预构建交叉编译器没有搜索正确的路径。
我通过创建自己的 .c 文件确认了这一点,该文件包含并尝试使用 arm-eabi-gcc blah.c -o blah进行编译, 并得到了相同的结果(无法找到有问题的头文件)
'arm-eabi-gcc -print-prog-name=cc1' -v给了我这个:
- 忽略不存在的目录“/usr/local/google/home/android/cupcake_rel_root/usr/local/include”
- 忽略不存在的目录“/usr/local/lib/gcc/arm-eabi/4.4.3/include”
- 忽略不存在的目录“/usr/local/lib/gcc/arm-eabi/4.4.3/include-fixed”
- 忽略不存在的目录“/usr/local/lib/../arm-eabi/include”
- 忽略不存在的目录“/usr/local/google/home/android/cupcake_rel_root/usr/include”
在我全新安装的 ubuntu 10.04 中,这些路径都不存在。我使用的交叉编译器位于/usr/TI-Android/prebuilt/linux-86/toolchain/arm-eabi-4.4.3/。除了运行作为 android 开发工具包的 bit .bin 文件之外,我什么也没做(这看起来更像是简单地从 .bin 文件中提取自身;我不记得它做了其他任何事情)
所以,有几个问题:
- 到底是如何通过将交叉编译工具的 bin 放入 $PATH 来构建其他所有东西(即 android、x-loader、u-boot、内核)的(就像操作文档所说的那样)。我认为它(make menuconfig?)在根据可执行文件的位置修复包含路径方面有一些魔力,但是......
- 为什么busybox的工作方式不一样,因为它似乎是用相似的基础设施构建的?
- 我该如何做才能交叉编译我自己的应用程序?
我假设我错过了一步,应该在预构建的交叉编译器上进行某种安装/配置,但信息非常少。我呼吁你们,开源之神,为我指明穿越这片黑暗和暴风雨的大海的道路。