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最新代码修改此函数。

posted @ 2021-08-05 10:12  吕亿亿  阅读(1029)  评论(0)    收藏  举报