前段时间,我为ARMv7(Cortex-A5)开发了一个内核模块。这个模块工作正常,但我需要添加一个功能。不幸的是,安装了交叉编译工具链的机器在同一时间重新调整用途,所以我不得不重新设置它。当然,我发现我没有记录所有的细节,我一直在努力获得一个实际加载的模块。大约一天后,我设法编译了目标上insmod
接受的内容。
但该模块什么都不做。
insmod
没有给我任何错误。虽然该模块应该从其探测例程中打印一些信息,但dmesg
没有显示任何内容。此外,它应该创建的字符设备不存在,显然模块的探测例程没有运行。
如果我对旧modinfo
(我仍有)和新.ko
都.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
我看到的唯一区别是新.ko
比旧版-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
大10倍:
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
我的Makefile如下:
CFLAGS_mymodule.o := -march=armv7-a -mtune=cortex-a5
我尝试添加
select OrderDay = datepart(dayofweek, soh.OrderDate)
, sum(sod.LineTotal)
, SUM(sod.OrderQty)
from sales.SalesOrderDetail sod
join sales.SalesOrderHeader soh on sod.SalesOrderID = soh.SalesOrderID
group by datepart(dayofweek, soh.OrderDate)
但这没有任何区别。
我正在使用gcc 4.9构建Debian Jessie(8.10)。我不记得我用旧版本构建的GCC版本,但它是4.x,而不是更新版本。
我有什么想法可以调试这个问题吗?
答案 0 :(得分:0)
我忘了记录构建过程中非常重要的一步。在构建模块之前,需要确保配置一致。这可以通过从内核源代码树的根执行来完成:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sama5_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
然后可以编译模块,一切都很好。