Пожалуйста, проведите меня через шаги, необходимые для создания основного набора инструментов , достаточного для создания загрузочного образа Linux, и обсудите, почему все должно быть сделано так, как вы предлагаете .
Указатели на существующую документацию также очень ценятся. Я изучал Linux с нуля и имею некоторый опыт создания образов Gentoo с использованием специальных инструментов для дистрибутива. Я также посмотрел на документацию различных инструментов, используемых для создания кросс-компиляции наборов инструментов для встроенных устройств.
Однако в документации к этим инструментам обсуждается только компиляция цепочек инструментов, фактически использующих эти инструменты, а не то, как они это делают, и почему не иначе. Часто в этих ресурсах также упоминается, что другие инструменты делают это по-другому (и, конечно, хуже), поэтому у меня возникает ощущение, что простое чтение исходного кода только поможет мне узнать, как работает данный инструмент сборки, а не даст представление о реальном процессе, и это возможно изменение.
Так что меня не очень интересуют дискуссии об инструментах для автоматизации создания цепочки инструментов, а вместо этого комментирует инструкции о том, как сделать это вручную . Также обратите внимание, что на данный момент я планирую собрать и запустить образ на той же машине, поэтому мне не нужно выполнять кросс-компиляцию. Но я по-прежнему заинтересован в дискуссиях о кросс-компиляции, но, вероятно, фокус должен быть в другом месте. То, что еще нужно для создания загрузочного образа, не является частью этого вопроса - просто создаем цепочку инструментов, чтобы получить его.
Чтобы помочь вам понять, где я нахожусь, вот несколько вопросов, которые у меня есть, и некоторые вещи, которые я верю узнать:
Я понимаю, что даже при первоначальной сборке важно отделить набор инструментов, используемый для создания образа, от образа хоста, чтобы избежать ссылок на библиотеки, которые могут быть недоступны позже (по другим причинам?). Я не знаю, достаточно ли соответствующим образом изменить переменные окружения (какие?) Или лучше всего создать цепочку инструментов, chroot и пересбор (что я получу от перестроения?). Что может пойти не так, если делать первое? Я читал, что сборка gcc дважды (с использованием первого для сборки второго) излишня, так как в любом случае это делает система сборки. Если да, то какие различия в двух сборках он может обнаружить, почему они имеют значение? Обязательно ли что-то пошло не так, если две сборки отличаются, и что с этим делать, если они делают. Приводит ли кросс-компиляция, когда выполнено правильно, к тем же двоичным файлам, что и при исходном выполнении? А если нет, то почему все не так плохо, и многие проекты выбирают именно так?