1

Понадобилось собрать систему для железки на стационарнике. Для возможности запуска ARM'овских бинарников используется QEMU, в полном соответствии со статьёй.
Файлы выполняются, о чём говорит следующее:

 Консоль:
andreilPC root # uname -a
Linux andreilPC 3.12.13-gentoo #1 SMP Tue May 20 13:10:34 FET 2014 x86_64 Intel(R) Pentium(R) CPU G2130 @ 3.20GHz GenuineIntel GNU/Linux
andreilPC root # file bin/bash
bin/bash: ELF 32-bit MSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, stripped
andreilPC root # bin/bash
/lib/ld-uClibc.so.0: No such file or directory
andreilPC root #

Но при попытке сделать chroot вылазит ошибка:
 Консоль:
andreilPC root # chroot .
chroot: failed to run command ‘/bin/bash’: No such file or directory

Попытался выполнить трассировку:

+ strace chroot . 

 Консоль:
andreilPC root # strace chroot . 
execve("/bin/chroot", ["chroot", "."], [/* 68 vars */]) = 0
brk(0)                                  = 0x60a000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6b53aec000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=212270, ...}) = 0
mmap(NULL, 212270, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f6b53ab8000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0M\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1732856, ...}) = 0
mmap(NULL, 3845176, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f6b53521000
mprotect(0x7f6b536c2000, 2097152, PROT_NONE) = 0
mmap(0x7f6b538c2000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a1000) = 0x7f6b538c2000
mmap(0x7f6b538c8000, 15416, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f6b538c8000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6b53ab7000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6b53ab6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6b53ab5000
arch_prctl(ARCH_SET_FS, 0x7f6b53ab6700) = 0
mprotect(0x7f6b538c2000, 16384, PROT_READ) = 0
mprotect(0x608000, 4096, PROT_READ)     = 0
mprotect(0x7f6b53aed000, 4096, PROT_READ) = 0
munmap(0x7f6b53ab8000, 212270)          = 0
brk(0)                                  = 0x60a000
brk(0x62b000)                           = 0x62b000
open("/usr/lib64/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=5261392, ...}) = 0
mmap(NULL, 5261392, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f6b5301c000
close(3)                                = 0
chroot(".")                             = 0
chdir("/")                              = 0
execve("/bin/bash", ["/bin/bash", "-i"], [/* 68 vars */]) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/charset.alias", O_RDONLY|O_NOFOLLOW) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8chroot: )                 = 8
write(2, "failed to run command \342\200\230/bin/ba"..., 37failed to run command ‘/bin/bash’) = 37
open("/usr/share/locale/ru_RU.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1
close(1)                                = 0
close(2)                                = 0
exit_group(127)                         = ?
+++ exited with 127 +++

Судя по логу, оно не может найти /bin/bash. Но он же есть! Это подтверждается попыткой его прямого запуска (
Везде пишут, что подобная ошибка вылазит при неустановленном qemu-user, но он-то у меня стоит:

 Консоль:
andreilPC root # ls -l usr/bin/qemu-static-armeb*
-rwxr-xr-x 1 root root 3196136 май 28 08:44 usr/bin/qemu-static-armeb
-rwxr-xr-x 1 root root 1825424 май 28 08:44 usr/bin/qemu-static-armeb-binfmt

Никак не могу понять, ЧЯДНТ ac

PS: В папке "root" лежит содержимое архива "stage3-armeb-uclibc-softfloat-2005.1.tar.bz2", скачанного с официального репозитория - то, что надо для моей железки...
PPS: Попытка выполнить chroot с полным путём к каталогу не предлагать - тот же результат:

 Консоль:
andreilPC root # chroot /media/work/Dev/ARM/NAS/root/
chroot: failed to run command ‘/bin/bash’: No such file or directory

2

заклинания в binfmt_misc правильные прописал? для нужной архитектуры?

andreil пишет:

Везде пишут, что подобная ошибка вылазит при неустановленном qemu-user, но он-то у меня стоит:

а собран он правильно? emerge --info qemu
и в chroot не забыл его поставить?

andreil пишет:

PS: В папке "root" лежит содержимое архива "stage3-armeb-uclibc-softfloat-2005.1.tar.bz2", скачанного с официального репозитория - то, что надо для моей железки...

распаковал его правильно? ls -l bin/bash

qemu-wrapper сделал, как в хендбуке написано? ядро там правильное указано?

95% процентов проблем находятся между клавиатурой и стулом.

3

Fat-Zer пишет:

заклинания в binfmt_misc правильные прописал? для нужной архитектуры?

Установлен демон, который поставил в автозагрузку:

 Консоль:
andreilPC andreil # cat /proc/sys/fs/binfmt_misc/*
enabled
interpreter /usr/bin/qemu-arm
flags: P
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00ffffffffffff00fffeffffff
enabled
interpreter /usr/bin/qemu-armeb
flags: P
offset 0
magic 7f454c4601020100000000000000000000020028
mask ffffffffffffff00fffffffffffffffffffeffff
cat: /proc/sys/fs/binfmt_misc/register: Недопустимый аргумент
enabled

Я же приводил пример запуска ARM-ELF без chroot'а - всё работает, но из-за неверного корня не находит библиотеки.

Fat-Zer пишет:

а собран он правильно? emerge --info qemu
и в chroot не забыл его поставить?

+ открыть спойлер

 Консоль:
andreilPC andreil # emerge --info qemu
Portage 2.2.8-r1 (default/linux/amd64/13.0, gcc-4.7.3, glibc-2.17, 3.12.13-gentoo x86_64)
=================================================================
                        System Settings
=================================================================
System uname: Linux-3.12.13-gentoo-x86_64-Intel-R-_Pentium-R-_CPU_G2130_@_3.20GHz-with-gentoo-2.2
KiB Mem:     3993968 total,     48476 free
KiB Swap:    4194300 total,   4186420 free
Timestamp of tree: Tue, 27 May 2014 12:15:01 +0000
ld GNU ld (GNU Binutils) 2.23.2
ccache version 3.1.9 [disabled]
app-shells/bash:          4.2_p45
dev-java/java-config:     2.2.0
dev-lang/python:          2.7.5-r3, 3.2.5-r3, 3.3.3
dev-util/ccache:          3.1.9-r3
dev-util/cmake:           2.8.12.2
dev-util/pkgconfig:       0.28
sys-apps/baselayout:      2.2
sys-apps/openrc:          0.12.4
sys-apps/sandbox:         2.6-r1
sys-devel/autoconf:       2.13, 2.69
sys-devel/automake:       1.11.6, 1.12.6, 1.13.4
sys-devel/binutils:       2.23.2
sys-devel/gcc:            4.7.3-r1
sys-devel/gcc-config:     1.7.3
sys-devel/libtool:        2.4.2-r1
sys-devel/make:           3.82-r4
sys-kernel/linux-headers: 3.9 (virtual/os-headers)
sys-libs/glibc:           2.17
Repositories: gentoo ago ROKO__ stuff java spot-overlay gentoo-zh steam-overlay x-portage
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="* -@EULA"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -pipe -march=native -fomit-frame-pointer -mfpmath=sse -march=native -funroll-loops -mmmx -msse -msse2 -msse3"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.5/ext-active/ /etc/php/cgi-php5.5/ext-active/ /etc/php/cli-php5.5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -pipe -march=native -fomit-frame-pointer -mfpmath=sse -march=native -funroll-loops -mmmx -msse -msse2 -msse3"
DISTDIR="/usr/portage/distfiles"
EMERGE_DEFAULT_OPTS="-j3 -b"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs buildpkg collision-protect config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync metadata-transfer news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://ftp.byfly.by/pub/gentoo-distfiles/"
LANG="ru_RU.utf8"
LC_ALL=""
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j3"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/var/lib/layman/ago /var/lib/layman/ROKO__ /var/lib/layman/stuff /var/lib/layman/java /var/lib/layman/spot-overlay /var/lib/layman/gentoo-zh /var/lib/layman/steam /usr/local/portage"
SYNC="rsync://ftp.byfly.by/gentoo-portage/"
USE="10bit X aac acl acpi alsa amd64 berkdb bindist bzip2 cairo cli consolekit cracklib crypt cuda cups curl cxx dbus directfb dri dts ebook egl encode exif fam fbcon ffmpeg flac fortran gdbm gif gles gles2 gpm hddtemp hwdb iconv ipv6 jpeg kde kipi lame lcms ldap libass libnotify lm_sensors lzma mad minizip mmx mng modules mp3 mp4 mpeg multilib ncurses nls nptl ntfsprogs nvidia ogg openal opengl openmp oss pam pango pcre pdf phonon plasma png ppds pulseaudio pulsesound qt3support qt4 rar readline samba sasl sdl session sqlite sse sse2 ssl startup-notification svg tcpd theora tiff tk truetype udisks unicode upower usb vdpau vlc vorbis win32 wxwidgets x264 xcb xcomposite xinerama xml xscreensaver xv xvid zip zlib" ABI_X86="32 64" ALSA_CARDS="hda-intel" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CURL_SSL="openssl" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="ru en" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python3_2 python2_7" QEMU_SOFTMMU_TARGETS="arm armeb" QEMU_USER_TARGETS="arm armeb" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="nvidia" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, INSTALL_MASK, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON

=================================================================
                        Package Settings
=================================================================

app-emulation/qemu-1.5.3 was built with the following:
USE="aio alsa caps curl filecaps jpeg ncurses opengl png pulseaudio sasl sdl seccomp threads uuid vhost-net vnc -accessibility -bluetooth -debug -fdt (-glusterfs) -gtk -iscsi -mixemu -python -rbd (-selinux) -smartcard -spice -static -static-softmmu -static-user -systemtap -tci -test -tls -usbredir -vde -virtfs -xattr -xen -xfs" PYTHON_TARGETS="python2_7 -python2_6" QEMU_SOFTMMU_TARGETS="(arm) (-alpha) -cris -i386 -lm32 (-m68k) -microblaze -microblazeel (-mips) -mips64 -mips64el -mipsel -moxie -or32 (-ppc) (-ppc64) -ppcemb -s390x -sh4 -sh4eb (-sparc) -sparc64 -unicore32 -x86_64 -xtensa -xtensaeb" QEMU_USER_TARGETS="(arm) armeb (-alpha) -cris -i386 (-m68k) -microblaze -microblazeel (-mips) -mips64 -mips64el -mipsel -mipsn32 -mipsn32el -or32 (-ppc) (-ppc64) -ppc64abi32 -s390x -sh4 -sh4eb (-sparc) -sparc32plus -sparc64 -unicore32 -x86_64"

>>> Attempting to run pkg_info() for 'app-emulation/qemu-1.5.3'
/tmp/tmpVag2Xs/portage/app-emulation/qemu-1.5.3/temp/environment: line 190: warning: setlocale: LC_MESSAGES: cannot change locale (ru)
Using:
 
 
 
    USE=''

По мануалу сделал с новом корне:

 Консоль:
ROOT=$PWD/ emerge -K qemu-user

Об этом, опять-же, писал в первом посте - вывел список установленных бинарников  в новом корне.

Fat-Zer пишет:

распаковал его правильно? ls -l bin/bash

Ещё раз повторюсь - бинарники запускаются, в первом посте как раз пример запуска bin/bash.

Fat-Zer пишет:

qemu-wrapper сделал, как в хендбуке написано? ядро там правильное указано?

У меня не ARM, а ARMeb, для него такой враппер не нужен вроде как...

4

andreil пишет:

По мануалу сделал с новом корне:Консоль
ROOT=$PWD/ emerge -K qemu-user
Об этом, опять-же, писал в первом посте - вывел список установленных бинарников  в новом корне.

во-первых в хендбуке опечатка: пробел между qemu и user, поэтому и спросил...
во-вторых, оно устарело... и то что qemu-user замаскирован тебя не смутило?
в-третьих, qemu надо было собрать так: USE="static-user" emerge -1b app-emulation/qemu
про static в хендбуке упомянули, но оно устарело и нужен только static-user... про -b или забыли или потерялось в процессе переписывания...
потом установить его надо будет так: ROOT=$PWD/ emerge -K qemu.

чтобы оставить всё чистеньким, старый пакет можно перед этим  удалить: ROOT=$PWD/ emerge -С qemu-user

ЗЫ: пряч простынки под спойлеры или в [сode]

95% процентов проблем находятся между клавиатурой и стулом.

5 (29.05.2014 08:58:40 отредактировано andreil)

в-третьих, qemu надо было собрать так: USE="static-user" emerge -1b app-emulation/qemu

Пересобрал вчера - результат прежний.

про -b или забыли или потерялось в процессе переписывания...

Оно у меня в make.conf прописано:

EMERGE_DEFAULT_OPTS="-j3 -b"

чтобы оставить всё чистеньким, старый пакет можно перед этим  удалить: ROOT=$PWD/ emerge -С qemu-user

Удалил. Пытаюсь установить бинарный qemu:

 Консоль:
andreilPC root # ROOT=$PWD/ emerge -K qemu 
Calculating dependencies... done!

emerge: there are no ebuilds to satisfy "x11-misc/shared-mime-info" for /media/work/Dev/ARM/NAS/root/.
(dependency required by "dev-libs/glib-2.38.2-r1" [binary])
(dependency required by "app-emulation/qemu-1.5.3" [binary])
(dependency required by "qemu" [argument])


То есть оно пытается и ещё кучу пакетов установить ac

И ещё - посмотрел содержимое бинарного пакета qemu, сгенерированного после emerge. Там бинарники ТОЛЬКО для хостовой машины. Попробую вручную скопировать файлы...

6

Распаковал qemu вручную. Теперь вроде бы пытается запуститься, но с другой ошибкой:

 Консоль:
andreilPC root # chroot .
/bin/bash: /bin/bash: cannot execute binary file

При этом ручной запуск файла работает, то есть проблема не в хостовом qemu:
 Консоль:
andreilPC root # ./bin/bash
/lib/ld-uClibc.so.0: No such file or directory

7

andreil пишет:

То есть оно пытается и ещё кучу пакетов установить

emerge --nodeps есть... но можно и ручками...

andreil пишет:

Там бинарники ТОЛЬКО для хостовой машины.

так поидей и должно быть, или я не правильно понял «ТОЛЬКО»...

andreil пишет:

При этом ручной запуск файла работает, то есть проблема не в хостовом qemu:

попробуй с LD'шными переменными поиграться, чтобы из хост системы запустить... сейчас рецепт не дам, но все необходимые ингредиенты есть в man ld.so

andreil пишет:

/bin/bash: /bin/bash: cannot execute binary file

гм... это похоже уже пишет сам bash из chroot'а... попробуй собери статический busybox кросскомпилом и за'chroot'ся в него....

95% процентов проблем находятся между клавиатурой и стулом.

8 (29.05.2014 17:55:57 отредактировано andreil)

Собрал bysybox. Естественно, получился один бинарник и куча линков. Запустил через chroot:

 Консоль:
andreilPC root # chroot .
/lib/ld-uClibc.so.0: Invalid ELF image for this architecture

Копнув глубже, увидел, что косяк в скомпиленном busybox:
 Консоль:
ndreilPC root # file lib/ld-uClibc-0.9.27.so
lib/ld-uClibc-0.9.27.so: ELF 32-bit MSB shared object, ARM, version 1, dynamically linked, stripped
andreilPC root # file bin/busybox
bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped

Надо компилятор иначе собирать было, где-то я скосячил ac ...

За сегодня с помощью buildroot собрал основу ARM-системы (для тестов). Попытался там запустить:

 Консоль:
andreilPC target_ # chroot . /bin/busybox
BusyBox v1.22.1 (2014-05-28 16:33:21 FET) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

То есть всё вроде как работает, но с бинарниками из http://distfiles.gentoo.org/experimenta … ed/stages/ не работает ac
Буду пытаться сделать из полученного костяка Gentoo... Предстоит много секаса с portage и пр...

9

andreil пишет:

То есть всё вроде как работает, но с бинарниками из http://distfiles.gentoo.org/experimenta … ed/stages/ не работает

ты на даты то глянь — они же древние, как гавно мамонта... давай читай хендбук с начала и кросскомпилом орудуй... =)
благо, в генте он собирается относительно просто... у меня правда с uclibc и softfloat'ом кросс не завёлся, а вот gnueabi прошло на ура... если оно принципиально, то скорей всего придётся подумать...

95% процентов проблем находятся между клавиатурой и стулом.

10

Fat-Zer пишет:

благо, в генте он собирается относительно просто... у меня правда с uclibc и softfloat'ом кросс не завёлся, а вот gnueabi прошло на ура... если оно принципиально, то скорей всего придётся подумать...

crossdev косячит с uclibc - пришлось вручную собирать. Как раз сегодня на работе и собрал. Завтра буду делать stage1...

11

andreil, это... я только что скачал тот stage3-armeb-uclibc-softfloat-2005.1.tar.bz2 и спокойно в него за'chroot'ился... вообще без проблем...
правда из-за древности обновлять её будет не легко...

[added]
кстати, заглянул в логи и конфигурационные скрипты gcc — похоже CHOST того stage'а устарел... crossdev uclibc вот с таким tuple'ом собирает: armeb-softfloat-linux-uclibceabi

95% процентов проблем находятся между клавиатурой и стулом.