Answers:
答案永远是肯定的,没错,只是需要一段时间才能弄清楚如何做!
我将在Brightbox.com提供的VPS上运行它。我使用了Nano服务器(2个CPU,512MB RAM,20GB磁盘空间)和Ubuntu Precise 12.04 LTS服务器映像。它应该可以在EC2或Linode的同等产品上运行,当然也可以在家用Linux机器上运行。我现在已经在(x86)Arch安装上对其进行了测试,但是知道它在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 cpu类型。请从该文件中提取命令并运行它们。
转到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中,但服务未运行等。请注意,您是root!
要更新软件,我们使用apt-get
。
# apt-get update
# apt-get upgrade
您也可以apt-get install
照常使用来安装软件。
要更新软件,我们使用pacman
。
# pacman -Syu
您也可以pacman -S
照常使用来安装软件。
注意您可以
pacman
按照如何pacman
对已装载的映像运行本机的说明进行本机运行。。
您可以chroot
使用Ctrl+ 退出,D然后通过运行sudo umount /mnt
来卸载系统-您将不得不分别卸载每个安装点。
您应该qemu-user-static
从RPi上/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
路程。
免责声明一:Alex Chamberlain是的主要开发人员
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
我遵循了说明,寻找一种方法可以通过我的主PC为PI构建东西,事实证明这很容易,只要您更改了根目录,就可以将映像视为实时系统,并使用所有本机应用程序。在pi上,因此无需安装交叉编译器:)
我确实有一个问题,在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帖子末尾的第二种方法对我来说是一个sudo修改。
cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
显然,将$ MOUNTPOINT更改为chroot安装点的路径(第二个分区,该分区在映像文件上包含rootfs,在上面的教程中为/ mnt)。使用此方法,您可以从环回设备和通过chroot挂载的任何其他设备上完全卸载img文件。
cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT