chroot в среду другой арки

Следуя книге Linux from Scratch, мне удалось создать набор инструментов для ARM на РУКА. Это до 6 главы книги, а на самой плате ARM я мог без проблем продолжить дальше. У меня вопрос: могу ли я использовать подготовленную среду для продолжения сборки программного обеспечения из главы 6 на моем ноутбуке x86_64 Fedora 16? Я думал, что пока у меня настроены все бинарники, я могу просто скопировать их на ноут, chroot внутри и почувствовать себя как на ARM плате, но использование команды из книги не дает результата:

 `# chroot "$LFS" /tools/bin/env -i  HOME=/root TERM="$TERM" PS1='\u:\w\$ 
  PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash --login +h
      chroot: failed to run command `/tools/bin/env': No such file or directory`

Двоичный файл есть, но он не принадлежит этой системе:

 `# ldd /tools/bin/env 
      not a dynamic executable`

Бинарник собран по книге: # readelf -l /tools/bin/env | grep interpreter [Requesting program interpreter: /tools/lib/ld-linux.so.3]

Поэтому мне интересно, есть ли способ, например, использование правильных переменных среды для CC LD READELF, для продолжения сборки для ARM с использованием этих инструментов на хосте x86_64.

Спасибо.


person 0x18h    schedule 10.07.2012    source источник


Ответы (3)


Неа. Вы не можете запускать двоичные файлы ARM на x86, поэтому вы не можете войти в его chroot. Никакое количество переменных среды не изменит этого.

Возможно, вы сможете продолжить процесс, создав образ файловой системы для цели и запустив его под эмулятором (например, qemu-system-arm), но это совсем другое дело.

person Community    schedule 10.07.2012
comment
Спасибо! Вот этого я и боялся :) - person 0x18h; 11.07.2012
comment
Я не куплюсь на это. Я использовал qemu для входа в корневую файловую систему для встроенного устройства. Внутри этого chroot я могу запустить /qemu-arm /bin/ls, например, для запуска BusyBox ls, который отлично работает. Все, что нужно, — это чтобы ядро ​​имело обработчик двоичных файлов ARM, который передает их интерпретатору /qemu. Вы не можете запускать двоичные файлы ARM на x86 - это та же проблема, что и вы не можете запускать сценарии оболочки. Почему, все, что им нужно, это переводчик. - person Kaz; 20.04.2021

Да, вы, безусловно, можете выполнить chroot в корневую файловую систему ARM на компьютере с архитектурой x86.

В основном, вот так:

$ sudo chroot /path/to/arm/rootfs /bin/sh
sh-4.3# ls --version 2>&1 | head
/bin/ls: unrecognized option '--version'
BusyBox v1.22.1 (2017-03-02 15:41:43 CST) multi-call binary.

Usage: ls [-1AaCxdLHRFplinsehrSXvctu] [-w WIDTH] [FILE]...

List directory contents

    -1  One column output
    -a  Include entries which start with .
    -A  Like -a, but exclude . and ..
sh-4.3# ls
bin       css       dev       home      media     proc      sbin      usr       wav
boot      data      etc       lib       mnt       qemu-arm  sys       var

Мой rootfs предназначен для небольшого встроенного устройства, поэтому все основано на BusyBox.

Как это работает? Во-первых, у меня в ядре работает поддержка binfmt-misc. Мне не нужно было ничего делать; он поставляется с Ubuntu 18. Когда ядро ​​​​видит двоичный файл ARM, оно передает его зарегистрированному интерпретатору /usr/bin/qemu-arm-static.

Статический исполняемый файл с таким именем находится внутри моей rootfs:

sh-4.3# ls /usr/bin/q*
/usr/bin/qemu-arm-static

Я получил его из пакета Ubuntu. Я установил:

$ apt-get install qemu-user-static

а затем скопировал /usr/bin/qemu-arm-static в подкаталог usr/bin дерева rootfs.

Вот и все; теперь я могу chroot войти в эту rootfs, даже не упоминая QEMU в командной строке chroot.

person Kaz    schedule 20.04.2021

Нет, вы не можете, по крайней мере, не используя chroot. У вас в руках набор инструментов с целью ARM для хоста ARM. Двоичные файлы напрямую исполняются только на архитектурах, совместимых с архитектурой их хоста, а x86_64 не совместим с ARM.

Тем не менее, вы можете использовать эмулируемую среду. qemu, например, предлагает два режима эмуляции для ARM: qemu-system-arm, который эмулирует всю систему на основе ARM, и qemu-arm который использует собственные библиотеки ARM для обеспечения более тонкого уровня эмуляции для запуска исполняемых файлов ARM Linux на хостах, отличных от ARM.

person thkala    schedule 10.07.2012