У меня был некоторый опыт с uboot, правда для другой ОС
Если у вас какая-то стандартная покупная плата, то возможно в uboot уже есть готовый config. Обычно производители плат в документации указывают как собрать uboot под их плату (если они поддерживают uboot), либо это можно нагуглить в интернете.
Если же плата самодельная, то берете самый близкий для вашей платы config (вы же брали за основу какой-то референс дизайн платы, вот эту плату и берите за основу), переименовываете его и вносите в него соответствующие изменения.
Бывает, что вместе с config'ом требуется вносить изменения и в dts, они в uboot лежат в
./arch/<platform name>/dts
. Название используемых dts лежит в переменной CONFIG_DEFAULT_DEVICE_TREE и/или в CONFIG_OF_LIST в config файле.
Config файл - это просто набор параметров, которые превращаются в набор инструкций #define при сборке.
С dts все сложнее. Там целый язык описания железа.
Для сборки uboot рекомендую следующую последовательность:
1. Заведите для сборки отдельный пустой каталог. Он будет текущим каталогом для всех дальнейших команд
2. Пусть каталог где лежит сам uboot хранится в переменной UBOOT_DIR. Архитектура процессора вашей платы (например arm) в переменной ARCH. Префикс для кросскомпилятора в CROSS (например arm-linux-gnueabihf-). Имя выбранного defconfig файла в переменной DEFCONFIG (имя указываете вместе с суффиксом _defconfig)
3. Очистка каталога сборки:
make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS distclean
Эта команда пригодится при пересборках в случае изменения конфигурации
4. Подготовка конфигурации для сборки:
make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS $DEFCONFIG
5. Сборка:
make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS
Несколько полезняшек:
1. Вы можете задавать дополнительную опцию для make:
-O <путь>
Она задает каталог, в котором будет происходить сборка. Этот каталог make создаст сама. Это бывает удобно, если работаете сразу с несколькими конфигами.
2. В uboot встроен конфигуратор конфигов :) Конфигурация происходит в текстовом режиме с помощью меню, присутствуют подсказки для опций и т.п. Когда вы создали начальную конфигурацию в п.4 выдайте команду:
make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS menuconfig
Тут то же можно добавлять опцию -O для выбора каталога с конфигурацией. После исправления конфигурации, не забудьте ее сохранить.
Дальше нужно дать команду:
make -C $UBOOT_DIR ARCH=$ARCH CROSS_COMPILE=$CROSS savedefconfig
Она создаст на основе текущей конфигурации defconfig файл в каталоге сборки. Этот файл можно переименовать в
<имя платы>_defconfig
и подложить в каталог с конфигами uboot и в дальнейшем использоавть его для сборки.
3. В каталоге с uboot дайте комаду
make help
для получения списка возможных опций.
4. Обычно я собираю uboot под линукс, но та же схема вполне работает и в WSL под виндой. Набор кросс-компиляторов есть в портах (в WSL исопльзовал дистрибутив ubuntu).
Желаю удачи!