да
Ответ всегда да, верно, просто нужно время, чтобы понять, как!
Трудный путь
Я буду запускать это на 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/binRPi, тогда изображение готово к перепрошивке.
Заключительные слова
Это немного долго и утомительно, но сделайте это один раз, и вы узнаете много о том, как все это работает!
Обратите внимание на последние изображения
При попытке выполнить это на последних изображениях вы получите ошибку
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