由于缺少 Build.include 文件,在 Ubuntu 20.04 中制作 objtool 失败?

Make for objtool in Ubuntu 20.04 fails because of missing Build.include file?

我正在尝试在最近升级的 Ubuntu 20.04 笔记本电脑上构建和安装 DisplayLink driver,这样我就可以使用 Dell D3100 扩展坞通过 DisplayPort 驱动两个外接显示器.我之前在 运行ning Ubuntu 18.04 时在同一台笔记本电脑上成功安装了这个驱动程序,并且能够检测和使用额外的显示器(尽管偶尔会出现黑屏)。

我已经从 download page 下载了最新的 5.2.14 驱动程序安装程序,但是这次当我 运行 作为 sudo 时,由于某种错误配置或丢失 file/build 文件夹,生成日志文件中显示以下内容:

/usr/src/linux-headers-5.4.0-24-lowlatency/tools/build/Makefile.build:37: /usr/src/linux-headers-5.4.0-24-lowlatency/tools/build/Build.include: No such file or directory

确实没有 /usr/src/linux-headers-/tools/build/Build.include 文件,但我不确定为什么,是否缺少我需要的包?

运行安装程序的输出:

bric@home:~/System/DisplayLink$ sudo ./displaylink-driver-5.2.14.run 
Verifying archive integrity...  100%   All good.
Uncompressing DisplayLink Linux Driver 5.2.14  100%  
DisplayLink Linux Software 5.2.14 install script called: install
Distribution discovered: Ubuntu 20.04 LTS
Installing
Configuring EVDI DKMS module
Registering EVDI kernel module with DKMS
Building EVDI kernel module with DKMS
ERROR (code 3): Failed to build evdi/5.2.14. Consult /var/lib/dkms/evdi/5.2.14/build/make.log for details..

目录显示没有Build.include:

$ ls -la /usr/src/linux-headers-5.4.0-24-lowlatency/tools/build/
total 40
drwxr-xr-x  4 root root 4096 Apr 18 06:27 .
drwxr-xr-x 33 root root 4096 Apr 18 06:27 ..
drwxr-xr-x  2 root root 4096 Apr 18 06:27 feature
-rw-r--r--  1 root root 1066 Nov 25 11:32 Makefile
-rw-r--r--  1 root root 3998 Nov 25 11:32 Makefile.build
-rw-r--r--  1 root root 8295 Nov 25 11:32 Makefile.feature
-rw-r--r--  1 root root  257 Nov 25 11:32 Makefile.include
drwxr-xr-x  3 root root 4096 Apr 18 06:27 tests

make.log 文件附在下面,如果还有其他帮助,请告诉我。

Make.log

对我缺少的东西有什么建议吗?任何帮助将不胜感激!

所以问题似乎是由 DisplayLink 驱动程序的 Makefile 中的无效目录指令引起的,正如我最终发现的 here(尽管这是指驱动程序的 rpm 版本)。

看起来好像当我升级到 5.4 内核时,这也改变了 Makefile 的解析方式,这样任何 SUBDIRS= 参数都被忽略,留下试图 运行 make 的指令linux-headers/tools/build 文件夹而不是内核模块文件夹。

如上面链接的讨论线程所述,解决方案是在 Makefile 中将 SUBDIRS=blah 替换为 M=blah,此外还应用另一个 patch 来更新引用的源文件<linux/reservation.h> 改为引用较新的 <linux/dma-resv.h>.

当我使用这些补丁更新 DisplayLink 驱动程序 5.2 源时,我能够成功构建 evdi 内核模块并通过扩展坞上的 DisplayPorts 连接我的其他显示器。希望这对其他人有帮助,直到发布下一个 DisplayLink 驱动程序!