当前位置: 首页 > 面试题库 >

I2C设备linux驱动程序

岳卓君
2023-03-14
问题内容

如何使用打开,关闭,ioctl等功能为i2c设备制作字符设备?最近两周我一直在寻找有关它的信息,找不到任何有效的方法。我在Essential LinuxDevice Drivers中找到了一些信息,但是它是针对2.6内核编写的,我使用3.4.79(我正尝试在cubian
distr上为cubieboard2编写此驱动程序),因此本书有许多不推荐使用的功能,我试图在那里写我的驱动程序,但仍然不起作用(在我尝试使用cat字符设备时,请给我内核错误)。任何人都可以向我解释该怎么做,或者至少给我一个有效的例子。

因此,有我的代码:http :
//pastebin.com/T7PBTpym

我只是尝试使i2c总线正常工作,但是在我的示波器上,我在i2c线上看不到任何东西,而在编译时却没有错误。我也找不到如何将设备驱动程序附加到i2c总线号。因为我的cubieboard2上有4条i2c总线,例如,如何将设备驱动程序附加到i2c-1总线?


问题答案:

感谢大伙们。几个小时前我已经找到了想要的东西。因此,正如我所看到的,有三种类型的驱动程序。应该将其中一个插入内核,然后需要重建内核才能使用它们。您还可以通过sysfsusing设备属性使用驱动程序(它们显示在中/sys/bus/i2c/driver/your_driver/)。第三,我的类型-
看起来像字符设备的驱动程序。实际上,您可以将它们结合起来。

因此,如果要使用最后一种类型的设备,将很难找到正确的示例,因为几乎所有示例都专门针对前两种类型的驱动程序。无论如何,如果要创建字符设备,则需要从file_operations结构中描述功能。但是所有函数都像i2c_transferi2c_smbus_read_byte。等(完整列表)为必填项struct i2c_adapterstruct i2c_client。还有两个问题,如何到达那里的结构,以及如何将驱动程序连接到适当的i2c总线,例如i2c-2?

因此,有是没有描述的功能在这里:i2c_get_adapter。作为参数,您需要传递i2c总线号。它返回到i2c_adapter结构的链接。该i2c_client结构可以用得到i2c_new_dummy的功能传球i2c_adapter和从地址到它作为参数。

在此之后,你可以使用的功能,例如i2c_transferi2c_smbus_read_byte等等。最后,你可以描述file_operations的结构功能,并释放驱动程序,代表您的I2C设备,而无需使用的sysfs和重建你的内核。

结果代码如下:

u8 ret; 
struct i2c_client * my_client; 
struct i2c_adapter * my_adap = i2c_get_adapter(1); // 1 means i2c-1 bus
my_client = i2c_new_dummy (my_adap, 0x69); // 0x69 - slave address on i2c bus
i2c_smbus_write_byte(my_client, 0x0f); 
ret = i2c_smbus_read_byte(my_client);

您可以在函数中的file_operations结构中直接使用此代码。

希望此信息对像我这样的初学者有用。



 类似资料:
  • 问题内容: 谁能解释我, 什么啊 这有什么用途? 如何使用? 为什么我不能定义与之功能相同的新功能? 问题答案: 一个,表示“输入- 输出控制”是一种特定于设备的系统调用。Linux(300-400)中只有几个系统调用,不足以表示设备可能具有的所有独特功能。因此,驱动程序可以定义一个ioctl,它允许用户空间应用程序向其发送订单。但是,ioctl并不是很灵活,并且会变得有些混乱(数十个“魔术数字”

  • 更新时间:2019-04-16 19:04:41 各种不同的设备在不同的操作系统使用时,可能需要单独安装对应的驱动程序。为了方便用户,Hacklab提供了支持的部分开发板串口驱动程序下载及安装信息,请根据使用的开发板和PC OS下载对应的驱动程序。 串口芯片驱动 CP210x 下载地址 使用该串口驱动的开发板包括: ST Nucleo F412ZG esp32devkitc(Board类型可选择E

  • I2C 简介 I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA(serial data),另一根是双向时钟线 SCL(serial clock)。SPI 总线有两根线分别用于主从设备之间接收数据和发送数据,而 I2C 总线只使用一根线进行数据收发。 I2C

  • 操作系统其中一个目的就是向用户掩盖系统硬件设备的特殊性。例如,虚拟文件系统呈现了安装的文件系统的一个统一的试图,而和底层的物理设备无关。本章描述 Linux 核心是如何管理系统中的物理设备的。 CPU 不是系统中唯一的智能设备,每一个物理设备都由它自己的硬件控制器。键盘、鼠标和串行口由 SuperIO 芯片控制, IDE 磁盘由 IDE 控制器控制, SCSI 磁盘由 SCSI 控制器控制,等等。

  • Device Drivers 设备驱动程序 Generic Driver Options 驱动程序通用选项.[提示]Linux Kernel Driver DataBase网 站是搜索驱动程序与硬件型号对应关系的绝佳网站.如果你不知道某个驱动(例如"CONFIG_INTEL_IOATDMA")究竟对应着哪些型号的硬件, 那么可以直接根据该驱动选项的首字母(本例是"I")进入对应的索引页去查找到该驱

  • 问题内容: 我需要从头开始为omap4编写SPI Linux字符设备驱动程序。我知道编写设备驱动程序的一些基础知识。但是,我不知道如何从头开始编写平台特定的设备驱动程序。 我已经编写了一些基本的char驱动程序,并且我认为编写SPI设备驱动程序将与此类似。Char驱动程序的结构包含在驱动程序中实现的功能。 现在,我将以spi-omap2-mcspi.c代码作为参考,以获取从零开始开发SPI驱动程序