我想知道动态删除EEPROM的正确方法是什么。另一种同样有效的方法是告诉设备重新做探头。我尝试将其回显给delete_device,但结果显示在设备列表中找不到它的错误。我正在运行4.14.149内核(使用Yocto Pyro构建)。问题中的EEPROM是Atmel 24CS02 (兼容at24)。
这是一种奇怪的用例;这是在一个模拟器中,它有两个基于i.MX6的so,用于持续集成,并且没有物理EEPROM,因此启动时的初始探测将失败。这就是目录中没有eeprom文件的原因。EEPROM由FPGA模拟(直到初始引导之后才加载和配置)。一旦完成,我需要重新探测(这样它将在那里看到一个EEPROM并填充sysFS),或者删除并重新添加设备(这将重新触发探测)。
下面是我尝试删除它时的输出:
root@PLX-23-UUT:~# cd /sys/bus/i2c/devices/
root@PLX-23-UUT:/sys/bus/i2c/devices# ls
2-0041 2-0050 2-0052 2-0056 2-0057 2-006f i2c-1 i2c-2
root@PLX-23-UUT:/sys/bus/i2c/devices# ls 2-0052
modalias name of_node subsystem uevent
root@PLX-23-UUT:/sys/bus/i2c/devices# echo 0x52 > i2c-2/delete_device
[ 72.717009] i2c i2c-2: delete_device: Can't find device in list
-sh: echo: write error: No such file or directory发布于 2020-12-06 02:43:17
您可以解除绑定并绑定驱动程序:
# echo 2-0052 > /sys/bus/i2c/drivers/at24/unbind
# echo 2-0052 > /sys/bus/i2c/drivers/at24/bind
at24 2-0052: supply vcc not found, using dummy regulator
at24 2-0052: 32768 byte 24c256 EEPROM, writable, 1 bytes/write发布于 2020-12-05 14:49:22
https://github.com/torvalds/linux/blob/master/drivers/i2c/i2c-core-base.c
/*
* And of course let the users delete the devices they instantiated, if
* they got it wrong. This interface can only be used to delete devices
* instantiated by i2c_sysfs_new_device above. This guarantees that we
* don't delete devices to which some kernel code still has references.
*
* Parameter checking may look overzealous, but we really don't want
* the user to delete the wrong device.
*/换句话说,如果你没有实例化这个设备,你就不能移除它。
https://stackoverflow.com/questions/58843718
复制相似问题