Сегодня большинство систем в мире имеют размер слова 64 бита. Размер слова - это количество бит, которое может быть использовано одновременно наиболее эффективным способом. Предыдущие архитектуры процессоров x86 имели размер слова 32 бита, это означает, что у них другое понимание того, как лучше выравнивать данные в памяти, а также у них свой механизм обращения к памяти другого размера. Хотя набор команд 64-разрядных процессоров довольно схож с инструкциями 32-разрядных процессоров, двоичные файлы (объекты, скомпилированные в машинный код) не могут быть непосредственно выполнены в 64-разрядных системах.
Multilib - это механизм, обеспечивающий поддержку 32-разрядных двоичных файлов, чтобы они могли выполняться на современных 64-разрядных процессорах.
С образовательной точки зрения LFS в своей классической форме, вероятно, является лучшим способом увидеть, как система Linux собирается из исходного кода. Нет необходимости смешивать различные архитектуры. Но когда необходимо запустить 32-битные двоичные файлы и вы не хотите собирать полностью 32-битную систему (что в наши дни было бы пустой тратой ресурсов), тогда LFS-multilib — это вариант. Примерами такой необходимости могут быть
Программное обеспечение с закрытым исходным кодом/без исходного кода доступное только для 32-разрядной версии. Это может относиться к драйверу принтера или любым другим драйвером оборудования, двоичные файлы которого предоставляет компания-разработчик. Если у вас есть такой драйвер, LFS-multilib может помочь вам запустить его
Если вы хотите выйти далеко за рамки LFS и настроить платформу виртуализации, такую как VirtualBox, вам понадобится поддержка multilib
или даже просто потому, что вы можете
Multilib версия LFS дополняет то, что было сказано в предыдущем разделе, когда речь шла о целевых архитектурах. С одной стороны, multilib версия ориентирована и ограничена только архитектурой x86_64, с другой стороны, она расширяет инструкции для использования обеих возможных архитектур, а именно 32-разрядной как и 64-разрядной.
Сборка multilib-системы также немного выходит за рамки базового образовательного подхода LFS, который заключается в том, чтобы показать вам, как собрать систему Linux с нуля. Для этого не требуется поддержка дополнительных архитектур, отличных от архитектуры вашей системы по умолчанию. Если ранее вы не собирали систему по классической книге LFS, вам рекомендуется сделать это перед использованием этого издания.
Сборка multilib системы не сильно отличается от сборки системы с использованием классической книги LFS. Помимо некоторых настроек, наиболее заметным отличием является то, что multilib требует компиляции некоторых приложений до трех раз: один раз для основной 64-разрядной архитектуры, второй - для 32-разрядной архитектуры (m32) и еще раз для 32-разрядной архитектуры с 32-битным доступом к памяти и 64-битным набором команд (mx32).
Продолжайте только в том случае, если ваша система удовлетворяете следующим требованиям:
у вас компьютер, совместимый с x86_64
Если у вас есть доступ к конфигурации ядра вашей системы,
вам потребуется установить параметры: CONFIG_IA32_EMULATION=y
,
чтобы выполнить сборку для m32
и CONFIG_X86_X32=y
, чтобы
собрать пакет для mx32
.
Если у вас нет доступа к конфигурации ядра вашей системы, вы можете проверить совместимость, выполнив следующие команды:
echo 'int main(){}' > dummy.c gcc -m32 dummy.c ./a.out gcc -mx32 dummy.c ./a.out
Если какая-либо из команд ./a.out возвращает сообщения "Exec format error", то ваше ядро собрано без поддержки нужных параметров для этой архитектуры в рамках LFS, поэтому вам, вероятно, следует собрать систему LFS без Multilib, но с необходимыми возможностями ядра и использовать ее для сборки системы Multilib.
у вас уже есть некоторый опыт работы с LFS
вам необходима поддержка 32-битных версий библиотек
Если выполнены все три условия, продолжайте собирать LFS в режиме multilib.