连接字符设备和物理PCIe驱动
Connecting character device and physical PCIe driver
我正在修改现有 Linux 设备驱动程序和库 API。我的修改是允许多个设备(目前它是针对一个设备进行硬编码的)。我不明白的一个概念是字符设备和PCIe设备本身之间的映射。
在探测方法中初始化驱动程序时,我创建了一个(或多个)字符设备。库 API 使用来自该字符设备的文件描述符进行 IOCTL
调用。但是在驱动程序本身中,它为包含 PCI 信息的设备维护一个全局变量。所以我的下一步是维护所有 PCI 设备的状态信息。
我不明白的是我创建的字符设备和驱动程序中的PCIe状态信息之间的link是什么。根据我的理解,字符设备已创建,当我打开它或将 IOCTL
放入其中时,这些命令将通过驱动程序进行映射。我不确定如何 link 我正在接收的那个字符设备通过我想要控制的设备结构。
您可以使用次设备号来完成。
当被探测时,你可以用相同的主设备号和不同的次设备号注册字符设备,并用次设备号映射你自己的结构。调用IOCTL时,可以从cdev->dev
中获取次要编号,这样就可以找到自己的struct了。
我正在修改现有 Linux 设备驱动程序和库 API。我的修改是允许多个设备(目前它是针对一个设备进行硬编码的)。我不明白的一个概念是字符设备和PCIe设备本身之间的映射。
在探测方法中初始化驱动程序时,我创建了一个(或多个)字符设备。库 API 使用来自该字符设备的文件描述符进行 IOCTL
调用。但是在驱动程序本身中,它为包含 PCI 信息的设备维护一个全局变量。所以我的下一步是维护所有 PCI 设备的状态信息。
我不明白的是我创建的字符设备和驱动程序中的PCIe状态信息之间的link是什么。根据我的理解,字符设备已创建,当我打开它或将 IOCTL
放入其中时,这些命令将通过驱动程序进行映射。我不确定如何 link 我正在接收的那个字符设备通过我想要控制的设备结构。
您可以使用次设备号来完成。
当被探测时,你可以用相同的主设备号和不同的次设备号注册字符设备,并用次设备号映射你自己的结构。调用IOCTL时,可以从cdev->dev
中获取次要编号,这样就可以找到自己的struct了。