我即将在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的配置建议,但我认为我不应该在这里这样做)
提前致谢!!!
感谢您的回复,但不幸的是,我已经做到了。通过这样说,我的意思是,我选择了与目标内核匹配的内核源代码树(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
之后,所有这些配置,我仍然得到错误。我真的不认为我必须重新编译内核
答案 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。