2013年01月24日

i.MX53 Quick Start BoardでLinuxを動かす (1)

本業の仕事の関係で、i.MX53 Quick Start Board(部品番号:MCIMX53-START-R)というボードを入手した。Freescaleのi.MX535というCortex-A8 ARMコアCPUを搭載した組込み向け評価ボード。

i.MX53QSB_EntireView_from_IMX53QSBRM.jpg

私の所に来たときは、このボード専用の別売部品であるHDMI Interface Card for MX535/08(部品番号:MCIMXHDMICARD)というドーターボードが取りつけられた状態だった。

上の写真はFreescaleのサイトから入手したもの。現在はまだ借用品だが、いまの仕事が終わったら、これをそのまま譲ってもらえることになっている。ボードの実物写真は後日別の記事に掲載するつもり。

このボードの仕様は以下のとおり。

 プロセッサ      i.MX535(MCIMX535DVV1B)
 DRAMメモリ     8GB DDR3 SDRAM
 ストレージ:     5 in 1 SD/MMC/SDIO Card Connector
            microSD Card Connector
            7-pin SATA Data Connector
 実装コネクタ     Video Output: 15-Pin D-Sub VGA Connector
             30-Pin LVDS Connector
            Ethernet: RJ-45 Connector for 10/100 Base-T
            USB: Dedicated HS USB 2.0 Standard-A Host Connector
             Shared HS USB 2.0 Standard - Host and Micro-B Device Connectors
            Audio; 3.5mm Stereo Head Phone output
             3.5mm Mono-Microphone input and Mono Head Phone (right channel) output
            Debug: 9-Pin D-Sub Debug UART Connector
             20-Pin Standard ARM JTAG Connector
 拡張ヘッダ      120-Pin Header (Populated) to Support 1 of the following:
            Optional HDMI Output Daughter Card (orderable)
            Optional WVGA and WQVGA LCD Display Daughter Cards (orderable)
            Camera Daughter Card (custom)
            SDIO Based WiFi Daughter card (custom)
 インターフェース部品 Power, Reset, 2 User-Defined Buttons
            8 Status LEDs – External Power, PMIC ON, Fault Condition, and more
 電源         5V mm Barrel Connector


さっそくこのIMX53QSBにLinuxを移植したので、その経過を紹介していこう。ただし、BeagleBoardと比べると、このボードはマイナーなので、持っている人はかなり少ないじゃないかと思う。同じボードを持っている人にしか役に立たない情報になるので、本記事は自分のための備忘録として書いていく。

IMX53QSB用のLinux BSPはFreescale社のサイトで配布されているので、今回はそれを入手して使った。ちなみに、Android BSPも同サイトで配布されているが、このボードでAndroidを動かすつもりはない。私自身Androidにまったく興味を持っていないし、IMX53QSBへのLinux移植は本業の仕事向けの支援作業として取り組んでおり、この仕事でもAndroidを使っていないからだ。

最初に、Freescale社のサイトから以下のファイルを入手した。

 (A) Linux 2.6.35 Source Code Files and documentation 11.09L2.6.35_11.09.01_ER_source_bundle.tar.gz
 (B) Patch based on L2.6.35_11_09_ER_SOURCELinux_201112_20patch_bundle.tar.gz


Freescale社のサイトからソフトウェアやツール類をダウンロードするには、先にユーザー・アカウントを作成しておく必要がある(一般公開の製品資料などは、アカウントなしでもダウンロード可能)。

(A)のファイルを解凍して、その中のL2.6.35_11.09.01_ER_docs.tar.gzに含まれている以下の3つのドキュメントにざっと目を通した。

 ltib_build_host_setup.pdf : LTIB Build Host Setup
 i.MX53_START_Linux_BSP_UserGuide.pdf : i.MX53 START Linux User's Guide
 i.MX53_START_Linux_BSP_Release_Note.pdf : i.MX53 START 11.09.01 Linux Release Notes


