U-Boot RK3308 - фиксируем bootcmd через rk_board_late_init
Проблема
U-Boot хранит переменные окружения (env) в энергонезависимой памяти. Это удобно: можно сохранить нужные настройки через saveenv и они переживут перезагрузку. Проблема в том, что bootcmd - переменная, которая определяет, как именно загружается система, - тоже хранится в этом env.
Если в процессе отладки или обновления env был сохранён с одним bootcmd, а в новой версии прошивки нужна другая последовательность загрузки, то сохранённый env будет молча перебивать то, что прописано в исходниках. Система загрузится по-старому, и понять почему - непросто: U-Boot не предупреждает, что использует значение из сохранённого env вместо скомпилированного.
Классическое решение - CONFIG_BOOTCOMMAND - задаёт значение bootcmd по умолчанию, но только если переменная не определена в env. Стоит один раз выполнить saveenv с любым bootcmd - и CONFIG_BOOTCOMMAND перестаёт действовать навсегда на этом устройстве.
Нужно было жёстко задать bootcmd при каждом старте, не отказываясь от saveenv для остальных переменных.