如何访问i2c设备驱动程序节点

时间:2011-05-19 11:12:10

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

感谢任何帮助

此致

3 个答案:

答案 0 :(得分:3)

查找设备的主要/次要号码:

cat /proc/devices

您应该看到i2c总线的设备和i2c设备本身的设备。

为i2c设备驱动程序创建设备节点:

mknod /dev/[device name] [type] [major] [minor]

答案 1 :(得分:3)

加载内核模块:

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

答案 2 :(得分:0)

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

您可以使用/ dev / i2c-x总线(控制器)设备节点对其进行uaccess,但是直接从用户空间使用这种方式没有太大意义。

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

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

Reading the Accelerometer With I²C