labs.beatcraft.com
bc9/Software/OpenEmbedded/kernel2.6.29(2/2)

kernel update

gumstix-oe の kernel は、現在 2.6.21、2.6.22、2.6.24 を選択することができますが、
2.6.24 でも既に2年近く古いものになっています。
そこで bc9 の kernel version を 2.6.29 に更新しました。
更新の手順を以下に記述します。

microSD boot 環境の構築

kernel を更新するにあたって、新しい kernel を利用する userland を整えます。
kernel 更新作業の利便性から、内蔵FLASH ROMに書き込む方法でなく
microSDに起動可能の環境を新たに構築する方法を実行します。

gumstix の build 環境の作成

bc9 (gumstix) の build 環境を作成します。
ビルド環境 は OpenEmbedded の build 環境 (bitbake) を Gumstix,Inc. が gumstix 向けに調整したものを使用します。
(以降、gumstix OEと表記します)
あらかじめ gumstix 開発者ホームページにある gumstix ビルド環境の setup 手順を把握しておいて下さい。

ただし、今回は内蔵FLASH ROM に書き込むイメージでなくmicroSD BOOT 用イメージをbuildするため、
上記ページとは手順がかなり異なります。

以下の作業は Ubuntu8.04LTS 上で beat ユーザで行うことを前提に記述しています。
(Ubuntu8.10 を使用したい場合は Build Environment Ubuntu 8.10 を、
 Ubuntu9.04 を使用したい場合は Build Environment Ubuntu 9.04 を参照し、調整を加えて下さい。
 リンク先ページではgccを4.1にしていますが、4.2系の方が良いようです。)

shの調整

Ubuntu の /bin/sh は bash でなく dash へのリンクになっていますが、bitbake による build 作業時に問題が発生するのを避けるため
以下の手順で bash へのリンクになるよう調整します。

$ sudo dpkg-reconfigure dash

dash を /bin/sh にするか聞かれるので、「いいえ」を選択します。

必須application のインストール

以下のコマンドで bitbake に必要なapplicationをインストールします。

$ sudo apt-get install build-essential help2man diffstat texi2html texinfo libncurses5-dev cvs gawk \
  python-dev python-pysqlite2 python-psyco ckermit lrzsz subversion

gumstix OE の check out

$ mkdir ~/gumstix 
$ cd ~/gumstix 
$ svn co https://gumstix.svn.sourceforge.net/svnroot/gumstix/trunk gumstix-oe

環境変数の設定

永続的に設定してしまう場合は

$ cat gumstix-oe/extras/profile >> ~/.bashrc

一時的に環境変数を設定する場合は、

$ . ~/gumstix/gumstix-oe/extras/profile

あるいは

$ source  ~/gumstix/gumstix-oe/extras/profile

を実行します。

source code のキャッシュ保存設定

gumstix OE は build 作業の途中で source code をダウンロードするようになっています。
default設定では /usr/share/sources にダウンロードした source code を保存するようになっていますが、
扱い易いよう以下のように設定を変更してダウンロード先を gumstix/sources にします。

$ svn diff build/conf/site.conf 
Index: build/conf/site.conf
===================================================================
--- build/conf/site.conf	(リビジョン 318)
+++ build/conf/site.conf	(作業コピー)
@@ -1,5 +1,6 @@
 # specifies where BitBake should place the downloaded sources
-DL_DIR = "/usr/share/sources"
+DL_DIR = "/home/beat/gumstix/sources"
 
 # specifies where BitBake should create its temporary files
 TMPDIR = ${GUMSTIXTOP}/tmp

ビルド内容の調整

PXA270の性能を有効活用するため、以下のように設定を変更して iwmmxt を有効にします。

$ svn diff com.gumstix.collection/conf/machine/include/tune-iwmmxt.inc 
Index: com.gumstix.collection/conf/machine/include/tune-iwmmxt.inc
===================================================================
--- com.gumstix.collection/conf/machine/include/tune-iwmmxt.inc	(リビジョン 318)
+++ com.gumstix.collection/conf/machine/include/tune-iwmmxt.inc	(作業コピー)
@@ -1,6 +1,9 @@
 # Configurations for the Intel PXA27x Appications Processor Family. 
 # Please use tune-xscale for PXA255/PXA26x based processors.
