да
Ответ всегда да, верно, просто нужно время, чтобы понять, как!
Трудный путь
Я буду запускать это на VPS, предоставленном Brightbox.com . Я использовал Nano Server (2 ЦП, 512 МБ ОЗУ, 20 ГБ дискового пространства) и образ сервера Ubuntu Precise 12.04 LTS. Он должен работать на эквивалентах EC2 или Linode и, конечно же, на вашей домашней Linux-машине. Сейчас я проверил его на моей (x86) установке Arch, но знаю, что он не работает на Ubuntu 10.04 LTS, потому что некоторые пакеты слишком старые.
Подготовка вашей системы - Debian / Ubuntu
Убедитесь, что ваша собственная система обновлена.
$ sudo apt-get update
$ sudo apt-get upgrade
Установите новое программное обеспечение
$ sudo apt-get install binfmt-support qemu qemu-user-static unzip
qemu
является ARM эмулятор, а qemu-user-static
и binfmt-support
позволяет запускать ARM исполняемые файлы без эмуляции ядра ARM. (Как это круто!?!)
Подготовка вашей системы - Arch
Я не могу найти статически связанных qemu
в репозиториях Arch, поэтому нам придется скомпилировать из исходного кода.
- Загрузите последнюю версию с http://git.savannah.gnu.org/cgit/qemu.git
Распакуйте и запустите
./configure --disable-kvm --target-list=arm-linux-user --static
Сборка с использованием make
и установка с помощью sudo make install
.
Запустите следующее как root
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/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register
echo ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-armeb:' > /proc/sys/fs/binfmt_misc/register
Внимание ! Не следует запускать произвольные команды, которые вы найдете в Интернете как root
- они были взяты из- qemu-binfmt-conf.sh
под типа ARM. Пожалуйста, извлеките команды из этого файла и запустите их.
Скачайте и распакуйте изображение
Перейдите на raspberrypi.org и загрузите нужное изображение. Распакуйте его и сохраните .img
файл где-нибудь полезным.
$ sudo mkdir -p /images/debian-squeeze
$ sudo wget "http://files.velocix.com/c1410/images/debian/6/debian6-19-04-2012/debian6-19-04-2012.zip" -O "/images/debian-squeeze.zip"
$ sudo unzip "/images/debian-squeeze.zip" -d /images/debian-squeeze
$ sudo rm /images/debian-squeeze.zip
Найдите правильный раздел
.img
Будет содержать 3 разделов, включая загрузочный раздел.
$ cd /images/debian-squeeze/debian6-19-04-2012/
$ fdisk -lu debian6-19-04-2012.img
Disk debian6-19-04-2012.img: 1949 MB, 1949999616 bytes
4 heads, 32 sectors/track, 29754 cylinders, total 3808593 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ee283
Device Boot Start End Blocks Id System
debian6-19-04-2012.img1 2048 155647 76800 c W95 FAT32 (LBA)
debian6-19-04-2012.img2 157696 3414015 1628160 83 Linux
debian6-19-04-2012.img3 3416064 3807231 195584 82 Linux swap / Solaris
Нам нужно знать смещение раздела Linux, в данном случае это 157696
сектора, а загрузочный раздел - в 2048
секторах. Каждый сектор составляет 512 байт, поэтому смещение корня составляет 157696*512=80740352
байты, а смещение загрузки - 2048*512=1048576
.
Смонтировать образ как петлевое устройство
Далее нам нужно смонтировать образ как файловую систему. Это можно сделать с помощью петлевого устройства. Мы используем смещение из предыдущего раздела, чтобы указать, mount
какие разделы монтировать и где. Порядок этих команд важен.
$ sudo mount -o loop,offset=80740352 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt
$ sudo mount -o loop,offset=1048576 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt/boot
Подготовка файловой системы.
Мы почти готовы chroot
войти в нашу файловую систему и начать установку нового программного обеспечения. Во-первых, мы должны установить эмулятор в наш образ, так как он не будет доступен после использования chroot
.
Debian / Ubuntu
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
Arch Linux
$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/
Все хост-системы
Нам также необходимо предоставить доступ к некоторым другим частям системы.
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
корневой
Мы сделали! chroot
прочь...
$ sudo chroot /mnt
Теперь вы находитесь в вашем Raspberry Pi, но сервисы не работают и т.д. Будьте осторожны, вы root!
Обновление / установка программного обеспечения - Debian Image
Для обновления программного обеспечения мы используем apt-get
.
# apt-get update
# apt-get upgrade
Вы также можете установить программное обеспечение, apt-get install
как обычно.
Обновление / установка программного обеспечения - Arch Image
Для обновления программного обеспечения мы используем pacman
.
# pacman -Syu
Вы также можете установить программное обеспечение, pacman -S
как обычно.
ПРИМЕЧАНИЕ. Вы можете работать в pacman
исходном режиме, следуя инструкциям, приведенным в разделе Как запустить нативное pacman
приложение для смонтированного образа? ,
Выход
Вы можете выйти chroot
с помощью Ctrl+ Dи размонтировать систему, запустив sudo umount /mnt
- вам придется размонтировать каждую точку монтирования отдельно.
Вы должны удалить qemu-user-static
из /usr/bin
или qemu-arm
из /usr/local/bin
RPi, тогда изображение готово к перепрошивке.
Заключительные слова
Это немного долго и утомительно, но сделайте это один раз, и вы узнаете много о том, как все это работает!
Обратите внимание на последние изображения
При попытке выполнить это на последних изображениях вы получите ошибку
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
Чтобы исправить эту ошибку, просто закомментируйте содержимое /etc/ld.so.preload
файла
Легкий путь - piimg
Я начал работать над утилитой, чтобы сделать многое для вас. Он называется piimg и его можно найти по адресу github.com/alexchamberlain/piimg .
Пока он может смонтировать SD-карту для вас, запустив
piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt
и снова размонтировать их, запустив
piimg umount /mnt
Вам просто нужно установить qemu
и chroot
прочь.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Я, Алекс Чемберлен, являюсь ведущим разработчиком piimg
. Как таковой, я могу быть склонен к использованию по piimg
отношению к другим методам.
Ссылки
Запуск ARM Linux на вашем настольном ПК: внешний способ chroot
Получение «недопустимой инструкции» при попытке выполнить chroot
sudo kpartx -av rpi_pisces_mate_r1.img
, который покажет разделы. Используйте самый большой и установите его, напримерsudo mount /dev/mapper/loop0p3 /mnt/tmp
.Вот быстрый сценарий, который я собрал, когда катил его, монтирует первый раздел Linux файла образа. Использование на свой страх и риск. Нет обработки ошибок / проверки ввода
источник
Я следовал инструкциям, пытаясь найти способ просто собрать материал для PI через мой основной ПК, оказалось, что это было очень легко, после того, как вы получили chroot, вы можете обрабатывать изображение, как если бы оно было живой системой и использовать все родные приложения. на пи, так что нет необходимости устанавливать кросс-компилятор :)
У меня действительно есть один вопрос, хотя, во время настройки chroot, мы должны смонтировать некоторые разделы для правильной работы chroot:
Как мы размонтируем их правильно? оставляя их подключенными, что мешает вам размонтировать файл .img, любая помощь здесь будет признательна. Я попробовал опцию -f, но не уверен, что есть что-то еще, что подключено.
Отвечая на мой собственный вопрос, https://bugzilla.redhat.com/show_bug.cgi?id=194342, 2-й метод в конце поста работал для меня с модификацией sudo.
Очевидно, измените $ MOUNTPOINT на путь вашей точки монтирования chroot (2-й раздел, содержащий rootfs в файле образа, который / mnt в вышеприведенном уроке). Используя этот метод, вы полностью размонтируете файл img из устройств loopback и любых других устройств, которые были подключены через chroot.
источник