HummingBoardを購入するとデフォルトではAndroidが動いています。今回は、Cubox-iのときと同じようにHummingBoardをUbuntuマシンにしてみましょう。Ububtu14.04といえば、「CuBox-i にUbubtu14.04, LXDEをインストールする」http://goo.gl/ozWjrb でとりあげました。HummingBoard(-i2/-i2eX)でも同じように動作します。ただ、LXDEではGUIが違って違和感があるというようなときは以前「CuBox-iにUbuntu12.04をインストールする」で取り上げたLinaro版のほうが使い勝手がよさそうです。
さて、HummingBoardで前の記事の通りにUbuntu11.10 Linaroにした場合、2つのUSBポートのうち上のポートが認識されないという問題が発覚しました。Cubox-iでは問題ありません。iMX6はUSBの2ポートの内、片方がOTGとなっています。でもこれはCuBox-idもHummingBoardでも同じです。USBということで言うと、HummingBoardは、外部向けのUSB2ポートに加えて、ボード上のピンにもう2ポートあり、合計4ポートがサポートされています。このことが直接原因ではないと思いますが、HummingBoardだけで症状があるので、何らかの仕様の差に起因するものでしょう。この解決策と、UBUNTU12.04とすることが今回のテーマとなります。なお、タイトルはHummingBoardとしていますが、当然CuBox-iでもi2以上で動作します。
結論から言うと、カーネルを最新のKernel 3.14 LTSにすれば、HummingBoardで両方のUSBポートが使えるようになります。その手順を説明していきます。
1. Kernel 3.14 LTSの生成
最初にカーネルの生成を行います。
Ubuntuが動作するPCを用意してください。以下は、Ubuntu PC上のターミナルでの作業が続きます。
1) まず、準備として必要なパッケージをインストールします。
$ sudo apt-get install arm-linux-gnueabi $ sudo apt-get install gcc-arm-linux-gnueabi $ sudo apt-get install git $ sudo apt-get install libncurses5-dev $ sudo apt-get install u-boot-tools $ sudo apt-get install lzop $ sudo apt-get install wget |
2) 環境変数をセットしておきます。
$ export ARCH=arm $ export CROSS_COMPILE=arm-linux-gnueabi- |
ここまでが準備作業です。
3) カーネルのソースをダウンロードします。
$ cd $ mkdir kernel $ cd kernel $ git clone https://github.com/SolidRun/linux-imx6-3.14 |
4) カーネルのパラメータの設定をします。
$ cd linux-imx6-3.14 $ make mrproper $ make imx_v7_cbi_hb_defconfig |
RealtekのUSB Wifiアダプタなどはデフォルトでモジュールを使用するようになっていますので、とくに変更の必要はありません。
5) カーネルの生成を行います。
$ make zImage imx6q-cubox-i.dtb imx6dl-cubox-i.dtb imx6dl-hummingboard.dtb imx6q-hummingboard.dtb |
これで、カーネルファイル
arch/arm/boot/zImage
arch/arm/boot/dts/imx6q-cubox-i.dtb
arch/arm/boot/dts/imx6dl-cubox-i.dtb
arch/arm/boot/dts/imx6dl-hummingboard.dtb
arch/arm/boot/dts/imx6q-hummingboard.dtb
が生成されました。
6) 次に、モジュールを生成します。
$ make modules $ mkdir ../modules $ export INSTALL_MOD_PATH=../modules/ $ make modules_install |
これにより ../modules/lib/ の下にモジュール化したファイルが生成されました。
ここまでで、カーネル関係で必要なファイルの準備ができました。
2. 起動SDカードの生成
HummingBoard起動SDカードを生成します。
1) PCにUbuntuのイメージファイルをダウンロードします。
$ cd $ mkdir images $ wget http://download.solid-run.com/pub/solidrun/cubox-i/Ubuntu/ubuntu-oneiric-freescale/ubuntu-oneiric-freescale.img.xz |
2) イメージファイルを解凍します。
$ unxz ubuntu-oneiric-freescale.img.xz |
3) SDカードにイメージを書き込みます。
SDカードをLinuxマシンに挿入します。自動的にSDカードがマウントされたらアンマウントしておきます。ここでは /dev/sdg にマウントされたものと仮定します。実際に、どこにマウントされているかは各PC/Linuxにより異なります。確かめてください。
$ mount |
以下、/dev/sdgの部分は、実際ものに置き換えて読んでください。
$ sudo umount /dev/sdg |
イメージを書き込みます。
$ sudo dd bs=4k conv=fsync if=ubuntu-oneiric-freescale.img of=/dev/sdg |
4) u-bootの書き込み
以下の通りダウンロードしてきます。 *下記コメント欄参照
$ wget http://people.redhat.com/jmontleo/cubox-i4pro/u-boot-images/SPL $ wget http://people.redhat.com/jmontleo/cubox-i4pro/u-boot-images/u-boot.img |
これらをddでSDに書き込みます。
$ sudo dd if=SPL of=/dev/sdg bs=512 seek=2 $ sudo dd if=u-boot.img of=/dev/sdg bs=1K seek=42 |
必要ならGPartedを使って、SDカードに生成されたパーティションのサイズを拡張しておきましょう。
GPartedについては、「(6) CuBox-iでSDカードの容量いっぱいにイメージを拡張するには」http://goo.gl/xtpQwz を参照いただけます。
3. Ubuntu11.10からUbuntu12.04へのアップグレード
Ubuntu11.10のままではHummingBoardでは上のUSBポートが使えませんでした。これは、カーネルを3.14LTSにしたとしてもその事情は同じです。Ubuntu12.04へアップグレードして解決を図ります。
SDカードをHummingBoardに挿して、HummingBoardの電源を入れます。
ここでは、上のUSBポートは使えないので、下のポートにUSBハブを挿して、キーボード、マウスを接続するか、あるいは、1つのポートでキーボード・マウスを共有できるものを使用して下さい。最悪のケースは必要に応じて、キーボードとマウスを挿し換えながら作業を行ってください。(もし、Cubox-iをお持ちならば、アップグレード作業はCubox-iで行っても構いません。)
デフォルトで作成されたアカウントは
ユーザ名: linaro
パスワード: linaro
です。
以下は、HummingBoardのTerminalでの作業です。
$ sudo su # apt-get update # do-release-upgrade |
選択メッセージがでてきたら、デフォルトの設定でOKを選択して進めてください。
エラー/ワーニング・メッセージメッセージでも作業を続けるを選択してください。
コマンドが完了したらリブートして起動できることをチェックしてください。
4. カーネルの書き換え
カーネルをKernel 3.14 LTSに置き換えます。
HummingBoardの電源をOffにしてSDカードを抜いて、再びPCに挿してください。
ここからはまた、PCでの作業になります。
先程作成したKernel 3.14 LTSのファイルをSDにコピーして不要なファイルを削除します。
自動的に /media/foo/sd01 にマウントされたものとします。
(自動マウントしない場合は、ご自身でマウントしてください。)
$ sudo su # cd /media/foo/sd01 # cp ~/kernel/linux-imx6-3.14/arch/arm/boot/zImage . # cp ~/kernel/linux-imx6-3.14/arch/arm/boot/dts/imx6q-cubox-i.dtb . # cp ~/kernel/linux-imx6-3.14/arch/arm/boot/dts/imx6dl-cubox-i.dtb . # cp ~/kernel/linux-imx6-3.14/arch/arm/boot/dts/imx6dl-hummingboard.dtb . # cp ~/kernel/linux-imx6-3.14/arch/arm/boot/dts/imx6q-hummingboard.dtb . # rm uEnv.txt # cd boot # rm -rf * # cd ../lib/modules # rm -rf * # cp -rf ~/kernel/modules/lib/modules/3.14.14+ . # cd ../ # cp -rf ~/kernel/modules/lib/firmware . |
USB Wifiアダプタを使用する場合はアダプタ用のファームウェアをSDカードに書き込みます。
「(13) CuBox-i でUSBのWiFiアダプタを利用する」http://goo.gl/ynMiUt
の「3-5) アダプタ用のファームウェアを用意しておきましょう」、「4-3) ファームウェアの書き込み」を参考にしてください。
uEnv.txtを作成します。
/media/foo/sd01 の下にuEnv.txtファイルを作成してください。テキストエディタで次のように記述してください。
mmcroot=/dev/mmcblk0p1 rootwait rw console=ttymxc0,115200 console=tty1 consoleblank=0 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=16 dmfc=3 |
5.
SPLとboot.imgを書き直します。
# umount /dev/sdg # dd if=SPL of=/dev/sdg bs=1K seek=1 # dd if=u-boot.img of=/dev/sdg bs=1K seek=42 |
これで全作業は終了です。
SDカードをHummingBoardに挿して、HummingBoardを起動してみてください。
2つのUSBポートが使用できることを確認してみましょう。
コメントをお書きください