-TARGET_CC_ARCH = "-march=iwmmxt -mcpu=iwmmxt -mtune=iwmmxt"
+FEED_ARCH = "iwmmxt"
+TARGET_CC_ARCH = "-march=iwmmxt -mtune=iwmmxt"
+TARGET_CC_KERNEL_ARCH = "-march=iwmmxt -mtune=iwmmxt"
 PACKAGE_ARCH = "iwmmxt"
 PACKAGE_EXTRA_ARCHS += "iwmmxt"

microSD から起動できるイメージでは kernel の1Mサイズ制限は不要なのでサイズを倍に増やします。

$ svn diff com.gumstix.collection/conf/machine/include/gumstix.inc 
Index: com.gumstix.collection/conf/machine/include/gumstix.inc
===================================================================
--- com.gumstix.collection/conf/machine/include/gumstix.inc	(リビジョン 318)
+++ com.gumstix.collection/conf/machine/include/gumstix.inc	(作業コピー)
@@ -10,6 +10,7 @@
 KERNEL_IMAGETYPE = "uImage"
 RDEPENDS_kernel-base = ""
-KERNEL_IMAGE_MAXSIZE = "1048577"
+KERNEL_IMAGE_MAXSIZE = "2197154" // incleased for mmcboot 
 
 UBOOT_ENTRYPOINT = "a0008000"
 
@@ -35,7 +35,7 @@
 PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
 PREFERRED_PROVIDER_gsmd="libgsmd"
 
-PREFERRED_VERSION_gumstix-kernel = "2.6.21"
+PREFERRED_VERSION_gumstix-kernel = "2.6.24"
 PREFERRED_VERSION_udev = "118"
 PREFERRED_VERSION_gnuplot = "4.0.0"
 PREFERRED_VERSION_dropbear = "0.47"

microSDから起動できるイメージを作成するため、mmcboot のコメントアウトを外して有効にします。
ほかに bc9 向けの調整を加えています。

$ svn diff com.gumstix.collection/conf/machine/gumstix-custom-verdex.conf 
Index: com.gumstix.collection/conf/machine/gumstix-custom-verdex.conf
===================================================================
--- com.gumstix.collection/conf/machine/gumstix-custom-verdex.conf	(リビジョン 318)
+++ com.gumstix.collection/conf/machine/gumstix-custom-verdex.conf	(作業コピー)
@@ -5,12 +5,12 @@
 MACHINE_FEATURES += "verdex"
 MACHINE_FEATURES += "iwmmxt"
 require conf/machine/include/gumstix.inc
-require conf/machine/include/tune-xscale.inc
+require conf/machine/include/tune-iwmmxt.inc
 
 #
 # Your flash size = Total flash (in MB) - 1 (for linux kernel partition)
-ROOT_FLASH_SIZE = "15"
-#ROOT_FLASH_SIZE = "31"
+#ROOT_FLASH_SIZE = "15"
+ROOT_FLASH_SIZE = "31"
 
 #
 # Enable use of virtual terminal for LCD on tty1 if USE_VT = "1"
@@ -28,7 +28,7 @@
 #MACHINE_FEATURES  += "spi"
 
 MACHINE_FEATURES  += "serial"
-MACHINE_FEATURES  += "bluetooth"
+#MACHINE_FEATURES  += "bluetooth"
 MACHINE_FEATURES  += "sound"
 
 # if you enable robostix you will need to disable both "lcd" and "touchscreen" features
@@ -51,7 +51,7 @@
 MACHINE_FEATURES  += "fat"
 
 # enable one of the following if you want to target build for uimage/rootfs on mmc/microSD or CF
-#MACHINE_FEATURES  += "mmcroot"
+MACHINE_FEATURES  += "mmcroot"
 #MACHINE_FEATURES  += "cfroot"
 
 #

gumstix の expansion board wifistix モジュールは build error になることが分かっているので、
build されないよう設定を削除します。(bc9 ではもともと使用しません。)

$ svn diff com.gumstix.collection/packages/tasks/task-base-gumstix.bb
Index: com.gumstix.collection/packages/tasks/task-base-gumstix.bb
===================================================================
--- com.gumstix.collection/packages/tasks/task-base-gumstix.bb	(リビジョン 318)
+++ com.gumstix.collection/packages/tasks/task-base-gumstix.bb	(作業コピー)
@@ -201,7 +201,6 @@
 
 RDEPENDS_task-base-gumstix-wifi = "\
     task-base-gumstix-pcmcia \
-    wifistix-modules \
     wireless-tools \
     wpa-supplicant \
     "