●LTIB(=BSP)をインストールする

まずはBSPのビルドフレームワークツールであるLTIB(Linux Target Image Builder)をインストールせよと書いてあったので、上のLTIBの設定手順が記載されたドキュメントを読みながら、それのとおりにやってみた。

このドキュメントには、LTIBが対応しているディストリビューションはUbuntu Destop 9.04だけだと書かれているが、下調べで得た情報で、Ubuntu 10.04でも動くことが判っていたので、Ubuntu Desktop 10.04(32ビット版)をインストールしたVMware仮想マシンを用意して、その上にBSPのビルド環境を構築した。本当はUbuntu 12.04を使いたかったんだけど、このLTIBというツールがUbuntu 10.04までしか対応していないという情報がたくさん見つかったので、今回はUbuntu 12.04を使うことは断念した(LTIBはスクリプト・ベースのツールなので、スクリプトにパッチを当てればUbuntu 12.04でも動くという情報も在ったが、パッチを当てても確実に動く保証はないみたいだ。本来の目的であるBSPビルドの前段階の作業に時間を取られたくなかったこともあり、今回はUbuntu 12.04の使用はすっぱりと諦めた。いつか時間があるときに、Ubuntu 12.04上にLTIB環境を構築することに挑戦しようと思っている)。

LTIBの動作に必要なパッケージをインストールするために、最初に、以下のシェルスクリプトを実行しろとドキュメントに書かれてあった。
 #!/bin/bash

# Install packages needed by LTIB
sudo aptitude -y install gettext libgtk2.0-dev rpm bison m4 libfreetype6-dev
sudo aptitude -y install libdbus-glib-1-dev liborbit2-dev intltool
sudo aptitude -y install ccache ncurses-dev zlib1g zlib1g-dev gcc g++ libtool
sudo aptitude -y install uuid-dev liblzo2-dev
sudo aptitude -y install tcl dpkg

# Packages required for 64-bit Ubuntu
# Do "uname -a" and see if the word "x86_64" shows up.
if uname -a|grep -sq 'x86_64'; then
sudo aptitude -y install ia32-libs libc6-dev-i386 lib32z1
fi

# The following recommended for Linux development.
# They are not required by LTIB.
sudo aptitude -y install gparted emacs22-nox openssh-server
sudo aptitude -y install nfs-common nfs-kernel-server lintian
sudo aptitude -y install git-core git-doc git-email git-gui gitk
sudo aptitude -y install diffstat indent tofrodos fakeroot doxygen uboot-mkimage
sudo aptitude -y install sendmail mailutils meld atftpd sharutils
sudo aptitude -y install manpages-dev manpages-posix manpages-posix-dev linux-doc
sudo aptitude -y install vnc4server xvnc4viewer

