Ports/arm/chroot

Материал из ALT Linux Wiki

< Ports | arm(Различия между версиями)
Перейти к: навигация, поиск
(Import from freesource.info)
м (+cat)
 
(2 промежуточные версии не показаны)
Строка 1: Строка 1:
[[Category:Sisyphus]]
[[Category:Sisyphus]]
-
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/ports/arm/chroot}}
+
[[Категория:ARM]]
 +
{{Crap}}
=== Chroot into ARM root ===
=== Chroot into ARM root ===
-
Для того чтобы сделать chroot в arm-овый root с "большой" машины нам понадобится qemu, ядро с поддержкой binfmt и собственно root куда будем chroot'иться
+
Для того чтобы сделать chroot в arm-овый root с "большой" машины нам понадобится qemu, ядро с поддержкой binfmt и собственно готовая распакованная или смонтированная rootfs куда будем chroot'иться.
Поехали.
Поехали.
 +
 +
Для примера предположим, что rootfs будет находиться в каталоге /home/user/arm.
==== Qemu ====
==== Qemu ====
-
К сожелению стандартный qemu нам не подходит. Модифицированный можно взять тут - git://git.altinux.org/people/kas/packages/qemu.git. За основу взята версия 0.8.2-alt1 от at@. Добавлена сборка статической версии arm-user.
+
На данный момент можно использовать qemu-user-binfmt_misc-0.12.1, готовый пакет подходит. В нем содержится /usr/bin/qemu-arm.static который и требуется для задачи. (apt-get install qemu-user-binfmt_misc). Но если вам надо собрать самостоятельно, как было раньше до появления готового пакета, то:
-
Забираем. Собераем. Ставим.
+
<pre>git-clone git://git.altlinux.org/people/kas/packages/qemu.git
-
 
+
gear-hsh-build --prefix="/home/kas/hasher" --target=x86_64 -- -- --packager='Kirill A. Shutemov <kas@altlinux.org>'
-
<pre>> git-clone git://git.altlinux.org/people/kas/packages/qemu.git
+
sudo rpm -Uvh /home/kas/hasher/*/%_target_cpu/RPMS.hasher/qemu-0.8.2-alt1.1.%_target_cpu.rpm</pre>
-
> gear-hsh-build --prefix="/home/kas/hasher" --target=x86_64 -- -- --packager='Kirill A. Shutemov <kas@altlinux.org>'
+
-
> sudo rpm -Uvh /home/kas/hasher/*/%_target_cpu/RPMS.hasher/qemu-0.8.2-alt1.1.%_target_cpu.rpm</pre>
+
==== binfmt_misc ====
==== binfmt_misc ====
Строка 21: Строка 22:
Конфигурируем binfmt_misc на использование qemu для arm-овых elf'ов:
Конфигурируем binfmt_misc на использование qemu для arm-овых elf'ов:
-
<pre>> sudo modprobe binfmt_misc
+
<pre>sudo modprobe binfmt_misc
-
> sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
+
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
-
> sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static-%_target_cpu:" > /proc/sys/fs/binfmt_misc/register'</pre>
+
sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm.static:" > /proc/sys/fs/binfmt_misc/register'</pre>
-
==== Готовим root ====
+
Вероятно, что первые две операции вам не потребуются потому что они уже сделаны при загрузке (например, при установленном wine).
 +
