如何调用MyChecksum而不是KernelChecksum(KernelChecksum汇编编码)

我有这样的典型要求:

内核/arch/arm/lib/csumpartial.S中有一个文件,它有一个名为csumpartial()的函数,它计算16位校验和(显然是汇编代码),并且使用EXPORT符号导出该函数。

我现在使用NEON优化实现了相同的function,使用名为csumpartial.c的文件中的csumpartial.c

我有以下要求:

  1. 现在我想让我的版本函数'csumpartial'被调用的内核函数调用,而不是程序集版本。

    – 为了达到这个目的,我应该用csumpartial.C文件replacecsumpartial.S文件吗? 但是,如何取代(所有的东西都需要照顾)?

  2. 这个csumpartial.c文件应该用一个特殊的编译器标记-mfpu=neon -mfloat-abi=softfp -flax-vector-conversions -O3进行NEON优化。

    – 那么在哪里以及如何提及这个编译器标志?

简而言之,程序集版本应该被完全弃用,并且在内核被编译时,应该使用-mfpu=neon -mfloat-abi=softfp -flax-vector-conversions -O3标记来编译c版本。 当内核调用csumpartial时候,应该调用函数的c版本

早期的帮助将不胜感激。

很less的投入:

  1. Linux版本2.6.37
  2. 使用交叉编译工具交叉编译arm(cgt_a8 / arm-2009q1)
  3. 编码为ARM cortex-a8

让我知道更多的投入

注意:只有我会使用这个编辑好的内核,所以我理解这样一个replace的风险

如果您只想构建一次修改的内核, 使用命令行中所需的编译标志将csumpartial.c编译为csumpartial.o 。 之后,编译你的整个内核。 GNU make不会将.s重新编译为具有更高时间戳的.o文件。

对于一个永久的解决方案:删除csumpartial.S,创建你的csumpartial.c,把下面这行添加到/ arch / arm / lib / Makefile

 CFLAGS_csumpartial.o += -mfpu=neon -mfloat-abi=softfp -flax-vector-conversions -O3 # seems this line is not necessary $(obj)/csumpartial.o: $(obj)/csumpartial.c 

我已经用黑客解决了这个问题,下面是我做的工作:

找出了两种替代方法来做到这一点:

  1. csumpartial.S替换为arch/arm/lib/下的csumpartial.S ,因为csumpartial.c包含NEON指令,必须使用特殊编译器标志进行编译,将此行添加到Makefile:

    CFLAGS_csumpartial.o += -mfpu=neon -mfloag-abi=softfp -mflax-vector-conversions -O3

    (在某些情况下,由于编译器标志与霓虹灯标志的编译器标志相冲突,在编译期间这不应该起作用)

    我们可以通过在Makefile中使用filter-out函数来过滤出冲突的编译器标志,但是我们还会遇到另外一个问题,那就是过滤掉的标志也不会被其他文件所使用(因为我们只想排除编译器标志为csumpartial文件,所以这将是一个问题)

    所以我想出了另一种方式(2)

  2. 要非常清楚,我做了以下步骤:

    一个。 从arch/arm/lib删除csumpartial.S

    湾 从该文件夹下的Makefile中删除csumpartial.o条目

    C。 在arch/arm/lib下创建一个新文件夹neon

    d。 在这里添加csumpartial.c文件,同时创建一个Makefile并将其添加到Makefile中

    拱/臂/ LIB /氖/生成文件

    KBUILD_CFLAGS += -mfpu=neon -mfloat-abi=softfp -flax-vector-conversions -O3

    要在编译期间取消冲突的编译器标志,请使用以下几行:

    KBUILD_FLAGS := $(filter-out -compiler-flags-to-negate, $(KBUILD_FLAGS))

    lib-y := csumpartial.o

    即 到最顶层的Makefile,即arch/arm/Makefile添加这个libs-y+=arch/arm/lib/ arch/arm/lib/neon/

为我工作。