Resimlerdeki yazılımı yükseltmek için sınırlı SD yazma çevrimlerimizi kullanmak aptalca görünüyor. Bir görüntüyü SD karta flaşlamadan önce yazılımı güncelleyebilir ve yeni yazılım yükleyebilir miyiz?
Resimlerdeki yazılımı yükseltmek için sınırlı SD yazma çevrimlerimizi kullanmak aptalca görünüyor. Bir görüntüyü SD karta flaşlamadan önce yazılımı güncelleyebilir ve yeni yazılım yükleyebilir miyiz?
Yanıtlar:
Cevap her zaman evet, doğru, nasıl yapılacağını öğrenmek biraz zaman alır!
Bunu Brightbox.com tarafından sağlanan bir VPS'de çalıştıracağım . Bir Nano Sunucu (2 CPU, 512 MB RAM, 20 GB disk alanı) ve Ubuntu Precise 12.04 LTS sunucu görüntüsü kullandım. EC2 veya Linode'nin eşdeğerleri üzerinde ve tabii ki evinizde Linux makinasında çalışmalıdır. Şimdi (x86) Arch kurulumumda test ettim, ancak Ubuntu 10.04 LTS'de çalışmadığını biliyorum çünkü bazı paketler çok eski.
Kendi sisteminizin güncel olduğundan emin olun.
$ sudo apt-get update
$ sudo apt-get upgrade
Bazı yeni yazılımlar yükleyin
$ sudo apt-get install binfmt-support qemu qemu-user-static unzip
qemu
ARM emülatör olduğunu ve qemu-user-static
ve binfmt-support
ARM çekirdeği taklit etmeden ARM yürütülebilir olanağı sunar. (Ne kadar serin!?!)
qemu
Arch depolarında statik olarak bağlanmış bir bağlantı bulamıyorum , bu yüzden kaynaktan derlemek zorunda kalacağız.
Sıkıştır ve çalıştır
./configure --disable-kvm --target-list=arm-linux-user --static
Kullanarak oluştur make
ve kullanarak kur sudo make install
.
Aşağıdakileri çalıştırın 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
Uyarı Çevrimiçi bulduğunuz rastgele komutları çalıştırmamalısınız
root
- bunlarqemu-binfmt-conf.sh
ARM cpu türünün altından alınmıştır . Lütfen komutları bu dosyadan çıkartın ve çalıştırın.
Raspberrypi.org adresine gidin ve istediğiniz resmi indirin. Çıkarın ve .img
dosyayı yararlı bir yere kaydedin .
$ 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
Önyükleme bölümüne dahil 3 bölümleri içerecektir.
$ 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 bölümünün ofsetini bilmemiz gerekir, bu durumda 157696
sektörler ve sektörlerdeki boot bölümü 2048
. Her sektör 512 bayttır, bu nedenle kök ofseti 157696*512=80740352
bayt ve önyükleme ofsetidir 2048*512=1048576
.
Daha sonra, görüntüyü bir dosya sistemi olarak monte etmemiz gerekiyor. Bu bir geridöngü aygıtı kullanılarak yapılabilir. mount
Hangi bölümlerin monte edileceğini ve nereye bağlandığını söylemek için önceki bölümdeki ofseti kullanıyoruz . Bu komutların sırası önemlidir.
$ 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
Neredeyse chroot
dosya sistemimize girmeye ve yeni yazılım yüklemeye başlamaya hazırız . İlk olarak, öykünücüyü resmimize yüklemeliyiz, çünkü kullandığımız zaman kullanılamaz chroot
.
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/
Ayrıca sistemin diğer bazı kısımlarına erişim sağlamamız gerekiyor.
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
İşimiz bitti! chroot
uzakta...
$ sudo chroot /mnt
Artık Raspberry Pi'nizdesiniz, ancak servisler çalışmıyor. Dikkatli olun, köklisiniz!
Yazılımı güncellemek için kullanıyoruz apt-get
.
# apt-get update
# apt-get upgrade
apt-get install
Her zamanki gibi yazılım kullanarak da yükleyebilirsiniz .
Yazılımı güncellemek için kullanıyoruz pacman
.
# pacman -Syu
pacman -S
Her zamanki gibi yazılım kullanarak da yükleyebilirsiniz .
NOT Kaçabilirsiniz
pacman
talimatları uygulayarak doğal ben benim yerli nasıl çalıştırabilirimpacman
bir görüntü monte karşı? .
+ Tuşlarını chroot
kullanarak sistemden çıkabilirsiniz ve sistemi çalıştırarak sistemden ayırmayı yapabilirsiniz - her bir montaj noktasını ayrı olarak çıkarmanız gerekir.CtrlDsudo umount /mnt
Sen kaldırmalısınız qemu-user-static
gelen /usr/bin
veya qemu-arm
gelen /usr/local/bin
RPI'nin ardından görüntü parladı hazırdır.
Bu biraz uzun ve sıkıcı, ama bir kez yapın ve tüm bunların nasıl çalıştığı hakkında çok şey öğreneceksiniz!
Son görüntülerde bunu yapmaya çalışırken, bir hata alırsınız
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
Bu hatayı düzeltmek için /etc/ld.so.preload
dosyanın içeriğini yorumlamanız yeterli
piimg
Sizin için çok şey yapmak için bir yardımcı program üzerinde çalışmaya başladım. Piimg olarak adlandırılır ve github.com/alexchamberlain/piimg adresinde bulunabilir .
Şimdiye kadar, çalıştırarak SD kartı sizin için monte edebilir
piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt
ve çalıştırarak onları tekrar çıkarın
piimg umount /mnt
Sadece yüklemeniz qemu
ve chroot
uzaklaştırmanız gerekir .
YASAL UYARI I, Alex Chamberlain, baş geliştiricisiyim
piimg
. Bu nedenle,piimg
diğer yöntemlerle ilişkili olarak kullanımına karşı taraflı olabilirim .
sudo kpartx -av rpi_pisces_mate_r1.img
bölümleri gösterecek olan kullanabilirsiniz . En büyüğünü kullanın ve bağlayın, örneğin sudo mount /dev/mapper/loop0p3 /mnt/tmp
.
Burada yuvarlarken bir araya getirdiğim hızlı bir komut dosyası, bir görüntü dosyasının ilk Linux bölümünü kullanır. Kendi sorumluluğunuzdadır kullanın. Hata işleme / giriş doğrulaması yok
#!/bin/bash
# This script is designed to mount
# the first Linux filesystem
# in the partition table of the
# image handed to it
USAGE="$0 <image name> <mount point>"
IMAGE=$1
MOUNTPT=$2
OFFSET=`fdisk -lu $IMAGE | grep -m 1 Linux$ | awk '{ print $2 *512 }'`
echo "Executing as $USER: mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT"
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT
Ana bilgisayarım üzerinden PI için bir şeyler inşa etmek için bir yöntem arayan talimatları izledim, çok kolay oldu, chrooted olduğunuzda görüntüyü canlı bir sistemmiş gibi ele alabilir ve hepsini kullanabilirsiniz. yerel uygulamalar. Bu nedenle, bir çapraz derleyici yüklemenize gerek yok :)
Bununla birlikte, chroot'un kurulumu sırasında chroot'un düzgün çalışması için bazı bölümleri monte etmemiz gerekir:
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
Bunları nasıl doğru şekilde çıkarabiliriz? Onları monte ederek bırakarak, .img dosyasını çıkarmanızı önler, buradaki herhangi bir yardım size yardımcı olacaktır. -F seçeneğini denedim, monte edilmiş altta bir şey olup olmadığından emin değilim.
kendi soruma cevap vererek, https://bugzilla.redhat.com/show_bug.cgi?id=194342 Yazının sonundaki 2. yöntem benim için bir sudo değişikliği ile çalıştı.
cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
Açıkçası, $ MOUNTPOINT'i, chroot bağlama noktanızın yoluna değiştirin (yukarıdaki dosyada / mnt olan resim dosyasındaki kökleri içeren 2. bölüm). Bu yöntemi kullanarak, img dosyasını geri döngü aygıtlarından ve chroot yoluyla monte edilen diğer aygıtlardan tamamen çıkarırsınız.
cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT