我的linux环境中有多个进程必须使用相同的设备驱动程序来访问许多类似的设备。我的问题是,如果一个进程即时提供设备(通过实例化,我的意思是mknod)文件,并使用一个次要数字说0和1两个设备。那么在做同样的事情时,另一个过程如何知道使用哪个次要数字?
简而言之,在应用程序空间中是否可以找到使用相同驱动程序的设备文件数?
答案 0 :(得分:3)
我的问题是,如果一个进程即时设备(通过实例化,我的意思是mknod)文件
在* NIX世界设备中,通常在内核中分配主要/次要编号静态。 静态,从某种意义上说,现在Linux下的大多数设备都有动态的主要/未成年人,可以通过/ dev(或/ proc或/ sys)下的设备节点访问。
IOW,用户空间应用程序无法做到这一点,因为要与驱动程序(或设备)进行通信,它必须知道主要/未成年人如何能够访问驱动程序。
详细信息将会很多,请更好地阅读the 3rd chapter of LDD,其中讨论了关于主要/次要任务的讨论。
在/ dev /下自动创建设备现在通常由udev处理,我不是很熟悉。
答案 1 :(得分:1)
假设您指的是您正在创建的驱动程序或至少具有源代码,请尝试以数字顺序(为简单起见)从零开始使用次要数字。让您的驱动程序跟踪已实例化的次数/设备数量,并通过sysfs中的条目公开该计数。当你去实例化一个新设备时,使用变量的当前值作为新设备的次要数字并增加变量(在驱动程序内)。
答案 2 :(得分:0)
/sys
伪文件系统中的应用程序应该可以看到驱动程序注册的设备使用的次要编号。 dev
文件位于与您的设备关联的/sys/class/...
目录/目录中,包含major:minor。
可能,您的驱动程序正在使用/sys/class/misc/.../
。