为ARM编译Kernel-aodv时出错

时间:2014-08-05 17:10:46

标签: c linux-kernel arm cross-compiling openembedded

我即将在ARM主板SabreLite上实施AODV,并且我遇到了一些问题。

所以,我使用的是最新版本的AODV(sourceforge.net/projects/aodvuu/)。我按照README文件中的说明进行操作,但最后,我收到错误:

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

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

在教程(自述文件)的第6步,我没有编译内核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    

我的一些env变量如下所示:

ARCH=arm

CROSS_COMPILE=arm-oe-linux-gnueabi-          

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

RANLIB=arm-oe-linux-gnueabi-ranlib

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

1 个答案:

答案 0 :(得分: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之后的内核进行构建需要writing a new makefile