Linux kernel 构建I2C结构

Linux kernel 构建I2C结构,linux-kernel,device-driver,i2c,smbus,Linux Kernel,Device Driver,I2c,Smbus,您好,我正在查看此文档。 我的目标只是使用I2C总线将一些数据写入EEPROM。对于使用哪些函数以及如何填充这些函数所需的结构,我有点困惑。 我猜我需要创建一个i2c_客户端来表示EEPROM。我从这个设备树中找到了EEPROM的位置 &i2c0 { status = "okay"; clock-frequency = <400000>; pinctrl-names = "default"; i2cswitch@74 { co

您好,我正在查看此文档。 我的目标只是使用I2C总线将一些数据写入EEPROM。对于使用哪些函数以及如何填充这些函数所需的结构,我有点困惑。 我猜我需要创建一个i2c_客户端来表示EEPROM。我从这个设备树中找到了EEPROM的位置

&i2c0 {
    status = "okay";
    clock-frequency = <400000>;
    pinctrl-names = "default";

    i2cswitch@74 {
        compatible = "nxp,pca9548";
        #address-cells = <1>;
        #size-cells = <0>;
        reg = <0x74>;

        i2c@2 {
            #address-cells = <1>;
            #size-cells = <0>;
            reg = <2>;
            eeprom@54 {
                compatible = "at,24c08";
                reg = <0x54>;
            };
        };
    };
};
&i2c0{
status=“好”;
时钟频率=;
pinctrl names=“默认”;
i2cswitch@74 {
compatible=“nxp,pca9548”;
#地址单元=;
#大小单元格=;
reg=;
i2c@2 {
#地址单元=;
#大小单元格=;
reg=;
eeprom@54 {
compatible=“at,24c08”;
reg=;
};
};
};
};
如何用这些数据填充i2c_客户端结构

那么我猜我会使用这个函数

int-i2c\u-master\u-send(const-struct-i2c\u-client*client,const-char*buf,int-count)

并向它提供客户端结构和我要编写的字符串,以及该字符串的长度,规定它小于64k。在这种情况下,CPU是主机吗

使用文档提供的函数和结构需要包含哪些头文件


谢谢。

由于该设备树中的EEPROM具有与“at24”驱动程序(drivers/misc/EEPROM/at24.c)匹配的“兼容”字符串,因此您可以使用NVMEM框架访问EEPROM内容。有关API,请参阅“Documentation/nvmem/nvmem.txt”中的“4.Direct NVRAM基于设备的消费者API”,有关设备树绑定,请参阅“Documentation/devicetree/bindings/nvmem/nvmem.txt”。我认为您的设备树节点只需要“nvmem”属性,该属性包含EEPROM设备树节点的设备树幻影,以及“nvmem名称”属性,以提供驱动程序用于获取nvmem设备的名称?您如何知道哪些驱动程序最适合于哪些应用程序?i2c开发驱动程序提供对i2c适配器的用户空间访问,并允许您绕过i2c客户端驱动程序,因此您必须小心不要把事情搞砸。您应该能够从用户空间访问EEPROM内容,而无需在代码中接近I2C。请参阅NVMEM文档中的“6.用户空间二进制接口”。(当然,您需要适当地配置内核,例如为“AT24”驱动程序配置EEPROM AT24)。那么,我的问题是,如何判断哪个司机最适合这份工作?大多数设备供应商是否提供自己的Linux驱动程序,如果在配置中指定,这些驱动程序可以包含在内核构建中?由于该设备树中的EEPROM具有与“at24”驱动程序匹配的“兼容”字符串(drivers/misc/EEPROM/at24.c),您可以使用NVMEM框架访问EEPROM内容。有关API,请参阅“Documentation/nvmem/nvmem.txt”中的“4.Direct NVRAM基于设备的消费者API”,有关设备树绑定,请参阅“Documentation/devicetree/bindings/nvmem/nvmem.txt”。我认为您的设备树节点只需要“nvmem”属性,该属性包含EEPROM设备树节点的设备树幻影,以及“nvmem名称”属性,以提供驱动程序用于获取nvmem设备的名称?您如何知道哪些驱动程序最适合于哪些应用程序?i2c开发驱动程序提供对i2c适配器的用户空间访问,并允许您绕过i2c客户端驱动程序,因此您必须小心不要把事情搞砸。您应该能够从用户空间访问EEPROM内容,而无需在代码中接近I2C。请参阅NVMEM文档中的“6.用户空间二进制接口”。(当然,您需要适当地配置内核,例如为“AT24”驱动程序配置EEPROM AT24)。那么,我的问题是,如何判断哪个司机最适合这份工作?大多数设备供应商是否提供自己的Linux驱动程序,如果在配置中指定,这些驱动程序可以包含在内核构建中?