ดูเหมือนว่าโง่ที่จะใช้วงจรการเขียนแบบ SD ที่ จำกัด ของเราเพื่ออัปเกรดซอฟต์แวร์ที่จัดส่งในภาพ เราสามารถอัพเกรดซอฟต์แวร์และติดตั้งซอฟต์แวร์ใหม่ก่อนที่จะกระพริบรูปภาพเป็นการ์ด SD ได้หรือไม่?
ดูเหมือนว่าโง่ที่จะใช้วงจรการเขียนแบบ SD ที่ จำกัด ของเราเพื่ออัปเกรดซอฟต์แวร์ที่จัดส่งในภาพ เราสามารถอัพเกรดซอฟต์แวร์และติดตั้งซอฟต์แวร์ใหม่ก่อนที่จะกระพริบรูปภาพเป็นการ์ด SD ได้หรือไม่?
คำตอบ:
คำตอบคือใช่ถูกต้องใช้เวลาสักครู่เพื่อหาวิธี!
ฉันจะทำงานนี้บน VPS ให้โดยBrightbox.com ฉันใช้เซิร์ฟเวอร์นาโน (CPU 2 ตัว, RAM 512MB, พื้นที่ดิสก์ 20GB) และอิมเมจเซิร์ฟเวอร์ Ubuntu Precise 12.04 LTS มันควรจะทำงานกับ EC2 หรือเทียบเท่าของ Linode และแน่นอนในเครื่อง Linux ที่บ้านของคุณ ตอนนี้ฉันได้ทำการทดสอบในการติดตั้ง Arch (x86) ของฉันแล้ว แต่รู้ว่ามันใช้งานไม่ได้กับ Ubuntu 10.04 LTS เพราะบางแพ็คเกจนั้นเก่าเกินไป
ตรวจสอบให้แน่ใจว่าระบบของคุณเป็นปัจจุบัน
$ 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 (มันช่างยอดเยี่ยมเลย!?!)
ฉันไม่พบการเชื่อมโยงแบบคงที่qemu
ในที่เก็บ Arch ดังนั้นเราจะต้องรวบรวมจากแหล่งที่มา
เปิดเครื่องรูดและเรียกใช้
./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
อันดับแรกเราต้องติดตั้งโปรแกรมจำลองเป็นภาพของเรามันจะไม่สามารถใช้ได้ครั้งเดียวที่เราใช้
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
$ 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 ของคุณแล้ว แต่บริการยังไม่เปิดทำงานระวังตัวด้วย!
apt-get
การอัปเดตซอฟต์แวร์ที่เราใช้
# apt-get update
# apt-get upgrade
คุณยังสามารถติดตั้งซอฟต์แวร์โดยใช้apt-get install
ตามปกติ
pacman
การอัปเดตซอฟต์แวร์ที่เราใช้
# pacman -Syu
คุณยังสามารถติดตั้งซอฟต์แวร์โดยใช้pacman -S
ตามปกติ
หมายเหตุคุณสามารถใช้งาน
pacman
ได้ตามปกติโดยทำตามคำแนะนำในฉันจะเรียกใช้ Native ของฉัน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
ออกไป
การปฏิเสธความรับผิดฉัน, อเล็กซ์แชมเบอร์เลน am
piimg
นักพัฒนานำของ ดังนั้นฉันอาจจะลำเอียงต่อการใช้งานที่piimg
เกี่ยวข้องกับวิธีการอื่น
sudo kpartx -av rpi_pisces_mate_r1.img
ซึ่งจะแสดงพาร์ทิชัน sudo mount /dev/mapper/loop0p3 /mnt/tmp
ใช้หนึ่งที่ใหญ่ที่สุดและติดมันเช่น
นี่คือสคริปต์สั้น ๆ ที่ฉันรวบรวมไว้ขณะที่ฉันกำลังกลิ้งมันซึ่งติดตั้งพาร์ติชัน Linux ตัวแรกของไฟล์ภาพใช้ความเสี่ยงของคุณเอง ไม่มีข้อผิดพลาดในการจัดการ / ตรวจสอบอินพุต
#!/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
ฉันทำตามคำแนะนำที่กำลังมองหาวิธีการเพียงแค่สร้างสิ่งต่าง ๆ สำหรับ PI ผ่านทางพีซีหลักของฉันมันกลับกลายเป็นว่าง่ายมากเมื่อคุณ chrooted คุณสามารถปฏิบัติต่อภาพราวกับว่ามันเป็นระบบจริงและใช้ทั้งหมดของ แอพเนทีฟ บน teh pi ดังนั้นไม่จำเป็นต้องติดตั้ง cross compiler :)
ฉันมีคำถามหนึ่งข้อในระหว่างการตั้งค่า chroot เราต้องติดตั้งพาร์ติชันบางส่วนเพื่อให้ chroot ทำงานได้อย่างถูกต้อง:
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
เราจะยกเลิกการต่อเชื่อมเหล่านี้อย่างถูกต้องได้อย่างไร ปล่อยให้พวกเขาติดตั้งซึ่งจะหยุดคุณจากการเลิกเมานท์ไฟล์. img ความช่วยเหลือใด ๆ ที่นี่จะได้รับการชื่นชม ฉันลองตัวเลือก -f แล้วไม่แน่ใจว่ามีบางอย่างที่ซ่อนอยู่ซึ่งติดตั้งอยู่
ตอบคำถามของฉันเองhttps://bugzilla.redhat.com/show_bug.cgi?id=194342 วิธีที่ 2 ในตอนท้ายของโพสต์ทำงานให้ฉันด้วยการดัดแปลง sudo
cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
เห็นได้ชัดว่าเปลี่ยน $ MOUNTPOINT เป็นพา ธ ของจุดเมานต์ chroot ของคุณ (พาร์ติชั่นที่สองมี rootfs ในไฟล์ภาพซึ่งเป็น / mnt ในบทช่วยสอนด้านบน) การใช้วิธีการนี้คุณเลิกเมานท์ไฟล์ img จากอุปกรณ์ลูปแบ็คและอุปกรณ์อื่น ๆ ที่ติดตั้งผ่าน chroot
cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT