AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1126256
Accepted
UbuntuUser
UbuntuUser
Asked: 2019-03-17 13:39:01 +0800 CST2019-03-17 13:39:01 +0800 CST 2019-03-17 13:39:01 +0800 CST

为什么内核更新到 4.4.0-143-generic 后无法构建调谐器卡驱动程序?

  • 772

我使用特定品牌的电视调谐卡(TBS 技术),驱动程序不包含在内核中,因此必须在每次内核更新后重新构建。将昨天的内核更新安装到 4.4.0-143-generic 后,TBS 驱动程序无法构建,但如果我回到 4.4.0-142-generic,它们就可以工作。运行make时出现问题,特别是尝试构建一个名为videobuf-dma-sg.o的文件时,错误输出如下:

  CC [M]  /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c: In function 'videobuf_dma_init_user_locked':
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:187:21: warning: passing argument 6 of 'get_user_pages' makes pointer from integer without a cast [-Wint-conversion]
         rw == READ, 1, /* force */
                     ^
In file included from include/linux/scatterlist.h:7:0,
                 from include/linux/dma-mapping.h:10,
                 from /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:28:
include/linux/mm.h:1222:6: note: expected 'struct page **' but argument is of type 'int'
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:188:9: warning: passing argument 7 of 'get_user_pages' from incompatible pointer type [-Wincompatible-pointer-types]
         dma->pages, NULL);
         ^
In file included from include/linux/scatterlist.h:7:0,
                 from include/linux/dma-mapping.h:10,
                 from /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:28:
include/linux/mm.h:1222:6: note: expected 'struct vm_area_struct **' but argument is of type 'struct page **'
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:185:8: error: too many arguments to function 'get_user_pages'
  err = get_user_pages(current, current->mm,
        ^
In file included from include/linux/scatterlist.h:7:0,
                 from include/linux/dma-mapping.h:10,
                 from /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:28:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
scripts/Makefile.build:291: recipe for target '/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o' failed
make[3]: *** [/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o] Error 1
Makefile:1454: recipe for target '_module_/home/backend/Drivers/linux-tbs-drivers/v4l' failed
make[2]: *** [_module_/home/backend/Drivers/linux-tbs-drivers/v4l] Error 2
make[2]: Leaving directory '/usr/src/linux-headers-4.4.0-143-generic'
Makefile:51: recipe for target 'default' failed
make[1]: *** [default] Error 2
make[1]: Leaving directory '/home/backend/Drivers/linux-tbs-drivers/v4l'
Makefile:26: recipe for target 'all' failed
make: *** [all] Error 2

我基本上遵循构建这些驱动程序的“配方”,所以我不知道实际问题是什么或如何解决它。我不知道这是否是这个特定版本的内核中的错误,或者是否发生了某些变化,这将永远阻止驱动程序的重建。我希望也许某个善良的人比我更了解从源代码构建,可能会给我一些关于这里发生的事情的线索,更重要的是,我可能需要做些什么来修复它。使用以前的 4.4.0-142-generic 内核时,Make 运行良好并且没有错误地完成。那么发生了什么变化,我想知道吗?

drivers compiling kernel
  • 2 2 个回答
  • 1805 Views

2 个回答

  • Voted
  1. ubfan1
    2019-03-17T14:01:59+08:002019-03-17T14:01:59+08:00

    改变的是 mm.h 文件的 get_user_pages() 接口。对基本内核代码的这种更改(1 月)终于在 4.4.0-143 Ubuntu 内核版本中发挥作用。它给 Nvidia 驱动程序和一些 vm 驱动程序带来了各种各样的悲痛,但它们被重写了。其他驱动程序,例如您的驱动程序或 oem-hdmi-audio-dkms_0.1_all.deb 中的英特尔计算棒的 HDMI 音频驱动程序可能会或可能不会被重写。基本上你有三个选择:

    1. 继续使用 4.4.0-142 内核。放弃所有未来的内核补丁——4.4 系列对你来说已经死了,直到你的驱动程序被重写。请联系卡供应商,他们可能有新的驱动程序。
    2. 自己重写驱动程序。可能还不错,看起来这个界面过去有变化,现在只是在撤消一些东西。除非您有一些内核代码经验,否则不要尝试。如果安全性和使用该卡对您至关重要,也许可以聘请第三方开发人员来修复驱动程序。
    3. 花时间寻找具有驱动程序支持的更新内核。HDMI 音频已在后来的内核中得到修复,比如 4.18,所以也许你可以升级操作系统/内核。再次与卡的供应商核实,他们可能知道哪些后来的内核包含了一个工作驱动程序(如果有的话)。

    有些机器在某个地方崩溃了,所以有人认为更改 LTS 内核接口是可以接受的。我个人认为他们错了,但我该说谁。此更改是 Canonical 的上游,因此它被视为一项功能,而不是错误,并且不太可能更改,因为某些旧驱动程序不再工作。

    • 7
  2. Best Answer
    UbuntuUser
    2019-03-31T20:54:33+08:002019-03-31T20:54:33+08:00

    对于试图解决这个特定问题的任何其他人,使用 CrazyCat 的用户已经为修复此问题的 TBS 驱动程序提供了补丁/更新。在 TBS 驱动程序和软件更新论坛中也有关于此问题的讨论。

    • 1

相关问题

  • 如何让 .so 文件显示在包中?

  • 类似于 Eyefinity 的东西?

  • Ubuntu 是否支持与 SSD 一起使用的 TRIM 命令?

  • 使用 apt-get upgrade 时如何强制安装内核更新?

  • 在哪里可以找到 Brother HL-2170W 64 位打印机驱动程序?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve