先週のレシピでは,アラート発生時の警告音をAquesTalk2で作成しました。今週のレシピではRaspberry Pi用のAquesTalk,AquesTalk Piを使い,リアルタイムに様々な音声を喋らせてみようと思います。
AquesTalk Piは,Raspberry Pi上で動作する音声合成ソフトウェアです。Rspberry PiとRaspbian(Raspberry Pi向けカスタマイズのDebian)で動作させることを前提としたバイナリですが,armhfなUbuntu上でも動作します。AquesTalk2はライブラリとして提供されており,アプリケーションは各自が用意する必要がありましたが,AquesTalk Piは引数に指定した日本語文字列を音声にするバイナリそのものが配布されているため,プログラミングの知識がなくてもすぐに利用することができます(注1)。
- 注1)
- 個人の非営利目的に限り無償で利用することができます。営利目的,あるいは個人事業や大学などで利用する場合はライセンスの購入が必要です。
筆者は,少々古いですがUbuntu Weekly Topicsでも紹介された(そして先週も使った)Cubox-iにUbuntu 14.04をインストールし,利用することにしました(注2)。
- 注2)
- 「Ubuntu」Weekly Recipeの原稿ですので,無理矢理Ubuntuな環境を用意した,とも言えます。読者の皆様におかれましては,Raspberry PiとRaspbianを利用するのがお勧めです。
Cubox-iへのUbuntuのインストール
まずはCubox-iへUbuntuをインストールしなければなりません。ARMマシンはx86のPCとは違い,USBからインストーラーをブートして,と言うわけにはいきません。その機種に合わせたプリインストールイメージを書き込むか,でなければブートローダー,カーネル,モジュールを自分でビルドし,debootstrapを使って手動でrootfsを構築する必要があります(注3)。筆者は手元のx86_64なUbuntu 14.04上で以下の作業を行いました。
- 注3)
- 基本的な手順はsolid-runのWikiに記載されているとおりです。
まずインストールするmicroSDHCカードにパーティションを切ります。カーネルを置く/dev/sdX1,rootfsを置く/dev/sdX2,swapパーティションの/dev/sdX5を作成しました(注4)。次にビルドに必要なパッケージをインストールし,環境変数ARCHに「arm」,CROSS_COMPILEに「/usr/bin/arm-linux-gnueabi-」を設定します。
- 注4)
- sdXはお使いの環境に合わせて適宜読み替えてください。
最初はブートローダーを用意します。u-bootのソースをクローンし,makeしてください。
$ 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- $ git clone https://github.com/SolidRun/u-boot-imx6.git $ cd u-boot-imx6 $ make mx6_cubox-i_config $ make
ビルドが成功すると「SPL」「u-boot.img」という2つのファイルが出来上がります。これをddコマンドでmicroSDHCへ書き込みます。
$ sudo dd if=SPL of=/dev/sdX bs=1K seek=1 $ sudo dd if=u-boot.img of=/dev/sdX bs=1K seek=42
u-bootの次はカーネルです。SolidRunのリポジトリから,カーネル3.14のツリーをクローンしてビルドします。Wikiの手順どおりに色々とビルドしていますが,「./arch/arm/boot/zImage」「./arch/arm/boot/dts/imx6q-cubox-i.dtb」とmodulesディレクトリ以下にインストールしたモジュール一式が必要な成果物です。
$ 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
debootstrapでUbuntu 14.04のrootfsを作成します。この他に必要なパッケージがあれば,この段階でincludeに入れてしまうと楽です。
$ sudo apt-get install debootstrap $ sudo debootstrap --verbose --foreign --arch=armhf --variant=minbase --include=module-init-tools,locales,udev,dialog,ifupdown,procps,iproute,iputils-ping,nano,wget,netbase,net-tools trusty cubox-i http://jp.archive.ubuntu.com/ports
x86マシンのchroot内でarmhfのバイナリを動かすため,qemu-arm-staticをchroot内のツリーに配置してください。作成したrootfsの中にchrootしたら,debootstrapのsecond-stageを実行してパッケージを展開します。その後はユーザーの作成,パスワードの設定,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 (各種設定) # exit $ sudo rm rootfs/usr/bin/qemu-arm-static
上記のdebootstrapで作成したrootfsは,/dev/sdX2にコピーします。カーネルのビルドで作成した「zImage」と「imx6q-cubox-i.dtb」は/dev/sdX1に,modules/lib/{firmware,modules}はrootfsの/lib以下にコピーしてください。このmicroSDHCをCubox-iに挿入すれば,Ubuntu 14.04が起動します。
インストールは以上で終了です。ここから先の作業は,すべてCubox-i(Raspberry Piを使う方はもちろんRaspberry Pi上)で行います。