22 使用内核里的at24-eeprom设备驱动

at24-eeprom设备驱动在内核里的配置选项:

make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

Device Drivers  ---> 
    Misc devices  --->
        EEPROM support  ---> 
            <*> I2C EEPROMs / RAMs / ROMs from most vendors 

重编并更新内核镜像.

make Image ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

更新内核镜像系统启动后,可以查看出设备驱动是否已编进内核镜像里:

^_^ / # ls /sys/bus/i2c/drivers/
at24/

设备驱动源码在: drivers/misc/eeprom/at24.c

814 static struct i2c_driver at24_driver = {
815     .driver = {
816         .name = "at24",
817         .acpi_match_table = ACPI_PTR(at24_acpi_ids),
818     },
819     .probe = at24_probe,
820     .remove = at24_remove,
821     .id_table = at24_ids,
822 };
以上代码可得知,此at24是一个i2c设备驱动,可用id_table与设备树中的i2c设备进行匹配(compatible属性值).

132 static const struct i2c_device_id at24_ids[] = {
133     /* needs 8 addresses as A0-A2 are ignored */
134     { "24c00",  AT24_DEVICE_MAGIC(128 / 8,  AT24_FLAG_TAKE8ADDR) },
135     /* old variants can't be handled with this generic entry! */
136     { "24c01",  AT24_DEVICE_MAGIC(1024 / 8, 0) },
137     { "24cs01", AT24_DEVICE_MAGIC(16,
138                 AT24_FLAG_SERIAL | AT24_FLAG_READONLY) },
139     { "24c02",  AT24_DEVICE_MAGIC(2048 / 8, 0) },
140     { "24cs02", AT24_DEVICE_MAGIC(16,
141                 AT24_FLAG_SERIAL | AT24_FLAG_READONLY) },
142     { "24mac402",   AT24_DEVICE_MAGIC(48 / 8,
    ...

由上面代码可得知, 在设备树中的i2c设备节点的compatible属性值只需与列出的型号一致即可.

也可通过阅读at24_probe函数里的代码可得知,设备树里的i2c设备节点不需要额外属性提供硬件资源.
    也可得知,驱动最后会在/sys/bus/i2c/设备/目录下创建一个"eeprom"属性文件,只需要对此属性文件读写即可实现读写eeprom设备了.

at24c02 eeprom连接到板上的第0个控制器, 则设备树里:

        i2c0: i2c@01c2ac00 {
        ...
            myeeprom {
                compatible = "24c02";
                reg = <0x50>;
            };
        };

重编并更新设备树文件. 重启系统后,就应当查看到:
^_^ / # ls /sys/bus/i2c/devices/
0-0050


也可以查看到设备驱动是否与设备树里描述的i2c设备匹配:
^_^ / # ls /sys/bus/i2c/drivers/at24/
0-0050/  bind     uevent   unbind


设备驱动完成后,只需下面操作就可以访问eeprom了:
^_^ / # echo "kkkk" > /sys/bus/i2c/devices/0-0050/eeprom 
^_^ / # cat /sys/bus/i2c/devices/0-0050/eeprom
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值