【问题标题】:Error compiling Kernel-aodv for ARM为 ARM 编译内核 aodv 时出错
【发布时间】:2014-08-05 17:10:46
【问题描述】:

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

所以,我使用位于此处 (sourceforge.net/projects/aodvuu/) 的最新版本的 AODV。我已经按照 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)正常工作。上面的错误提示我没有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

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 感谢您的回复,但不幸的是,我已经这样做了。这么说,我的意思是,我选择了与目标内核匹配的内核源代码树(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
    • @scof007 您仍然需要配置和构建内核 - 在您这样做之前,它不知道是使用 ARM 代码还是 PowerPC 代码或其他任何东西。这没什么大不了的——交叉编译一个 ARM 内核对我来说只需要几分钟。
    • 您可以在设备上的 /proc/config.gz 中找到原始配置。制造商应该将它作为您拥有的任何二进制内核的相应源代码的一部分提供。
    • 所以,一个更新。,顺便感谢您的回复。实际上,我配置并构建了内核,但仍然出现错误。在配置和构建之后,我得到了之前修复的缺失目录,并且我还得到了其他目录,例如包含/生成。所以我在 aodv 目录中运行“make arm”来交叉编译 arm,上面的错误消失了(缺少 version.h),但我得到了其他“包含”错误(例如 asm/rwsem.h)。 config 和 build 过程生成的 asm 目录没有这样的文件。我能做些什么 ?大家已经尝试过交叉编译 aodv for arm 了吗?
    • 所以,我修复了所有包含错误。从一开始,我就没有使用正确的内核版本,所以即使在配置和构建内核之后。我还有一些文件丢失。所以,我仍然有错误,但不再包括在内。所以我认为上述问题已经解决。现在,我得到错误:/usr/local/oecore-x86_64/sysroots/cortexa9hf-vfp-neon-oe-linux-gnueabi/usr/include/linux/sysinfo.h:21:3: error: unknown type name '__kernel_ulong_t' 这是来自交叉编译树的问题。我还不知道我现在到底是怎么得到这个错误的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2014-03-26
    • 2018-02-01
    相关资源
    最近更新 更多