gpt4 book ai didi

linux - 在 Linux 设备驱动函数中,如何知道次设备号或者调用了这个驱动函数的特定设备?

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:24 25 4
gpt4 key购买 nike

如果存在如下所述的三个 I2C 设备,并且在设备驱动程序 init() 函数中,将调用以下调用 register_chrdev(89, "i2c", &i2cfops)。请注意,名称是“i2c”而不是“i2c-0”/“i2c-1”/“i2c-2”。在 i2cdriver_open 或 i2cdriver_ioctl 函数中,驱动器如何知道次要编号或为哪个 I2C 设备调用了该函数?

详情请见下方

crw-r--r--    1 0        0         89,   0 Jun 12 09:15 /dev/i2c-0
crw-r--r-- 1 0 0 89, 1 Jun 12 09:15 /dev/i2c-1
crw-r--r-- 1 0 0 89, 2 Jun 12 09:15 /dev/i2c-2

应用:

int main(void)
{
int fd;
fd = open("/dev/i2c-0");
(void) ioctl(fd, ...);
return 0;
}

司机:

static struct file_operations i2cfops;
int i2cdriver_open(struct inode * inodePtr, struct file * filePtr);
int i2cdriver_ioctl(struct inode * inodePtr, struct file * filePtr, unsigned int ui, unsigned long ul);
int driver_init(void)
{
i2cfops.open = &i2cdriver_open;
i2cfops.ioctl = &i2cdriver_ioctl;
(void) register_chrdev(89, "i2c", &i2cfops);
return 0;
}
int i2cdriver_open(struct inode * inodePtr, struct file * filePtr)
{
/*In here, how to know the minor number or for which I2C device this function has been invoked?*/
}
int i2cdriver_ioctl(struct inode * inodePtr, struct file * filePtr, unsigned int ui, unsigned long ul)
{
/*In here, how to know the minor number or for which I2C device this function has been invoked?*/
}

最佳答案

作为一般注意事项,每当您发布有关 Linux 内核/驱动程序开发的问题时,请始终包括您正在使用的内核版本。它使您更容易得到对您的内核实际有效的答案。

这应该能够检索您的次要号码:

/* Add this header if you don't already have it included */
#include <linux/kdev_t.h>

/* Add this macro function wherever you need the minor number */
unsigned int minor_num = MINOR(inodePtr -> i_rdev);

This page具有 MINOR 宏的定义,并且 this page有inode结构的定义供引用。

关于linux - 在 Linux 设备驱动函数中,如何知道次设备号或者调用了这个驱动函数的特定设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com