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 源代码中看不到分配给此驱动程序的主要和次要编号)

任何帮助表示赞赏

问候

4

3 回答 3

4

加载内核模块:

modprobe i2c-dev

ls /dev/i2*

/dev/i2c-0  
/dev/i2c-10  
/dev/i2c-12  
/dev/i2c-14  
/dev/i2c-3  
/dev/i2c-5  
/dev/i2c-7  
/dev/i2c-9
/dev/i2c-1  
/dev/i2c-11  
/dev/i2c-13  
/dev/i2c-2   
/dev/i2c-4  
/dev/i2c-6  
/dev/i2c-8
于 2013-05-01T16:10:32.473 回答
3

Find the major/minor numbers for your device:

cat /proc/devices

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:

mknod /dev/[device name] [type] [major] [minor]
于 2011-06-02T21:52:11.373 回答
1

这是三轴加速度计。Linux 将其注册为input_polled_dev类型的驱动程序。

您可以使用 /dev/i2c-x 总线(控制器)设备节点访问它,但直接从用户空间以这种方式使用它没有多大意义。

I2C 客户端不适用于使用 /dev 设备节点。它们应该注册到内核 I2C 框架并通过更高层的 API 使用。

有使用 /dev/i2c-X 总线设备节点从用户空间读取类似 MMA7455L x、y、z 寄存器的示例程序。

使用 I²C 读取加速度计

于 2019-01-29T13:34:32.200 回答