Как упомянуто в комментарии @Peter Cordes, первый вариант - полная эмуляция (эмуляция ядра и приложений x86_64), другой - перевод пользовательского режима QEMU (эмуляция только пользовательского режима, перевод системных вызовов в работающее ядро ppc64).Здесь мы собираемся использовать перевод пользовательского режима QEMU.
У вас должна быть работающая установка Gentoo ppc64, которая может быть достигнута с помощью Catalyst на x86, следующий шаг - получить крест x86_64.Среда разработки, если у вас ее еще нет при подготовке к Catalyst.Он создаст каталог / usr / x86_64-multilib-linux-gnu / и будет создан с помощью кросс-x86_64-multilib-linux-gnu / glibc и аналогичных ebuilds.
Затем вам потребуется QEMU с правильными целями (добавьте это в make.conf и установите qemu):
QEMU_USER_TARGETS="x86_64"
Чтобы разрешить запуск приложений x86_64, как и любого другого приложения, необходимо включить binfmt_misc (CONFIG_BINFMT_MISC) в ядре и загрузить определение ELF x86_64.Либо посмотрите на /etc/init.d/qemu-binfmt (Open-RC), либо добавьте этот файл /etc/binfmt.d/qemu-x86_64.conf и включите службу systemd-binfmt (для systemd):
:x86_64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e
Это позволит автоматически запускать двоичные файлы x86_64 с использованием qemu-x86_64.
Но если вы не используете chroot, он все равно не будет работать из-за отсутствующего компоновщика ld и библиотек.Используя strace, вы можете видеть, что он пытается загружать библиотеки по разным путям.Он ищет компоновщик в /lib64/ld-linux-x86-64.so.2, поэтому мы должны создать там символическую ссылку.Для других библиотек он использует / lib64 / x86_64 и / usr / lib64 / x86_64, которые являются идеальными кандидатами для символических ссылок.Единственный оставшийся путь - это gcc libs, мы не можем добавить их в /etc/ld.so.conf.d, где находится ваш ppc64 GCC LDPATH, поэтому мы должны создать символические ссылки для отдельных файлов.Другими словами, вы хотите сделать что-то вроде этого:
sudo ln -s /usr/x86_64-multilib-linux-gnu/lib64 /lib64/x86_64
sudo ln -s /usr/x86_64-multilib-linux-gnu/usr/lib64 /usr/lib64/x86_64
sudo ln -s /lib64/x86_64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
sudo ln -s /usr/lib/gcc/x86_64-multilib-linux-gnu/7.3.0/libgcc_s.so.1 /lib/x86
После этого двоичные файлы x86 должны автоматически работать так же, как и любой другой двоичный файл, без использования явного chroot.
Вы можетестолкнулся с проблемой, что исполняемый файл не может загрузить библиотеки, несмотря на то, что вы видите, что библиотека x86_64 найдена.Все, что вы видите, это сбой mmap с ошибкой EFAULT и такие ошибки, как «ошибка при загрузке общих библиотек» или «не удалось сопоставить сегмент из общего объекта».Это потому, что ваше ядро не скомпилировано с размером страницы 4 КБ!В файле menuconfig ядра оно находится в разделе «Конфигурация ядра» -> «Размер страницы» (CONFIG_PPC_4K_PAGES = y).Это должно быть 4 КБ, потому что это стандартный размер страницы x86_64