このシェルスクリプトは一回だけしか実行しないはずで、そんなものをわざわざ作成するのは面倒だと思ったので、上の各行を一つずとコピペしながら、LTIBの必須パッケージのインストールを行った。このシェルスクリプトではたくさんパッケージをインストールしているが、私は前半の(「# Install packages needed by LTIB」で始まる)5行分のパッケージしかインストールしなかった。LTIBのドキュメントを良く読むと、LTIBによるビルドとシステムイメージからブートSDを作成するだけなら、他のパッケージは不要なんじゃないかという気がしたからだ。また、このシェルスクリプトの「if〜fi」で挟まれた行はホスト環境が64ビット版であるかどうかを判定して実行されるので、64ビット版Ubuntuの場合はこれらのパッケージもインストールする必要がある。

続いて、/etc/sudoersの最後に以下の設定項目を追加した。
 $ sudo visudo

USER ALL=NOPASSWD:/usr/bin/rpm,/opt/freescale/ltib/usr/bin/rpm

上の設定項目の「USER」部分には、LTIBを使用するユーザー名にした。LTIBのドキュメントには、これを「%admin」にしろと書かれていたが、それだと、adminグループに所属するすべてのユーザーが上記のディレクトリにアクセスできてしまう。これはセキュリティ的に怖いので、アクセス権を与えるのはLTIBを使うユーザーだけに限定することにした(特定のコマンド限定とはいえroot権限の実行権をを与えることは、セキュリティ的に大いに問題があると思う。どうもこのLTIBというツールは好きになれない)。

さらに、以下のコマンドを実行して、LTIB本体のインストールを行った。
 $ tar zxf L2.6.35_11.09.01_ER_source.tar.gz
$ cd L2.6.35_11.09.01_ER_source
$ ./install

上のinstallは会話形式で、Freescaleのソフトウェア使用ライセンスに同意するかどうかの質問に続いて、LTIBのインストール先ディレクトリを尋ねるプロンプトが表示されるだけの短いシェルスクリプト。

LTIBのインストールが終了した後、インストール先のLTIBのファイル構成をざっと調べてみたが、どうもターゲット用のカーネルやパッケージはすべてLTIBと一体になっていて、このツールを使わないとBSP自体のビルドができないようになっているようだ。LTIBでは、ターゲット用のパッケージはすべてrpm形式で管理されており、パッケージを追加する場合は、これに合わせる必要があるみたいだ(deb全盛の時代に、rpmベースのパッケージ管理はないだろうという気がして仕方ないんだけど・・・)。

●ターゲット構成情報を設定する

ここまででLTIBのインストールは終了したので、続いて、LTIBが持っているターゲット構成情報の設定を行った。
 $ cd <LTIB directory>
$ ./ltib -m config

上の「./ltib -m config」というコマンドは、LTIBをインストールした直後に必ず一度実行しなければならないようだ。LTIBのインストール直後にこのコマンドを実行すると、「Installing host support packages.」というメッセージが表示され、しばらく待たされた後(初めて「./ltib」コマンドを実行したときに、全パッケージファイルを/opt/freescale/pkgsディレクトリへ移動する処理を行なっているようだ)、下のような画面が開く。
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot01-640x410.png
これはターゲットプラットホームのカテゴリを選択する画面のようだ。Freescale社はPowerPCやColdFireコアのCPUも製造しているが、LTIBはこれらのCPUにも対応していようなので、ターゲットプラットホームのカテゴリ選択画面が最初に表示されるのは、多分この理由によるのだろう。上の画面の「Platform choice (Freescale iMX reference boards) --->」というのがターゲットプラットホームのカテゴリを選択するメニューだが、このメニューの選択可能項目はこれしか存在しない。つまりこのメニューはすでに適切に設定済みの状態なので、特に変更する必要はない。そのまま画面の下側の「」を実行した。すると、前画面での設定内容を保存するかどうかの質問画面に続いて(この画面では当然「」を選択した)、下のような新しい画面が表示される。
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot03-640x410.png
この画面では、以下のメニュー項目を変更した。
 --- Choose the platform type
Selection (imx25_3stack) ---> (X) imx5x
--- Choose the packages profile
Selection (use packages in preconfig (Min profile)) --->〔変更なし〕

さらに、下の画面が表示されるので、
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot13-640x410.png
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot18-640x410.png
この画面では、下のメニュー項目を変更した。
 --- Choose your bootloader for U-Boot
bootloader (u-boot) --->〔変更なし〕
--- Choose your board for u-boot
board (mx51_bbg) ---> (X) mx53_loco

BSP User's Guideに上の手順の説明が書かれていたので、すべてそれに従った。最後の画面の「Exit」を実行すると、LTIBの構成設定画面は終了する。以上で、LTIBのターゲット構成情報の設定は完了のようだ。

BSP User's Guideには、ここで下のコマンドを実行せよと書いてある。
 $ ./ltib

このコマンドを実行すると、BSPのビルドが始まり、最終的にカーネルを含むシステムイメージを生成してくれるらしい。しかし、私は、最新のパッチを適用済みの状態で最初のビルドをやりたかったので、上のコマンドを実行せずに、ここでFreescaleから配布されている最新のパッチをBSPへ適用することにした。上述の(B)のファイルにIMX53QSB用Linux BSPの最新パッチが格納されている。

●最新版パッチをBSPに適用する

まずは、パッチが格納されているファイルを展開した(ホームディレクトリに、Linux_20201112_20patch_boundle.tar.gzを展開した)。
 $ cd ~
$ tar zxf Linux_20201112_20patch_boundle.tar.gz
$ tar zxf L2.6.35_MX53_201112_Patches.tar.gz

上の圧縮ファイル(Linux_20201112_20patch_boundle.tar.gz)には以下のファイルが格納されている。

 (C) L2.6.35_MX53_201112_Patches.tar.gz ⇒ パッケージ別のパッチが格納された圧縮ファイル
 (D) MX53_LINUX_BSP_201112_Patch_release.pdf ⇒ 本パッチの説明ドキュメント


(C)のファイルを展開すると、以下の7つのファイルが生成される。

 ./L2.6.35_MX53_201112_Patches/linux-2.6.5.3-imx_11.09.01_201112.tar.gz
 ./L2.6.35_MX53_201112_Patches/u-boot-v2009.08-imx_11.09.01_201112.tar.gz
 ./L2.6.35_MX53_201112_Patches/imx-lib-11.09.01_201112.tar.gz
 ./L2.6.35_MX53_201112_Patches/imx-test-11.09.01_201112.tar.gz
 ./L2.6.35_MX53_201112_Patches/firmware-imx-11.09.01_201112.tar.gz
 ./L2.6.35_MX53_201112_Patches/amd-gpu-bin-mx51-11.09.01_201112.tar.gz
 ./L2.6.35_MX53_201112_Patches/amd-gpu-x11-bin-mx51-11.09.01_201112.tar.gz


ファイル名から判るとおり、パッチはパッケージ別に分かれており、上の各ファイルがそれらに相当する。

以降、下の手順を実行して、上の各パッチをBSPへ適用した。
Kernel

$ cd <LTIB directory>
$ ./ltib -m prep -p kernel
$ cd rpm/BUILD/linux-2.6.35.3
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/linux-2.6.35.3-imx_11.09.01_201112.tar.gz
$ sh linux-2.6.35.3-imx_11.09.01_201112/patch.sh


U-Boot

$ cd ../../..
$ ./ltib -m prep -p u-boot
$ cd rpm/BUILD/u-boot-2009.08
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/u-boot-v2009.08-imx_11.09.01_201112.tar.gz
$ sh u-boot-v2009.08-imx_11.09.01_201112/patch.sh

imx-lib

$ cd ../../..
$ ./ltib -m prep -p imx-lib
$ cd rpm/BUILD/imx-lib-11.09.01
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/imx-lib-11.09.01_201112.tar.gz
$ sh imx-lib-11.09.01_201112/patch.sh

imx-test

$ cd ../../..
$ ./ltib -m prep -p imx-test
$ cd rpm/BUILD/imx-test-11.09.01
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/imx-test-11.09.01_201112.tar.gz
$ sh imx-test-11.09.01_201112/patch.sh

Firmware

$ cd ../../..
$ ./ltib -m prep -p firmware
$ cd rpm/BUILD/firmware-imx-11.09.01
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/firmware-imx-11.09.01_201112.tar.gz
$ sh firmware-imx-11.09.01_201112/patch.sh

amd-gpu for FB solution

$ cd ../../..
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/amd-gpu-bin-mx51-11.09.01_201112.tar.gz
$ ./ltib -m prep -p amd-gpu-bin
$ cd rpm/BUILD/amd-gpu-bin-mx51-11.09.01
$ rm -rf *
$ cp -rf ../../../amd-gpu-bin-mx51-11.09.01_201112/* .

amd-gpu for X-Window

$ cd ../../..
$ tar -xzvf ~/L2.6.35_MX53_201112_Patches/amd-gpu-x11-bin-mx51-11.09.01_201112.tar.gz
$ ./ltib -m prep -p amd-gpu-x11-bin
$ cd rpm/BUILD/amd-gpu-x11-bin-mx51-11.09.01
$ rm -rf *
$ cp -rf ../../../amd-gpu-x11-bin-mx51-11.09.01_201112/* .

上の「./ltib -m prep -p <PACKAGE>」というコマンドは、どうやら「rpmbuild -bp <PACKAGE>」を呼び出しているようだ。

話が少しそれるが、7年位前に私が初めて組込みLinuxの仕事をやったときに、rpmベースのビルドフレームワークツールを使ったことがある。この仕事のときに、ターゲットシステムを構築する全作業のかなりの割合を、rpmパッケージを作成してビルドツールの環境へ追加することに費やしたので、一応rpmパッケージの作成方法については理解している(ずいぶん昔のことなので、記憶を思い起こす必要があるが・・・)。Linuxカーネルの移植が終わったら、それに続いて、IMX53QSBへのQtの移植にも挑戦するつもりだが、Qtが依存するパッケージをLTIBのフレームワーク環境へ追加する必要があるので、多分この仕事のときにやったのと同じような作業をやらざるをえなくなるんじゃないかと予想している。

●システムイメージを生成する

これで、IMX53QSB用BSPはすべての最新のパッチが適用済みの状態になった。以上でシステムイメージをビルド生成する条件は整ったことになるが、ここで改めてBSPのドキュメントに読むと、タッチスクリーンを使用しない場合は、そのドライバをカーネルから削除するように勧めている注意書きの存在に気がついた。IMX53QSB用にタッチパネルLCDを入手する予定は当面ないので、このアドバイスに従って、最初のビルドを行う前に、タッチスクリーン・ドライバの削除もやってしまうことにした。

LTIBにはmenuconfing(Linuxカーネル・ソースに含まれている標準的なコンフィグレーション設定ツール)の機能も含まれており、LTIBからmenuconfingを起動して、カーネルのコンフィグレーション設定を変更できるようになっている。menuconfingを開くには、次のコマンドを実行して、LTIBの画面を開く。
 $ cd <LTIB directory>
$ ./ltib -m config

すると、下のような画面が表示される。
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot32-640x410.png
この画面内の「Configure the kernel」というメニュー項目を有効状態して、一旦LTIBの画面を終了した。そして、以下のコマンドを実行した。
 $ ./ltib

そうすると、下の画面のようなカーネルのコンフィグレーション設定画面が表示されたので、
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot35-640x410.png
IMX53QSB_LinuxBSP_LTIB_ConfigMenuScreen-Scrnshot36-640x410.png
この画面から下のようにメニューを移動して、タッチスクリーン・ドライバを無効状態に変えた。
       Device Driver  --->

Input device support --->

[ ] Touchscreens --->

menuconfigの画面を抜けると、LTIBによるBSPのビルドが開始されてしまった(オプションなしの「./tlib」だと、常にビルドが実行されるみたいだ)。全行程に約11分かかったが(Intel Core i7 1.8GHz HyperThreading 4コア、メモリ2GB、ストレージ SSDという構成のVMware仮想マシンの場合)、特にエラーが起きることもなくビルドは問題なく終了した。ビルドが完了すると、LTIBディレクトリの直下にrootfsというディレクトリが作成され、生成されたシステムイメージ一式はこの中に格納されるようだ。

長くなったので、本記事は一旦ここまでで切ろう。続きは次の記事に書くが、上で作成したシステムイメージを使って実際にIMX53QSBでLinuxを動かすところまでが、その内容になる予定。
タグ:Freescale i.MX
posted by とみやん at 07:40| Comment(0) | TrackBack(0) | Embedded Linux > その他
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/61682044

この記事へのトラックバック