Выпало на мою долю намедни создать некую демо-версию embedded проекта, включающего в себя необходимость:
- патчить и собирать U-Boot, а также загрузочные скрипты для него;
- патчить и собирать linux kernel;
- собирать свой модуль ядра;
- собирать пачку своих юзер-спейс утилит для этой железки;
- все это добро вместе со своими инит-скриптами и существующей 3rd-party фс запаковывать в рамдиск и
- деплоить это добро на самой железке.
Отсюда вопрос о структуре проекта и алгоритме его сборки. Требование: весь код, написанный нами, должен быть в нашем гит-репозитории. Все, что написано нами не было, по возможности находиться там не должно.
Первое, что пришло на ум - это хранить все сторонние исходники (kernel, u-boot), тулчейн и rootfs в отдельной расшаренной для всех директории. При сборке проекта - копировать, например, исходники ядра в директорию сборки, поверх него накладывать свои патчи и собирать. Артефакты в виде модулей, собранных утилит и прочих инитскриптов складывать в созданную для этой цели копию rootfs, которую потом запаковать. Так же поступать и с бутлоадером.
Были мысли по поводу субрепозиториев для бутлоадера и исходников ядра, но опять же - есть вероятность, что патчи будут создаваться кем-то другим - единственное, что можно гарантировать - они будут в нашем главном репозитории (т.е. во время сборки нужно будет как-то их по-прежнему накладывать).
Кто имеет опыт работы в таких проектах? Как это делается по-взрослому? Может, я чего-то недопонимаю по поводу субрепозиториев? Или чего-то недопонимаю в принципе?