Saturday 7 January 2017

Raspbian on QEMU and fuse-ext2

実機でのLLVM compileはlinkがメモリを要求するので256MBでは無理ならしい。なので、QEMU上でメモリ増やしてやればよいんじゃないかと。

qemu 自体は brew install qemu で簡単。で、raspberrypi のkernelとboot imageを取ってくればよい。

そのあとは、結局、

http://www.linux-mitterteich.de/fileadmin/datafile/papers/2013/qemu_raspiemu_lug_18_sep_2013.pdf

これがわかりやすいみたい。initの代わりに sh を指定して、いくつかファイルを修正して boot と。

結論から言うと、だめでした。Emergeny shell mode まではいくが、systemd の load module でこけてしまう。

さらに、

raspbian のメモリ256MBは hard coded で変えられない
https://bugs.launchpad.net/ubuntu/+source/rootstock/+bug/570588

らしい。つまり、この方向で LLVM をコンパイルすることはできないらしいです。

なので、残った方法はcross compile だな。

上の方法を試す前に、fuse で boot image を OS X で mount するってのもやりました。brew で fuse-ext2 はないので、自分で作る必要があるのだが、結構、複雑。

http://apple.stackexchange.com/questions/226981/how-do-i-install-fuse-ext2-to-use-with-osxfuse

ここかな。結論的には、

CFLAGS="-idirafter/usr/local/Cellar/e2fsprogs/1.42.13/include -idirafter/usr/local/include/osxfuse/" LDFLAGS="-L/usr/local/lib -L/usr/local/Cellar/e2fsp rogs/1.42.13/lib" ./configure --sbindir=/usr/local/sbin\n

で config できるみたいです。

fuse-ext2 -o force boot.img /mnt

すれば良いのかと思うとそうはいかなくて、いちど boot.img を DiskUtility で開けます。そうすると、vfat な boot partition が開きます。partitoin 2は、

% diskutil list
/dev/disk2 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme +4.4 GB disk2
1: Windows_FAT_32 boot 66.1 MB disk2s1
2: Linux 4.3 GB disk2s2

ここにあるので、

# fuse-ext2 -o force /dev/disk2s2 /mnt

で mount できます。これで書き換え可能になります。SD card でも可能なはず。

ここまで、できたので、これを cross compileの環境に使えるはずだな。

No comments: