0

我即将在 ARM 板 SabreLite 上实现 AODV,但遇到了一些问题。

因此,我使用位于此处 (sourceforge.net/projects/aodvuu/) 的最新版本的 AODV。我已经按照自述文件中给出的说明进行操作,但最后,我得到了错误:

kaodv-mod.c:22:27: 致命错误: linux/version.h: 没有这样的文件或目录#include

由于开发板使用的是 3.0.35 内核版本,所以我下载了它,我只是更改了 Makefile 中的内核目录。而且,它通常应该根据说明(http://w3.antd.nist.gov/wctg/aodv_kernel/kaodv_arm.html)工作。上面的错误表明我没有 version.h 但我检查了并且我安装了所有的 linux 头文件,所以不能这样。

在本教程的第 6 步(README 文件)中,我没有编译内核 3.0.35,因为我非常肯定它对 AODV-UU 具有适当的 netfilter 支持,因为它是内核年轻版本。(这实际上是内核 2.4 和 2.6 的配置建议,但我认为我不应该在这里这样做)

  • 有什么办法可以解决这个问题?
  • 在继续之前我真的需要编译这个内核版本(3.0.35)吗?
  • 我是否必须更改 AODV 代码,如果需要,我必须修改哪些文件?

提前致谢 !!!


感谢您的回复,但不幸的是,我已经这样做了。这么说,我的意思是,我选择了与目标内核匹配的内核源代码树(linux-imx6-boundary-imx_3.0.35_4.1.0)。我还设置了我的交叉编译器,让我的环境变量为交叉编译做好准备。这是输出。

echo $CC:

arm-oe-linux-gnueabi-gcc -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/usr/local/oecore-x86_64/sysroots/cortexa9hf-vfp-neon-oe-linux-gnueabi    

我的一些环境变量看起来像这样:

ARCH=arm

CROSS_COMPILE=arm-oe-linux-gnueabi-          

CFLAGS= -O2 -pipe -g -feliminate-unused-debug-types   

RANLIB=arm-oe-linux-gnueabi-ranlib

之后,所有这些配置,我仍然得到错误。我真的不认为我必须重新编译内核

4

1 回答 1

1

为了构建模块,您需要一个处于与目标内核匹配状态的内核源代码树,即不是未经修改的新下载的树。不要混淆额外的特定于板的补丁/驱动程序/等的存在。在供应商内核中进行配置- 要使源代码树进入正确的使用状态,您仍然需要:

  • 正确配置它:(make ARCH=arm <whatever>_defconfig和/或任何 .config 调整您的电路板需要)
  • 然后构建它:make ARCH=arm CROSS_COMPILE=<your toolchain triplet>

您需要实际构建内核,因为还有许多重要文件尚不存在,例如include/generated(创建上述 version.h 的位置)的内容,相应arch/$ARCH/include/generated的,模块版本控制的校验和,可能还有更多,这将根据选择的架构和特定配置选项,所有这些都不同。


我很遗憾没有提到问题中的关键细节,但是在下载链接的 AODV 自己尝试后,很明显:makefile 是为 2.4 构建系统设计的,它非常不同(而且我不熟悉)。让那个基于 2.6 后内核构建将需要编写一个新的 makefile

于 2014-08-05T20:14:11.563 回答