昨晩作ったソレを動かしてみる

以下に控えを。とりあえず initramfs を作成。

$ cat >main.c
#include <stdio.h>

int main(void)
{
    printf("hello world\n");
    while(1);
}
$ cat main.c
#include <stdio.h>

int main(void)
{
    printf("hello world\n");
    while(1);
}
$ arm-linux-gnueabihf-gcc -static main.c -o init
$ ls
init  main.c
$ file init
init: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.31, BuildID[sha1]=0xe7c91f4ad51c28706a316dab59990e558b96ab71, not stripped
$

で、以下。

$ echo init|cpio -o --format=newc > initramfs
884 blocks
$

これで起動してみるか。

$ qemu-system-arm -M vexpress-a9 -kernel linux-3.2/arch/arm/boot/zImage -initrd initramfs -append "console=tty1"

とりあえず動いた模様。次は gdb だな。

qcow2 なナニを mount

とりあえず nbd というモジュールを云々らしい。

$ lsmod|grep nbd
$ sudo modprobe nbd
$ lsmod|grep nbd
nbd            17592  0
$ 

で、こうか。

$ sudo qemu-nbd --connect=/dev/nbd0 hoge.img.qcow2

最初、デバイスファイルが無くってアレでした。つうか上ではエラー。

qemu-nbd: Failed to bdrv_open 'hoge.img.qcow2'

何事かと思ったら相対パスでは NG とのことらしい。ググッたら自分エントリに hit してびっくりしました。
で、mount するんですが区画というかデバイスファイルが

$ ls /dev/nbd0*
/dev/nbd0  /dev/nbd0p1  /dev/nbd0p2  /dev/nbd0p5

となってます。p1 は boot partition で p2 が logical、p5 が / らしい。で、mount してみたんですが、p1 しか mount できんじゃないか。
cfdksi じゃなくて fdisk で確認。以下。

$ sudo fdisk -l /dev/nbd0

     Device Boot      Start         End      Blocks   Id  System
/dev/nbd0p1   *        2048      499711      248832   83  Linux
/dev/nbd0p2          501758    10483711     4990977    5  Extended
/dev/nbd0p5          501760    10483711     4990976   8e  Linux LVM
$

出力一部略してます。ええと手順てきに以下らしいんですが

  • kpartx で /dev/mapper に区画毎のブロックデバイスを云々
    • kpartx -v -a /dev/nbd0
  • vgcnange で Volume Group 活性化
  • 区画を mount

でもコマンドが使えない状態。lvm2 を導入してみました。vgchange なるソレがどのパケジに入ってるのかが分からないんですが当りだった模様。

$ sudo vgchange -ay
[sudo] password for rms: 
  2 logical volume(s) in volume group "i-10-158-VM" now active
$ 

む、/dev 配下に i-10-158-VM というディレクトリがあるな。

$ ls /dev/i-10-158-VM 
root  swap_1
$

この、root を mount すれば良いらしい。

$ sudo mount /dev/i-10-158-VM/root /mnt
$ ls /mnt
bin  boot  dev  etc  home  initrd.img  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var  vmlinuz
$

OK、てか優先度高い割り込み発生にてこれは一旦ストップ。
後始末は逆順らしい

$ sudo umount /mnt
$ sudo vgchange -an
  0 logical volume(s) in volume group "i-10-158-VM" now active
$ sudo kpartx -v -d /dev/nbd0
$ sudo qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected
$