安裝順序如下
測試環境
1
2
3
4
5
6
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
安裝Qemu
1
$ sudo apt-get install qemu-system-arm
拉ARM安裝相關檔案
1
2
3
4
5
6
$ qemu-system-arm -machine help
Supported machines are:
versatileab ARM Versatile/AB (ARM926EJ-S)
versatilepb ARM Versatile/PB (ARM926EJ-S)
lm3s811evb Stellaris LM3S811EVB
...
安裝ARM版本Debian需要
kernel
initrd
ISO
首先到提供Debian下載的網站中的debian/dists找一個你想安裝的版本,我選了7.8 (Wheezy)。
假設Debain下載網站叫host
先抓平台相關的kernel和initrd,路徑如下
http://host/debian/dists/Debian7.8/main/installer-armel/20130430/images/
下面有不同的ARM平台,還記得上面qemu-system-arm -machine help
,請和這邊目錄下的比對,挑一個順眼的。我使用
versatile,所以就切到下面的目錄
http://host/debian/dists/Debian7.8/main/installer-armel/20130430/images/versatile/netboot/
把下面的兩個檔案拉下來
initrd.gz
vmlinuz-3.2.0-4-versatile
接下來在同樣的主機上,下載ISO檔。
http://host/debian-cd/7.8.0/armel
開始安裝
透過下面的指令安裝虛擬磁碟,請自行決定大小
1
$ qemu-img create debian.img 8G
然後叫qemu載入ARM kernel,initrd,以及ISO
1
$ qemu-system-arm -M versatileab -kernel ./vmlinuz-3.2.0-4-versatile -initrd ./initrd.gz -cdrom ./debian-7.8.0-armel-DVD-1.iso -hda debian.img -m 1024
這邊可以看到versatileab又出現了,請往上找一下這個字串吧。
抽出虛擬磁碟的kernel和initrd
最tricky的地方在這邊,理論上你要透過loopback裝置mount 虛擬磁碟,複製/boot就可以了。但是現實就是,因為磁碟機/root的partition有offset,所以直接mount程式無法辨認Filesystem所以無法mount。正確方式如下
1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo fdisk -l -u debian.img
Disk debian.img: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 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: 0x000823a0
Device Boot Start End Blocks Id System
debian.img1 2048 15988735 7993344 83 Linux
debian.img2 15990782 16775167 392193 5 Extended
debian.img5 15990784 16775167 392192 82 Linux swap / Solaris
有兩個東西要注意
unit為512 bytes
root partition offset為2048個unit
所以正確的mount方式如下
1
$ sudo mount -o loop,offset=$((2048 * 512)) debian.img /mnt
接下來抽出就簡單了,請在剛才安裝的虛擬磁碟檔案同一個目錄操作。
1
2
$ mkdir boot
$ cp /mnt/boot/* boot/ -rv
載入安裝的系統
這邊就照表操課,我有指定localhost將port 2222 forward到Qemu的port 22,以便將來ssh進去
1
$ qemu-system-arm -M versatileab -kernel ./boot/vmlinuz-3.2.0-4-versatile -initrd ./boot/initrd.img-3.2.0-4-versatile -hda debian.img -m 1024 -append "root=/dev/sda1" -redir tcp:2222::22
驗收看看是不是真的可以連進去,並且裏面真的是ARM的binary?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ssh -p 2222 user@localhost
user@localhost's password:
Linux debian 3.2.0-4-versatile #1 Debian 3.2.65-1+deb7u1 armv5tejl
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.
Last login: Fri Feb 6 09:35:07 2015
user@debian:~$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x5bc97dbca9ac168932d898a5e2eaf68e8fde5e16, stripped
參考資料