用户空间如何访问内核态的I2C驱动

69 views
Skip to first unread message

sunshinne97209

unread,
Jan 18, 2010, 7:37:16 AM1/18/10
to linux...@googlegroups.com
有个问题想请教一下大家:
我在s3c2440开发板上通过i2c总线挂接了一个i/o扩展芯片pcf8574,接下来就是编写i2c驱动,使得用户程序能够通过调用i2c驱动控制pcf8574。编写i2c设备驱动有两种方式,一种是通过i2c-dev.c生成设备文件,用户程序可以通过对/dev/i2c/0进行open()、read()、write()、ioctl()等操作控制设备,但i2c-dev.c只是通用的i2c设备驱动,只提供了简单的通讯方式,没有太大的实用价值。另一种方式是为特定的i2c设备编写设备驱动,实现内核态的i2c驱动,在源代码/driver/i2c/chips文件夹中有pcf8574.c文件,该文件针对pcf8574实现了设备驱动,我把它编进了内核。
我现在向问的问题是,实现了内核态的i2c驱动后,用户程序如何通过系统调用控制pcf8574,实现特定的操作?还是通过打开/dev/i2c/0文件,对其进行read()、write()操作来实现吗?
 
2010-01-18

sunshinne97209

Barry Song

unread,
Jan 20, 2010, 4:51:03 AM1/20/10
to linux...@googlegroups.com
2010/1/18 sunshinne97209 <sunshin...@tom.com>:

> 有个问题想请教一下大家:
> 我在s3c2440开发板上通过i2c总线挂接了一个i/o扩展芯片pcf8574,接下来就是编写i2c驱动,使得用户程序能够通过调用i2c驱动控制pcf8574。编写i2c设备驱动有两种方式,一种是通过i2c-dev.c生成设备文件,用户程序可以通过对/dev/i2c/0进行open()、read()、write()、ioctl()等操作控制设备,但i2c-dev.c只是通用的i2c设备驱动,只提供了简单的通讯方式,没有太大的实用价值。

此言不妥,内核提供的是机制而非策略,通过i2c_dev.c提供的/dev/i2c/0节点,用户空间仍然可以透过i2c_msg数组组织复杂的通信格式。

>另一种方式是为特定的i2c设备编写设备驱动,实现内核态的i2c驱动,在源代码/driver/i2c/chips文件夹中有pcf8574.c文件,该文件针对pcf8574实现了设备驱动,我把它编进了内核。
> 我现在向问的问题是,实现了内核态的i2c驱动后,用户程序如何通过系统调用控制pcf8574,实现特定的操作?还是通过打开/dev/i2c/0文件,对其进行read()、write()操作来实现吗?

如果你只是需要依赖pcf8574进行通信,你的驱动完全可以在用户空间实现。
>
> 2010-01-18
> ________________________________
> sunshinne97209
> --
> You received this message because you are subscribed to the Google
> Groups "Linux设备驱动开发者群落" group.
> To post to this group, send email to linux...@googlegroups.com
> To unsubscribe from this group, send email to
> linuxdriver...@googlegroups.com
> For more options, visit this group at
> https://groups.google.com/group/linuxdriver?hl=zh-CN
>
>

sunshinne97209

unread,
Jan 21, 2010, 5:03:40 AM1/21/10
to linux...@googlegroups.com
谢谢宋老师,既然通过i2c_dev.c提供的/dev/i2c/0节点能进行复杂的通讯,那源代码/driver/i2c/chips里面的pcf8574.c到底起到什么作用呢?
 
 
2010-01-21

sunshinne97209

发件人: Barry Song
发送时间: 2010-01-20  17:51:39
抄送:
主题: Re: [linux-driver] 用户空间如何访问内核态的I2C驱动

徐开

unread,
Jan 24, 2010, 10:38:16 AM1/24/10
to linuxdriver
i2c_dev和/driver/i2c/chips里面的pcf8574的地位相同,都是slave device。
只是pcf8574.c是针对PCF8574的内核态的驱动,更强力一些,比如能够处理中断。
i2c_dev则是一个通用的设备,它类似一个i2c对外的一个标准接口。目的是在用户态来编写驱动,好处是即使有错误也不会导致系统崩溃等。


2010/1/21 sunshinne97209 <sunshin...@tom.com>



--
Aaron Xu
Reply all
Reply to author
Forward
0 new messages