开源改变世界

RTAI:没有针对 5.4 内核构建的模块 #2106

推推 grbl 3年前 (2023-01-31) 291次浏览
关闭
3 个任务中的第 1 个
NTULINUX 开启了这个issue 2022 年 10 月 22 日 · 1条评论
关闭
3 个任务中的第 1 个

RTAI:没有针对 5.4 内核构建的模块#2106

NTULINUX 开启了这个issue 2022 年 10 月 22 日 · 1条评论

注释

RTAI:没有针对 5.4 内核构建的模块 #2106
贡献者
NTULINUX 评论了 2022 年 10 月 22 日  

以下是我重现该问题所遵循的步骤:

  1. 使用 5.4 内核构建 RTAI(这仍在进行中供其他人使用,现在有点 hack)
  2. 通过以下方式针对所述内核构建 LinuxCNCmake

这是我期望发生的事情:

LinuxCNC 内核模块编译或至少尝试编译 5.4 内核

这是发生了什么:

除了内核模块之外的所有东西都可以编译。首先错误是:

Reading 204/204 dependency files
Done reading dependencies
MAKEFLAGS="ik -j4 --jobserver-auth=3,4" \
make KBUILD_EXTRA_SYMBOLS=/usr/realtime/modules/Module.symvers -C /home/ntu/linux-5.4.y SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Entering directory '/home/ntu/linux-5.4.y'
 CALL    scripts/atomic/check-atomics.sh
 CALL    scripts/checksyscalls.sh
 CHK     include/generated/compile.h
 Building modules, stage 2.
 MODPOST 397 modules
make[1]: Leaving directory '/home/ntu/linux-5.4.y'
cp Module.symvers *.ko ../rtlib/
cp: cannot stat 'Module.symvers': No such file or directory
cp: cannot stat '*.ko': No such file or directory
make: [Makefile:540: modules] Error 1 (ignored)
You now need to run 'sudo make setuid' in order to run in place.

然后进行此更改:

diff --git a/src/Makefile b/src/Makefile
index 96eba38334..374b4bf35d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -538,7 +538,7 @@ ifeq ($(BUILD_SYS),kbuild)
modules:
       MAKEFLAGS="$(filter-out --warn-undefined-variables,$(MAKEFLAGS))" \
       $(PYTHON) modsilent.py $(MAKE) KBUILD_EXTRA_SYMBOLS=$(moduledir)/Module.symvers -C $(KERNELDIR) SUBDIRS=`pwd` CC=$(CC) V=$(BUILD_VERBOSE) modules
-       -cp Module.symvers *$(MODULE_EXT) ../rtlib/
+       -cp $(moduledir)/Module.symvers $(moduledir)/*$(MODULE_EXT) ../rtlib/
endif

问题是:

Reading 204/204 dependency files
Done reading dependencies
MAKEFLAGS="" \
/usr/bin/python3.9 modsilent.py make KBUILD_EXTRA_SYMBOLS=/usr/realtime/modules/Module.symvers -C /lib/modules/5.4.219-rtai-amd64+/build SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Entering directory '/home/ntu/linux-5.4.y'
 CALL    scripts/checksyscalls.sh
 CALL    scripts/atomic/check-atomics.sh
 Building modules, stage 2.
 MODPOST 33 modules
make[1]: Leaving directory '/home/ntu/linux-5.4.y'
cp /usr/realtime/modules/Module.symvers /usr/realtime/modules/*.ko ../rtlib/
You now need to run 'sudo make setuid' in order to run in place.

我补充说make V=1,我认为正在发生的事情是 LinuxCNC 本质上是make modules在内核源目录中运行,但这样做会构建树内内核模块。由于树内模块和内核映像已经构建,因此什么也不会发生。我认为 LinuxCNC 基本上是在尝试构建任何尚未在 Linux 内核源代码中构建的待定模块,而不是尝试构建它自己的模块。这MODPOST 33 modules实际上是在计算我拥有的树内内核模块的数量。这是我从我的系统开始构建并专门为我的系统构建的经过精简的完全自定义内核make tinyconfig,我启用的模块越多,数量就会增加得越高(MODPOST 397 modules之前我模拟的是一个臃肿的内核。)

在此之前它工作正常:

针对 4.14 和 4.19 RTAI 内核构建 LinuxCNC 工作得很好。

有关我的硬件和软件的信息:

  • 我正在使用这个 Linux 发行版和版本(通常显示为lsb_release -a):Debian 11/Bullseye
  • 我正在使用这个内核版本(显示为uname -a):5.4.219(自定义)
  • 我在跑步 …
    • 来自 linuxcnc.org 的二进制版本(包括 buildbot.linuxcnc.org)
    • 我自己构建的二进制文件
    • 来自 linuxcnc.org 之外的其他来源的二进制版本
  • 我正在使用这个 LinuxCNC 版本(显示在包管理器中,或者对于 git 版本,scripts/get-version-from-git):44127d9
  • 我正在使用此用户界面 (GUI)(例如 AXIS、Touchy、gmoccapy 等):N/A
  • 我正在使用此接口硬件供应商和芯片组(例如,并行端口、以太网端口、FPGA 卡):N/A
RTAI:没有针对 5.4 内核构建的模块 #2106
贡献者作者

使固定:


diff --git a/src/Makefile b/src/Makefile
index 96eba38334..047419d4bc 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -537,8 +537,8 @@ ifeq ($(BUILD_SYS),kbuild)
 
modules:
       MAKEFLAGS="$(filter-out --warn-undefined-variables,$(MAKEFLAGS))" \
-       $(PYTHON) modsilent.py $(MAKE) KBUILD_EXTRA_SYMBOLS=$(moduledir)/Module.symvers -C $(KERNELDIR) SUBDIRS=`pwd
` CC=$(CC) V=$(BUILD_VERBOSE) modules
-       -cp Module.symvers *$(MODULE_EXT) ../rtlib/
+       $(PYTHON) modsilent.py $(MAKE) KBUILD_EXTRA_SYMBOLS=$(moduledir)/Module.symvers -C $(KERNELDIR) M=`pwd` CC=$
(CC) V=$(BUILD_VERBOSE) modules
+       -cp $(moduledir)/Module.symvers $(moduledir)/*$(MODULE_EXT) ../rtlib/
endif

SUBDIRS 已经被弃用了很长一段时间,我认为甚至是 3.2 之前的版本。