如何访问i2c设备驱动节点
情况 1:
我有一个 i2c 芯片驱动程序作为 linux 内核的一部分。我可以从内核启动消息中验证 i2c 芯片驱动程序是否在内核中(我的芯片驱动程序是 mma8450)
dmesg:
mma8450 0-001c: uevent
我还可以在(0x1c 是芯片的 i2c 地址)中看到此驱动程序
cat /sys/bus/i2c/devices/0-001c/name
mma8450
我在 /dev 界面中看不到此驱动程序节点。我的问题是如何在 /dev 中创建该设备的节点,以便我可以在用户程序中访问该设备?
情况2:
我创建了同一芯片驱动程序的模块,但没有将其作为内核的一部分。我可以使用 insmod mma8450 加载此模块,因为我没有其主/次编号,如何创建该设备的节点? (我在 mma8450 源代码中看不到分配给该驱动程序的主要和次要编号)
任何帮助
感谢
Situation 1:
I have an i2c chip driver as part of linux kernel. I can verify the i2c chip driver is in the kernel from kernel boot messages (my chip driver is mma8450)
dmesg:
mma8450 0-001c: uevent
I can also see this driver in (0x1c is i2c address of chip)
cat /sys/bus/i2c/devices/0-001c/name
mma8450
I can not see this driver node in /dev interface. My question is how can I create node of this device in /dev so that I can access this device in a user program ?
Situation 2:
I create the module of the same chip driver and does not make it a part of kernel. I can load this module using insmod mma8450, how can I create a node of this device as I don't have its major / minor numbers ? (I can not see major & minor numbers assigned to this driver in mma8450 source code)
Any help is appreciated
Regards
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
加载内核模块:
modprobe i2c-dev
Load the kernel module:
modprobe i2c-dev
查找您的设备的主/次编号:
您应该看到一个用于 i2c 总线的设备和一个用于 i2c 设备本身的设备。
为i2c设备驱动程序创建设备节点:
Find the major/minor numbers for your device:
You should see a device for the i2c bus and one for the i2c device itself.
Create the device node for the i2c device driver:
这是三轴加速度计。 Linux 将其注册为
input_polled_dev
类型的驱动程序。您可以使用 /dev/i2c-x 总线(控制器)设备节点 uaccess 它,但直接从用户空间使用它没有多大意义。
I2C 客户端不适合使用 /dev 设备节点。
它们应该注册到内核 I2C 框架并通过更高层的 API 使用。
有一个示例程序用于使用 /dev/i2c-X 总线设备节点从用户空间读取类似的 MMA7455L x,y,z 寄存器。
读取加速度计使用 I²C
This is 3-Axis Accelerometer. Linux registers it as a driver for
input_polled_dev
type.You can uaccess it using /dev/i2c-x bus (controller) device node, but there is no much sense using it that way directly from userspace.
I2C clients are not meant to be used using /dev device nodes.
They should be registered to Kernel I2C framework and used through higher layers API.
There is sample program for reading similar MMA7455L x,y,z registers from userspace using /dev/i2c-X bus device node.
Reading the Accelerometer With I²C