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
qemuARM emülatör olduğunu ve qemu-user-staticve binfmt-supportARM çekirdeği taklit etmeden ARM yürütülebilir olanağı sunar. (Ne kadar serin!?!)
qemuArch 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 makeve 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.shARM 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 .imgdosyayı 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 157696sektörler ve sektörlerdeki boot bölümü 2048. Her sektör 512 bayttır, bu nedenle kök ofseti 157696*512=80740352bayt 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. mountHangi 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 chrootdosya 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! chrootuzakta...
$ 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 installHer zamanki gibi yazılım kullanarak da yükleyebilirsiniz .
Yazılımı güncellemek için kullanıyoruz pacman.
# pacman -Syu
pacman -SHer zamanki gibi yazılım kullanarak da yükleyebilirsiniz .
NOT Kaçabilirsiniz
pacmantalimatları uygulayarak doğal ben benim yerli nasıl çalıştırabilirimpacmanbir görüntü monte karşı? .
+ Tuşlarını chrootkullanarak 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-staticgelen /usr/binveya qemu-armgelen /usr/local/binRPI'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.preloaddosyanın içeriğini yorumlamanız yeterli
piimgSizin 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 qemuve chrootuzaklaştırmanız gerekir .
YASAL UYARI I, Alex Chamberlain, baş geliştiricisiyim
piimg. Bu nedenle,piimgdiğer yöntemlerle ilişkili olarak kullanımına karşı taraflı olabilirim .
sudo kpartx -av rpi_pisces_mate_r1.imgbö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