不久前,我为ARMv7(Cortex-A5)开发了一个内核模块。这个模块工作得很好,但我需要为它添加一个功能。不幸的是,同时安装了交叉编译器工具链的机器被重新调整了用途,所以我不得不重新设置它。当然,我发现我没有记录所有的细节,我一直在努力获得一个可以实际加载的模块。大约一天后,我设法编译了一些被
insmod
在目标上。
但是模块什么都不做。
加载模块
没有给我任何错误。
dmesg
没有显示任何内容,尽管模块应该打印其探测例程中的一些信息。此外,它应该创建的角色设备不存在,显然模块的探测例程没有运行。
如果我这样做了
modinfo
在旧的
.ko
(我现在还有)和新的
.击倒取胜
,没有区别。
file
也显示相同的输出,除了
sha1
校验和,预计为:
module_old.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=1f55850e8da4b3b5931536060d62193d94730cf6, not stripped
module_new.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=c3b1f6fdcb72381beb7b8a766c70af7a1252a78f, not stripped
我看到的唯一区别是
.击倒取胜
大约比旧的大10倍:
-rw-r--r-- 1 root root 154504 Apr 21 23:38 module_new.ko
-rw-rw-r-- 1 root root 17956 Oct 4 2017 module_old.ko
我的Makefile如下所示:
obj-m += mymodule.o
KERNEL_SOURCE_DIR = /home/ludo/linux-at91-linux4sam_5.3
all:
make -C $(KERNEL_SOURCE_DIR) CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm M=$(PWD) modules
clean:
make -C $(KERNEL_SOURCE_DIR) CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm M=$(PWD) clean
我尝试添加
CFLAGS_mymodule.o := -march=armv7-a -mtune=cortex-a5
但这没有什么区别。
我以DebianJessie(8.10)和GCC4.9为基础。我不记得我用什么GCC版本构建了旧版本,但它是4。x、 不更新。
有什么办法可以调试这个问题吗?