да
Ответ всегда да, верно, просто нужно время, чтобы понять, как!
Трудный путь
Я буду запускать это на 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