Последнее поле в третьей строке, разделенной знаками : - это путь, по которому будет скопирован файл qemu-arm.static из пакета qemu-user-binfmt_misc (относительно корня rootfs).
-
Берём arm-вый корень.  К примеру [http://gentoo.osuosl.org/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2 http://gentoo.osuosl.org/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2].
+
Если в /proc/sys/fs/binfmt_misc/register уже что-то писалось, третья команда может выдавать ошибку:
-
Распаковываем в /usr/gnemul/qemu-arm/:
+
<pre>
-
<pre>> sudo mkdir -p /usr/gnemul/qemu-arm/
+
-bash: echo: write error: Invalid argument
-
> cd /usr/gnemul/qemu-arm/
+
</pre>
-
> sudo tar -xjpf ~/stage3-arm-uclibc-softfloat-20050811.tar.bz2</pre>
+
-
Копируем хостовый статический  qemu-arm внутрь arm'ового root'а:
+
Это исправляется командой
 +
<pre>
 +
echo -1 > /proc/sys/fs/binfmt_misc/arm
 +
</pre>
-
<pre>> sudo cp /usr/bin/qemu-arm-static-x86_64 /usr/gnemul/qemu-arm/usr/bin</pre>
+
и повторным вводном третьей команды.
 +
 
 +
==== Готовим rootfs ====
 +
 
 +
rootfs можно собрать самостоятельно на основе ALTLinux и [http://git.altlinux.org/people/kas/packages/?p=mkimage-profile-armrootfs.git вот этого профиля], например. см. прилагаемый README с примерным кратким списком команд.
 +
 
 +
Можно взять и готовый не от ALTLinux:
 +
 
 +
Можно посмотреть [http://www.at91.com/linux4sam/bin/view/Linux4SAM/OpenEmbeddedAngstromGet тут].
 +
 
 +
Или к примеру (вероятно, устарел) [http://gentoo.osuosl.org/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2 http://gentoo.osuosl.org/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2].
 +
 
 +
Распаковываем в /home/user/arm/:
 +
<pre>sudo mkdir -p /home/user/arm/
 +
cd /home/user/arm/
 +
sudo tar -xf arm-rootfs.tar</pre>
 +
 
 +
получаем в /home/user/arm/rootfs/ весь набор каталогов /bin, /etc и т.д.
 +
 
 +
Копируем хостовый статический  qemu-arm внутрь arm'ового root'а:
 +
<pre>sudo cp /usr/bin/qemu-arm.static /home/user/arm/rootfs/usr/bin</pre>
==== chroot ====
==== chroot ====
Строка 42: Строка 66:
Собственно chroot'имся
Собственно chroot'имся
-
<pre>> sudo chroot /usr/gnemul/qemu-arm bin/bash  
+
<pre>$ sudo chroot /home/user/arm/rootfs bin/bash
-
# uname -a
+
bash-3.2# uname -a
-
Linux kas.velesys.com 2.6.16-wks26-up-alt8 #1 PREEMPT Tue Jul 11 02:41:28 MSD 2006 armv5tel   GNU/Linux</pre>
+
Linux combr.local 2.6.27-std-def-alt15 #1 SMP Tue Mar 24 15:17:22 UTC 2009 armv5tel GNU/Linux
 +
bash-3.2# ls
 +
bin  dev  home  media  opt  root  srv  tmp  var
 +
boot  etc  lib  mnt    proc  sbin  sys  usr
 +
</pre>
Надеюсь кому-нить понадобится ;)
Надеюсь кому-нить понадобится ;)
-
Если будут проблемы/патчи/замечания стучитесь в jabber kas@
 

Текущая версия на 16:17, 22 декабря 2011

48px-Mail-mark-junk red.svg.png
Эта статья протухла.
Её нужно существенно доработать или удалить


Содержание

Chroot into ARM root

Для того чтобы сделать chroot в arm-овый root с "большой" машины нам понадобится qemu, ядро с поддержкой binfmt и собственно готовая распакованная или смонтированная rootfs куда будем chroot'иться.

Поехали.

Для примера предположим, что rootfs будет находиться в каталоге /home/user/arm.

Qemu

На данный момент можно использовать qemu-user-binfmt_misc-0.12.1, готовый пакет подходит. В нем содержится /usr/bin/qemu-arm.static который и требуется для задачи. (apt-get install qemu-user-binfmt_misc). Но если вам надо собрать самостоятельно, как было раньше до появления готового пакета, то:

git-clone git://git.altlinux.org/people/kas/packages/qemu.git
gear-hsh-build --prefix="/home/kas/hasher" --target=x86_64 -- -- --packager='Kirill A. Shutemov <kas@altlinux.org>'
sudo rpm -Uvh /home/kas/hasher/*/%_target_cpu/RPMS.hasher/qemu-0.8.2-alt1.1.%_target_cpu.rpm

binfmt_misc

Конфигурируем binfmt_misc на использование qemu для arm-овых elf'ов:

sudo modprobe binfmt_misc
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm.static:" > /proc/sys/fs/binfmt_misc/register'

Вероятно, что первые две операции вам не потребуются потому что они уже сделаны при загрузке (например, при установленном wine). Последнее поле в третьей строке, разделенной знаками : - это путь, по которому будет скопирован файл qemu-arm.static из пакета qemu-user-binfmt_misc (относительно корня rootfs).

Если в /proc/sys/fs/binfmt_misc/register уже что-то писалось, третья команда может выдавать ошибку:

-bash: echo: write error: Invalid argument

Это исправляется командой

echo -1 > /proc/sys/fs/binfmt_misc/arm

и повторным вводном третьей команды.

Готовим rootfs

rootfs можно собрать самостоятельно на основе ALTLinux и вот этого профиля, например. см. прилагаемый README с примерным кратким списком команд.

Можно взять и готовый не от ALTLinux:

Можно посмотреть тут.

Или к примеру (вероятно, устарел) http://gentoo.osuosl.org/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2.

Распаковываем в /home/user/arm/:

sudo mkdir -p /home/user/arm/
cd /home/user/arm/
sudo tar -xf arm-rootfs.tar

получаем в /home/user/arm/rootfs/ весь набор каталогов /bin, /etc и т.д.

Копируем хостовый статический qemu-arm внутрь arm'ового root'а:

sudo cp /usr/bin/qemu-arm.static /home/user/arm/rootfs/usr/bin

chroot

Собственно chroot'имся

$ sudo chroot /home/user/arm/rootfs bin/bash
bash-3.2# uname -a
Linux combr.local 2.6.27-std-def-alt15 #1 SMP Tue Mar 24 15:17:22 UTC 2009 armv5tel GNU/Linux
bash-3.2# ls
bin   dev  home  media  opt   root  srv  tmp  var
boot  etc  lib   mnt    proc  sbin  sys  usr

Надеюсь кому-нить понадобится ;)

 
Личные инструменты