从 makefile 安装 Linux 驱动程序时出现问题

从 makefile 安装 Linux 驱动程序时出现问题

由于这更多的是一个软件/驱动程序问题,所以我在 SuperUser 而不是 EE Exchange 上发布了这个问题。

我在网上搜索了一下,找到了一个非常有用的USART 至 USB 转换桥. CP2102 是一种可编程设备,在数据帧方面具有许多设置。因此,必须使用该设备的驱动程序来连接和修改这些参数。

在Silabs网站上我发现Linux 驱动程序(Arch Linux 上的内核 3.14.4-1)。问题是这个司机只是一个没有文档的 C 程序。include制作文件中的一行在运行时(对我来说)会失败,因此它非常有用。

obj-m = cp210x.o
KVERSION = $(shell uname -r)
all:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

驱动程序源可以找到这里

我的 make 错误在哪里

make -C /lib/modules/3.14.4-1-ARCH/build M=/home/branden/Desktop/Linux_3.x.x_VCP_Driver_Source modules

make[ 1 ]: Entering directory '/usr/lib/modules/3.14.4-1-ARCH/build'

make[ 1 ]: *** No rule to make target 'modules. Stop.

make[ 1 ]: Leaving directory '/usr/lib/modules/3.14.4-1-ARCH/build'

Makefile:4: recipe for target 'all' failed

make: *** [all] Error 2

除此以外没有其他文件:

  1. 制作(你的 cp210x 驱动程序)
  2. 将 cp210x.ko 复制到 /lib/modules//kernel/drivers/usb/serial
  3. insmod /lib/模块/
  4. 修改cp210x.ko

这实际上是针对 Ubuntu 的。我使用的操作系统是 Arch Linux,所以我意识到可能存在一些差异,但我无法解决它们。

有人能提供一些关于安装此驱动程序的步骤的指导吗(或者至少在哪里查找)以及为什么缺乏文档?这里是否有我不知道的假设?有人应该如何使用它?如果你查看源代码,你会发现一些结构被用作函数的参数,据我所知,这些函数从未定义过。也许它们是顶部包含的头文件的一部分,但我在我的机器上也找不到其中一些。

答案1

您只是还没有加载 Linux 标头:

 sudo pacman -S linux-headers

解决了您的问题。您的错误消息表明 /linux/modules/$(uname -r)/build 中没有用于创建模块的规则。如果您此时查看该目录,您将找不到任何内容,或者可能找不到 vmlinux 文件。使用上述命令更新后,您将找到所需的所有模块。

该问题并非 Arch 所特有,而是所有 Linux 发行版都存在的问题。

答案2

安装 linux-headers 时我遇到了同样的问题。pacman从较新的内核安装了软件包。我通过在更新所有内容后立即重新编译模块解决了我的问题:

pacman -Syu && pacman -S linux-headers

相关内容