Вы не можете полагаться на fw_printenv, если хотите узнать версию u-boot.
fw_printenv просто ищет раздел printenv и сбрасывает его данные.Так что это нормально для нормальных переменных, но это не нормально для переменной "ver", которая является динамической, и значение которой инициализируется u-boot при загрузке.Значение этой переменной не сохраняется после выхода из u-boot, за исключением случаев, когда вы вручную сохраняете его в среду.
Например, на моей доске, если я печатаю переменную "ver" из приглашения u-boot:
U-Boot > printenv ver
ver=U-Boot 2009.11-00393-g5ca9497-dirty (Nov 26 2012 - 11:08:44)
Это реальная версия u-boot, пришедшая из самого u-boot.
Теперь, если я загружу свою плату и использую fw_printenv:
el@board # fw_printenv | grep ver=
ver=U-Boot 2009.11-00323-gbcc6e0e (Sep 21 2012 - 11:07:19)
Как видите, все по-другому.Потому что так получилось, что в моей среде определена переменная ver.И это не соответствует реальной версии u-boot.
Конечно, я мог бы вернуться к u-boot, использовать «saveenv» для обновления значения «ver» в среде.Тогда два значения будут совпадать.Но тогда я должен всегда обновлять среду после изменения u-boot.
Итак, я пришел к выводу, что использование fw_printenv для получения версии u-boot, безусловно, не очень хорошая идея.