Cubox-i4proにDebianをインストールする

Cubox-i用のインストール済みイメージは割とあちこちで見かけるのですが、デスクトップ環境一式が入っていたりと色々気に入らない部分があるので、自分で作ることにした際の備忘録です。ビルド作業はVirtualBox上のUbuntu 14.04 LTS(64bit)で、SDカードのフォーマットや書き込みは手元のUbuntu 14.04 LTSで行っています。

基本的にカーネルブートローダーのビルドは
http://www.solid-run.com/wiki/index.php?title=Building_the_kernel_and_u-boot_for_the_CuBox-i_and_the_HummingBoard
に従います。

micro SDカードの用意

micro SDカードにパーティションを切っておきます。/dev/sdX1がカーネルを置くパーティションで、/dev/sdX2がrootfsを置くパーティションになります。今回は1GBのswapパーティションも作ってみました。メモリ2GB搭載しているCubox-i4でスワップ使う状態になったら負けのような気もしますが念の為。ファイルシステムext4にします。


u-bootのビルドと書き込み

必要なパッケージをインストールします。また環境変数ARCHとCROSS_COMPILEをセットしておきます。

$ sudo apt-get install gcc-arm-linux-gnueabi u-boot-tools lzop build-essential
$ export ARCH=arm
$ export CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-

SolidRunのリポジトリからu-bootをクローンしてmakeします。

$ git clone https://github.com/SolidRun/u-boot-imx6.git
$ cd u-boot-imx6
$ make mx6_cubox-i_config
$ make

SPLというファイルとu-boot.imgというファイルが作られているので、これをmicro SDへ書き込みます。手元のPCへ引っ張ってくるのはscpなりrsyncなりで適当に。

$ sudo dd if=SPL of=/dev/sdX bs=1K seek=1
$ sudo dd if=u-boot.img of=/dev/sdX bs=1K seek=42

カーネルのビルド

SolidRunのリポジトリから、3.14のツリーをクローンしてmakeします。最終的に必要なファイルは、arch/arm/boot/zImageとarch/arm/boot/dts/imx6q-cubox-i.dtb、それにmodulesディレクトリ以下にインストールしたモジュール一式です。makeが終わったらこれも手元のPCへrsyncなりしておきます。

$ git clone https://github.com/SolidRun/linux-imx6-3.14
$ cd linux-imx6-3.14
$ make imx_v7_cbi_hb_defconfig
$ make zImage imx6q-cubox-i.dtb imx6dl-cubox-i.dtb imx6dl-hummingboard.dtb imx6q-hummingboard.dtb
$ make modules
$ mkdir ../modules
$ make modules_install INSTALL_MOD_PATH=../modules

rootfsの作成

debootstrapでWheezyの環境を作成します。必要なパッケージはincludeに入れてしまうのがいいでしょう。特にopenssh-server。

$ sudo apt-get install debootstrap
$ sudo debootstrap --verbose --foreign --arch=armel --variant=minbase --include=module-init-tools,locales,udev,aptitude,dialog,ifupdown,procps,iproute,iputils-ping,pump,nano,wget,netbase,openssh-server wheezy rootfs http://ftp.jp.debian.org/debian

chroot内でarmelの環境を動かすため、qemu-arm-staticを使います。qemu-user-staticパッケージをインストールした後、qemu-arm-staticをchroot内のツリーに配置すれば動作します。そうしたら実際にchrootして、debootstrapのsecond-stageを実行してパッケージを展開します。その後はrootのパスワードやAPTラインなど、必要な設定を行っておきましょう。ネットワークの設定やシリアルコンソールの設定はここでやっておかないと。
chroot環境からexitしたら、qemu-arm-staticは削除しておきましょう。

$ sudo apt-get install qemu-user-static
$ sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/
$ sudo chroot rootfs
# ./debootstrap/debootstrap --second-stage

# dpkg-reconfigure tzdata
# dpkg-reconfigure locales
# passwd

# cat > /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ wheezy main contrib non-free

# cat >> /etc/network/interfaces
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

# cat >> /etc/inittab
T0:23:respawn:/sbin/getty -L ttymxc0 115200 vt100

# exit
$ sudo rm rootfs/usr/bin/qemu-arm-static

カーネルとrootfsのコピー

zImageとimx6q-cubox-i.dtbは/dev/sdX1にコピーします。作成したrootfsはまるごと/dev/sdX2にコピーします。その後、/dev/sdX2の/lib以下に、modules/lib/{firmware,modules}をコピーします。
あとはこのmicro SDを実機に挿入すれば、こんな感じで上がってきます。うまくいけば。

あ、swapを作ったならば、fstabなんかも書いておきましょう。またhostnameがdebootstrapしたマシンと同じになっていると思いますので、そのへんの調整なども適宜。