uboot No MTD device found
uboot-2020.07版本:
当使用SPI NOR Flash,并使能了 CONFIG_DM_SPI_FLASH 和 CONFIG_ENV_IS_IN_SPI_FLASH宏时,在uboot启动后进入命令,输入mtd 相关的命令时会报 Could not find a valid device for xxx ,No mtd device found 的错误,如下:

通过追踪分析,发现问题所在。
1. uboot在做flash初始化时,会注册mtd设备:

2.然而在load环境变量时,会调用spi_flash_free,从而调用spi_flash_mtd_unregister注销该mtd设备,如下:

如此一来,刚刚注册的spi nor flash的mtd设备就被注销了,如果系统只有这一个mtd设备,那么在使用mtd list等相关的命令时,就会找不到设备。
uboot这个逻辑就是有问题的,然后去uboot官方看了一下最新的版本,u-boot-2021.07,发现问题出在了spi_flash_free函数上。
具体可以看uboot的提交记录:https://source.denx.de/u-boot/u-boot/-/commit/b09c74f66d46fac7f25e53a0c06f832cf0638a5c
此次提交就是修改spi_flash_free函数,使之不要remove设备,改动如下:

总结
在CONFIG_DM_SPI_FLASH 框架下,spi_flash_free函数不应该remove spi设备,可参考uboot最新代码修改此函数。
浙公网安备 33010602011771号