【发布时间】:2021-06-22 19:39:31
【问题描述】:
我正在尝试为NVDLA NVIDIA 的深度学习加速器构建内核模块驱动程序 (KMD),最后出现以下错误。 enter image description here
在对 google 进行一些研究后,我发现这是由于 kmd 中存在 64 位操作(尤其是 64 位除法)导致了错误。经过进一步调查,我发现 kmd 是为 64 位架构编写的,而我正在尝试为 32 位(ARM cortex A9)处理器编译它。网上有人建议使用-lgcc,它会解决这个问题。
任何人都可以帮助我编辑makefile 以链接链接器库 libgcc。
提前致谢。
【问题讨论】:
-
你认为之后它会正常工作吗?
-
@0andriy 老实说我不知道。但是当我搜索错误“需要未知符号__aeabi_uldivmod”时,我发现一些帖子表明它需要链接到包含__aeabi_uldivmod 定义的libgcc.a。我想尝试一下,看看它是否有效,但我不熟悉makefile,这就是为什么我希望有人可以帮助将-lgcc 与makefile 链接起来。 KMD 和 makfile 的链接是here 供您参考。
-
欢迎来到本站!通常最好将错误消息、代码等作为文本包含在问题中(在code blocks 内),而不是图像或屏幕截图。作为文本,它们更易于访问,人们可以更轻松地复制和粘贴。
-
你需要使用
#include <linux/math64.h>中的函数来做64位除法。 (来自#include <asm/div64.h>的旧do_div()宏仍然被一些旧代码使用,但我不建议将它用于新代码,因为该宏的行为不像普通函数。) -
另外,忘记使用
-lgcc,因为内核不支持它。
标签: linux-device-driver embedded-linux intel-fpga