v. О выпуске Multilib

Что такое Multilib

Сегодня большинство систем в мире имеют размер слова 64 бита. Размер слова - это количество бит, которое может быть использовано одновременно наиболее эффективным способом. Предыдущие архитектуры процессоров x86 имели размер слова 32 бита, это означает, что у них другое понимание того, как лучше выравнивать данные в памяти, а также у них свой механизм обращения к памяти другого размера. Хотя набор команд 64-разрядных процессоров довольно схож с инструкциями 32-разрядных процессоров, двоичные файлы (объекты, скомпилированные в машинный код) не могут быть непосредственно выполнены в 64-разрядных системах.

Multilib - это механизм, обеспечивающий поддержку 32-разрядных двоичных файлов, чтобы они могли выполняться на современных 64-разрядных процессорах.

Зачем делать Multilib-систему?

С образовательной точки зрения LFS в своей классической форме, вероятно, является лучшим способом увидеть, как система Linux собирается из исходного кода. Нет необходимости смешивать различные архитектуры. Но когда необходимо запустить 32-битные двоичные файлы и вы не хотите собирать полностью 32-битную систему (что в наши дни было бы пустой тратой ресурсов), тогда LFS-multilib — это вариант. Примерами такой необходимости могут быть

  • Программное обеспечение с закрытым исходным кодом/без исходного кода доступное только для 32-разрядной версии. Это может относиться к драйверу принтера или любым другим драйвером оборудования, двоичные файлы которого предоставляет компания-разработчик. Если у вас есть такой драйвер, LFS-multilib может помочь вам запустить его

  • Если вы хотите выйти далеко за рамки LFS и настроить платформу виртуализации, такую как VirtualBox, вам понадобится поддержка multilib

  • или даже просто потому, что вы можете

Multilib версия LFS дополняет то, что было сказано в предыдущем разделе, когда речь шла о целевых архитектурах. С одной стороны, multilib версия ориентирована и ограничена только архитектурой x86_64, с другой стороны, она расширяет инструкции для использования обеих возможных архитектур, а именно 32-разрядной как и 64-разрядной.

Сборка multilib-системы также немного выходит за рамки базового образовательного подхода LFS, который заключается в том, чтобы показать вам, как собрать систему Linux с нуля. Для этого не требуется поддержка дополнительных архитектур, отличных от архитектуры вашей системы по умолчанию. Если ранее вы не собирали систему по классической книге LFS, вам рекомендуется сделать это перед использованием этого издания.

Сборка Multilib системы

Сборка 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.