上記の変更で FEED_ARCH を armv5te から iwmmxt にしているので、ipk で application をインストールする場合
自分で bitbake build したものでないとインストールできません。
gumstix.net で用意されている armv5te の prebuild ipk を利用したい場合は、この変更が反映されないよう
gumstix-custom-verdex.conf の中で tune-iwmmxt.inc を require せず tune-xscale.inc を require して build して下さい。

build

以下のコマンドで kernel、kernel module、userland を build します。
arm cross-toolchain の build から順に行われるので、マシンスペックにもよりますが数時間から半日ほど要します。

$ bitbake gumstix-directfb-image

build が正常に終了すると以下のようなファイルが生成されています。

$ ls -al tmp/deploy/glibc/images/gumstix-custom-verdex/
合計 21780
drwxr-xr-x 2 beat beat     4096 2009-06-23 00:01 .
drwxr-xr-x 3 beat beat     4096 2009-06-22 22:58 ..
-rw-r--r-- 1 beat beat 10402796 2009-06-23 00:01 Angstrom-gumstix-directfb-image-glibc-ipk-2007.9-test-20090622-gumstix-custom-verdex.rootfs.jffs2
-rw-rw-r-- 1 beat beat  8713428 2009-06-23 00:01 Angstrom-gumstix-directfb-image-glibc-ipk-2007.9-test-20090622-gumstix-custom-verdex.rootfs.tar.gz
lrwxrwxrwx 1 beat beat       97 2009-06-23 00:01 gumstix-directfb-image-gumstix-custom-verdex.jffs2 -> Angstrom-gumstix-directfb-image-glibc-ipk-2007.9-test-20090622-gumstix-custom-verdex.rootfs.jffs2
lrwxrwxrwx 1 beat beat       98 2009-06-23 00:01 gumstix-directfb-image-gumstix-custom-verdex.tar.gz -> Angstrom-gumstix-directfb-image-glibc-ipk-2007.9-test-20090622-gumstix-custom-verdex.rootfs.tar.gz
-rw-rw-r-- 1 beat beat  1929321 2009-06-22 22:58 modules-2.6.24-r1-gumstix-custom-verdex.tgz
-rw-r--r-- 1 beat beat  1191276 2009-06-22 22:58 uImage-2.6.24-r1-gumstix-custom-verdex.bin

microSDのformat

microSD に上記の kernel と userland を配置して起動可能にするため、microSD を2つの partition に分割して format します。
最低でも128M以上の容量が必要です。
1. microSD の先頭40Mを FAT16 で format
2. 残りを ext2 で format
(fdisk、mkvfat、mkext2を使っても、gparted を利用しても、方法は自由に。)
vfat partition と ext2 partition をそれぞれ作業マシンの /media/disk、/media/disk-1 に mount している前提で、
以下のように必要なファイルを必要な位置に配置します。

$ sudo cp ~/gumstix/gumstix-oe/extras/mmc-root/gumstix-factory.script /media/disk/
$ sudo cp ~/gumstix/gumstix-oe/tmp/deploy/glibc/images/gumstix-custom-verdex/uImage-2.6.24-r1-gumstix-custom-verdex.bin /media/disk/uimage
$ sudo tar -C /media/disk-1/ -xvfz ~/gumstix/gumstix-oe/tmp/deploy/glibc/images/gumstix-custom-verdex/gumstix-directfb-image-gumstix-custom-verdex.tar.gz
$ sudo tar -C /media/disk-1/ -xvfz ~/gumstix/gumstix-oe/tmp/deploy/glibc/images/gumstix-custom-verdex/modules-2.6.24-r1-gumstix-custom-verdex.tgz

microSD boot

用意のできた microSD を bc9 の microSDスロットに挿し、シリアルケーブルを PC に接続して電源を入れると、
シリアルコンソールに起動ログが流れ microSD から bc9 が起動します。(初回起動時、LCDには何も表示されません。)
初回の起動は locale の設定や ssh_key の生成が行われるのでやや時間がかかります。
起動が完了したらシリアルコンソールからログインし、以下のように kernel module の設定を行います。

$ depmod
$ vi /etc/modules/pxafb
pxafb とだけ記述して保存
$ vi /etc/modules/fbcon
fbcon とだけ記述して保存
$ update-modules

これで次回起動時から LCD が表示されるようになります。


by 大塚聡史

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2009-06-30 (火) 21:53:56 (5414d)