mattintosh note

どこかのエンジニアモドキの備忘録

x86_64 Ubuntu で Arch Linux ARM を動かしてみる

先日、Arch Linux ARM のディスクイメージ作った。

mattintosh.hatenablog.com

今回はこのディスクイメージと QEMU を使って Ubuntu で Arch Linux ARM のエミュレーションをやってみたのでそのメモ。


前回作ったディスクイメージをコピー。名前が長いと面倒なので qemu-alarm.img とした。

cp ArchLinuxARM_20160202.img qemu-alarm.img

カーネルGitHub で頒布してくれていた人のを借りてきた。

そのままだと /dev/mmcblk0p1 というか /dev/sda1 がマウント出来ず、起動する度にエラーになるのでこれを一度無効にする。

qemu-system-arm -kernel kernel-qemu-4.1.bin -M versatilepb -cpu arm1176 -m 256 "root=/dev/sda2 rw panic=1 init=/bin/bash" -hda qemu-alarm.img

vi/etc/fstab/dev/mmcblk0p1 行をコメントアウトする。

vi /etc/fstab

exit してもう一度 QEMU を起動する。この時に init=/bin/bash はつけない。

qemu-system-arm -kernel kernel-qemu-4.1.bin -M versatilepb -cpu arm1176 -m 256 -serial stdio -append "root=/dev/sda2 rw panic=1 console=ttyAMA0,115200" -hda qemu-alarm.img -net nic -net user,net=192.168.1.0/24,hostfwd=tcp::12345-:22

いつもはこういうことには関心するけどこれはなんか気持ち悪い…w

f:id:mattintosh4:20160207213341p:plain

さて、ディスクイメージは 1 GB で作ったのでちょっと拡張する。ディスクイメージの拡張は truncateqemu-image resize でできる。どちらも + を付けたりすることで「追加」になるようだ。

truncate -s +3GB alarm.img
qemu-image resize alarm.img +`numfmt --from si 3G`

再び QEMU を起動してディスクサイズを確認する。ファイルシステムはまだ拡張していない状態。

f:id:mattintosh4:20160207214051p:plain

パーティションテーブルを編集して /dev/sda2 を作り直す。

fdisk /dev/sda

f:id:mattintosh4:20160207214254p:plain

再起動後、ファイルシステムを拡張する。

resize2fs /dev/sda2

QEMU の制限でメモリが 256 MB しかないのでスワップファイルを作成する。

dd if=/dev/zero of=/swapfile bs=1M count=256
mkswap /swapfile
chmod 0600 /swapfile
swapon /swapfile
echo /swapfile none swap swap 0 0 >>/etc/fstab

/dev/sda1/dev/mmcblk0)を読み込むための方法として udev に新しいルールを作るものがあるらしい。

vi /etc/udev/rules.d/90-qemu.rules
KERNEL=="sda"  SYMLINK+="mmcblk0"
KERNEL=="sda?" SYMLINK+="mmcblk0p%n"
KERNEL=="sda2" SYMLINK+="mmcblk0p2"

そうすると起動するときに /dev/mmcblk => /dev/sda みたいなリンクができる。

と、してみたがやっぱり /boot にマウントしてくれないんだよな…。/etc/fstab/dev/sda1 って書いてもダメだし。

起動後にマウントはできるから起動順とかの問題かね。

microSD に入っている Arch Linux ARM を扱う方法もあるみたいだし、Raspberry Pi 本体での作業にはそれほど拘らなくてもいいのかも。

microSD に入っている Arch Linux ARM を QEMU で起動する

Arch Linux ARM を焼いてある microSD が転がっていたのでカードリーダーに突っ込んで QEMU で起動できるのか試してみた。デバイスは /dev/sdc

そのままだと /dev/sdc に書き込み権限が無いので適当にパーミッションを変更。VirtualBox の rawdisk イメージと同じようなものか。

chmod 0666 /dev/sdc

-drive file=/dev/sdc,if=scsi/dev/sdc を読みに行くようにして起動。

qemu-system-arm -kernel kernel-qemu-4.1.7.bin -M versatilepb -cpu arm1176 -m 256 -append "root=/dev/sda2 rw" -drive file=/dev/sdc,if=scsi

あっさり出来てしまうから困る。

f:id:mattintosh4:20160207221941p:plain


うーん、ということは Raspberry Pi の勉強会は実機がなくてもなんとかなるところはなんとかなるかもなぁ…。ネットワークがちょっと難だけど。

それより udev をもうちょっと勉強しなきゃだめかな。