bc10

概要

2010/09/22

bc10 用OpenEmbeddedビルド環境作成手順

Ubuntu 10.04 を使って、the Angstrom Distribution の Building Angstrom の手順に従ってビルド環境用の設定をします。

Ubuntu 10.04 開発環境

Ubuntu デフォルトの sh は dash なので以下のコマンドを実行し bash に変更します。
sh が dash になっていると bitbake 実行時 bash を指定しているものがあり、予期せぬところでエラーが発生するためです。

$ sudo dpkg-reconfigure dash

「dash を /bin/sh インストールしますか?」と聞かれるので「No」を選択します。
これで sh は bash に変更されます。

OEandYourDistroDebian の項 の通りに build に必要な deb package をインストールします。

$ sudo apt-get install ssh
$ sudo apt-get install sed wget cvs subversion git-core \
  coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils \
  gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ \
  desktop-file-utils chrpath

(一行にすると長いので\(円マークに見えますがバックスラッシュです)で改行しています。)

$ sudo apt-get install libxml2-utils xmlto python-psyco docbook

また、Ubuntu 10.04 では bitbake base-image 実行時に expat-2.0.1.tar.gz で DATA-CRC Errorが発生します。
これは gzip 1.3.12 によって発生しています。 gzip を 1.4に変更することで上記エラーが発生しなくなるので 1.4 に変更します。

gzip のバージョン確認

$ gzip --version
gzip 1.3.12 

1.3.12 なので 1.4 に更新します。
gnu.org からgzip 1.4 を取得しビルド、インストールをします。

$ wget ftp://ftp.gnu.org/gnu/gzip/gzip-1.4.tar.gz
$ tar xvfz gzip-1.4.tar.gz
$ cd gzip-1.4
$ ./configure
$ make
$ sudo make install

インストール完了後 version が1.4 になっていることを確認します。

$ gzip --version
gzip 1.4

bitbake 環境構築

bitbake は 組込向け Linux ディストリビューションとして必要な kernel、パッケージ
を Recipe という形で管理、ビルドするために使用する make コマンドのようなツールです。
Recipe は ソースコードの取得や そのソースコードにあてる patch config からビルドなどを メタデータの形で持っています。
より詳細な資料は 『BitBake User Manual』をご覧ください。

ここでは Building Angstrom に記載されている方法と bc10 用への変更を記載します。

$ cd ~
$ git clone git://gitorious.org/angstrom/angstrom-setup-scripts.git
$ cd angstrom-setup-scripts

oebb.sh でセットアップ対象のマシン名を指定します。 ここでは beagleboard を指定します。

$ ./oebb.sh config beagleboard

実行後以下のようなメッセージが出ます。

There now is a sourceable script in ~/.oe/enviroment. You can do '.  
~/.oe/environment' and run 'bitbake something' without using ./oebb.sh 
as wrapper

Setup for beagleboard completed

oebb.sh update を実行し OE と bitbake のファイルをダウンロードします。

$ ./oebb.sh update

ここで 実行最後に以下のようなエラーがでますが、ビルド自体には問題ありません。

fatal: git checkout: branch org.openembedded.dev already exists
$ cd ~/angstrom-setup-scripts/sources/openembedded/
$ git branch -a
<略>
 remotes/origin/shared/blackfin
 remotes/origin/shared/xorg-7.4-update
 remotes/origin/shr/import
 remotes/origin/shr/merge
 remotes/origin/shr/stable2009
 remotes/origin/shr/testing2009
 remotes/origin/shr/testing2010
 remotes/origin/shr/unstable
<略>
$ git checkout origin/stable/2009 -b stable/2009
$ git pull

git pull を実行するとアップデートの必要がないという以下のメッセージが表示されます。

Already up-to-date.
$ cd ~/angstrom-setup-scripts/build/conf
$ vi local.conf
BB_NUMBER_THREADS = "2"

DISTRO   = "angstrom-2008.1"
MACHINE ?= "beagleboard" 

# Set TMPDIR instead of defaulting it to /tmp
TMPDIR = "/home/beat/angstrom-setup-scripts/build/tmp-angstrom_2008_1"

# Don't generate the mirror tarball for SCM repos, the snaps
hot is enough
BB_GENERATE_MIRROR_TARBALLS = "0"

環境設定用ファイル ~/.oe/enviroment を読み込み、beagleboard 用の各PATHが設定が完了します。

$ .  ~/.oe/environment

Ubuntu 10.04 では bitbake 実行時 qemu-arm のビルドで vm/mmap_min_addr の値を0 にしないとビルドエラーを起こします。
wiki では 128 でも良いと書かれていますが、0 を設定しないと bitbake 実行時に以下のエラーメッセージが表示されます。

$  MACHINE=beagleboard bitbake base-image
FATAL:  Openembedded's config sanity checker detected a potential 
misconfiguration.
      Either fix the cause of this error or at your own risk disable the 
checker (see sanity.conf).
      Following is the list of potential problems / advisories:
       /proc/sys/vm/mmap_min_addr is not 0. This will cause problems with qemu so please fix the value (as root).

To fix this in later reboots, set vm.mmap_min_addr = 0 in /etc/sysctl.conf.

Wikiの[SOLVED - update 2010-05]の項目 に書かれている方法 a)またはb) にてmmap_min_addr の値を 0に設定します。
(Wikiでは"128"と書いてありますが、0に設定しないとエラーメッセージが bitbake 実行時に出ます。)

$ sudo -s
a)
# echo 0 > /proc/sys/vm/mmap_min_addr
# cat /proc/sys/vm/mmap_min_addr
0
b)
# sysctl -w vm.mmap_min_addr=0 

Angstrom イメージ作成 1

bitbake 実行

mmap_min_addr の設定完了後、bitbake base-image を実行します。

$ MACHINE=beagleboard bitbake base-image
<中略>
NOTE: Running task 2909 of 2910 (ID: 18, /home/beat/angstrom-setup-scripts/sources/openembedded/recipes/images/base-image.bb, do_rm_work)
NOTE: package base-image-1.0-r0: task do_rm_work: Started
NOTE: package base-image-1.0-r0: task do_rm_work: Succeeded
NOTE: Running task 2910 of 2910 (ID: 0, /home/beat/angstrom-setup-scripts
/sources/openembedded/recipes/images/base-image.bb, do_rm_work_all)
NOTE: package base-image-1.0-r0: task do_rm_work_all: Started
NOTE: package base-image-1.0-r0: task do_rm_work_all: Succeeded
NOTE: Tasks Summary: Attempted 2910 tasks of which 2822 didn't need to be rerun and 0 failed.

上記のように表示されると bitbake base-image の完了です。

bitbake base-image 実行完了後、bitbake console-image を実行します。

$ MACHINE=beagleboard bitbake cosole-image
<中略>
NOTE: package console-image-1.0-r0: task do_rm_work: Started
NOTE: package console-image-1.0-r0: task do_rm_work: Succeeded
NOTE: Running task 2892 of 2892 (ID: 0, /home/beat/angstrom-setup-scripts
/sources/openembedded/recipes/images/console-image.bb, do_rm_work_all)
NOTE: package console-image-1.0-r0: task do_rm_work_all: Started
NOTE: package console-image-1.0-r0: task do_rm_work_all: Succeeded
NOTE: Tasks Summary: Attempted 2892 tasks of which 2854 didn't need to be rerun and 0 failed.

上記のように表示されると bitbake console-image の完了です。

作成されたイメージファイルは
angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboard 以下に配置されています。

beat@bc10-oedev:~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc
/images/beagleboard$ ls
Angstrom-base-image-glibc-ipk-2009.X-stable-beagleboard-testlab
Angstrom-base-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2
Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard-testlab
Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2
base-image-beagleboard.tar.bz2
base-image-beagleboard.ubi
console-image-beagleboard.tar.bz2
console-image-beagleboard.ubi
modules-2.6.29-r46-beagleboard.tgz
u-boot-beagleboard-2009.05+r30+gitrd363f9cb0918a1b6b92e2e20d01543d0c4f53274-r30.bin
u-boot-beagleboard.bin
uImage-2.6.29-r46-beagleboard.bin
uImage-beagleboard.bin
ubinize.cfg

環境変数設定

bitbake で使用した toolchain で bc10 用の x-loader、u-boot、bc10-rowboat-kernel をビルドします。
angstrom stable/2009 のビルドで使った toolchain は以下の場所に配置されています。

beat@bc10-oedev:~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/cross/armv7a/bin$ ls
arm-angstrom-linux-gnueabi-addr2line   arm-angstrom-linux-gnueabi-gccbug                  arm-angstrom-linux-gnueabi-modprobe
arm-angstrom-linux-gnueabi-ar          arm-angstrom-linux-gnueabi-gcov                    arm-angstrom-linux-gnueabi-nm
arm-angstrom-linux-gnueabi-as          arm-angstrom-linux-gnueabi-generate-modprobe.conf  arm-angstrom-linux-gnueabi-objcopy
arm-angstrom-linux-gnueabi-c++         arm-angstrom-linux-gnueabi-gfortran                arm-angstrom-linux-gnueabi-objdump
arm-angstrom-linux-gnueabi-c++filt     arm-angstrom-linux-gnueabi-gprof                   arm-angstrom-linux-gnueabi-ranlib
arm-angstrom-linux-gnueabi-cpp         arm-angstrom-linux-gnueabi-insmod                  arm-angstrom-linux-gnueabi-readelf
arm-angstrom-linux-gnueabi-depmod-2.6  arm-angstrom-linux-gnueabi-insmod.static           arm-angstrom-linux-gnueabi-rmmod
arm-angstrom-linux-gnueabi-g++         arm-angstrom-linux-gnueabi-ld                      arm-angstrom-linux-gnueabi-size
arm-angstrom-linux-gnueabi-gcc         arm-angstrom-linux-gnueabi-lsmod                   arm-angstrom-linux-gnueabi-strings
arm-angstrom-linux-gnueabi-gcc-4.3.1   arm-angstrom-linux-gnueabi-modinfo                 arm-angstrom-linux-gnueabi-strip

以下のように環境変数を設定します。

$ export PATH=${HOME}/angstrom-setup-scripts/build/tmp-angstrom_2008_1/cross/armv7a/bin:${PATH}
$ export ARCH=arm
$ export CROSS_COMPILE=arm-angstrom-linux-gnueabi-

x-loader ビルド

bc10用 x-loader を取得し ビルドを実行します。

$ cd ~/
$ git clone git://gitorious.org/~bc-dev/x-load-omap3/x-load-bc10.git x-load-bc10
$ cd x-load-bc10
$ git checkout -t -b bc10 origin/bc10
$ make omap3530bc10_config
$ make

ビルド完了後に x-load.bin が生成されます。

signGP は以下のように使用します。

$ ./signGP x-load.bin

完了後 x-load.bin.ift が生成されます。
BootROM の仕様により、x-load.bin.ift をSDカードにコピーするときは、
SDカードのルートディレクトリにMLOという名前で保存する必要があります。

SDカードへの配置 1

この時点で一度 bc10 の boot のために必要なファイル類を SD カードに コピーします。
(注意:bc10は、設計上マイクロSDからブートは出来ません)
bc10/booting SDカード作成を参照し SD カードに FAT32パーティションと Linux パーティションをそれぞれ作成します。
(以下 FAT32パーティションはLABEL1 Linuxパーティションは LABEL2 とします)

U-Bootから起動するOSとしてLinuxを使用することを前提として、最終的にはSDカード内の構成を以下のようにします。

FAT32 パーティション

1段目のブートローダであるX-Loaderは、SDカード上の配置方法に制限があります。必ず以下のように配置してください。

  1. FAT32パーティションのフォーマット後、最初に配置するようにします。
  2. パーティション内のトップディレクトリに配置します。
  3. ファイル名を「MLO」とします。
$ cd  ~/bc10/x-load-bc10
$ cp x-load.bin.ift /media/LABEL1/MLO

bc10 用の X- Loder ですので以降は更新しません。

$ cd ~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboard
$ cp u-boot-beagleboard.bin /media/LABEL1/u-boot.bin
$ cp uImage-beagleboard.bin /media/LABEL1/uImage

bc10/rowboat-eclair-dsp と同様に boot.scr を作成します。
このファイルはシリアルコンソールで u-boot のコマンドプロンプトから setenv で設定するのと同じ内容を作成し、
起動時に毎回手動で設定する手間を省略するためのものです。 また、メモリマッピングを変えないよう設定します。
まず以下の内容の boot.script を作成します。

$ cd ~
$ vi boot.script
if fatload mmc 0 84000000 uImage
then
 echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
fi
echo ***** RootFS: /dev/mmcblk0p2 *****
setenv bootargs 'mem=88M@0x80000000 mem=128M@0x88000000  androidboot.console=ttyS2 console=tty0 console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapfb.video_mode=680x480MR-24@60'
bootm 84000000

このファイルを引数に指定して、以下のように mkimage を実行します。

$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null

生成された boot.scr をSDカードのFATパーティションにコピーします。

$ sudo cp boot.scr /media/LABEL1/

Linux パーティション

以下の3つのファイルを Linux パーティションにコピーします。

$ cd ~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboard
$ sudo tar xvfj Angstrom-base-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2 -C /media/LABEL2/
$ sudo tar xvfj Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2 -C /media/LABEL2/
$ sudo tar xvfz modules-2.6.29-r46-beagleboard.tgz -C /media/LABEL2/

Linux の userland の配置が終わりです。
以上で1度目のSDカードイメージの作成は完了です。
これをbc10 に投入し電源ON後 boot され Angstrom が起動することを確かめます。

Angstrom イメージ作成 2

上記が確認できれば、bc10 用にカスタマイズしている u-boot と bc10-rowboat-kernelをビルドします。
kernel を入れ替えるときは u-boot も合わせて入れ替えます。

u-boot ビルド

bc10用 u-boot を取得しビルドします。

$ cd ~/
$ git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10
$ cd u-boot-bc10
$ git checkout -t -b build origin/build
$ make mrproper
$ make omap3_bc10_config
$ make 

ビルド完了後 u-boot.bin が生成されます。

bc10-rowboat-kernel ビルド

$ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
$ cd bc10-rowboat-kernel
$ git checkout -t -b bc10-2.6.32-build origin/bc10-2.6.32-build
$ make omap3_bc10_defconfig
$ make uImage
$ make modules

ビルド完了後以下のディレクトリにuImage が作成されます。

$ ls ~/bc10-rowboat-kernel/arch/arm/boot/
Image  Makefile  bootp  compressed  install.sh  uImage  zImage

modules ビルド

$ cd ~/bc10-rowboat-kernel/
$ mkdir mod_work
$ make ARCH=arm DEPMOD=echo INSTALL_MOD_PATH=mod_work modules_install

実行最後に DEPMOD (*注)が表示されます。

DEPMOD  2.6.32-bc10-gdfb6acc (*注)
$ arm-angstrom-linux-gnueabi-depmod-2.6 -A -b /home/beat/bc10-rowboat-kernel/mod_work -F ./System.map 2.6.32-bc10-gdfb6acc
$ tar cvfz modules-2.6.32-bc10-gdb6acc.gz -C mod_work lib
$ ln -s modules-2.6.32-bc10-gdb6acc.gz modules-2.6.32-bc10-gdb6acc.tgz

(*注):kernel config で 「Automatically append version informaiton to the version string」を enable に
していますので 2.6.32-bc10-gXXXXXX の末尾 XXXXXXの値は変更されることがあります。

$ git rev-parse --verify HEAD 
dfb6acc(略).........

またバージョンの値は以下のコマンドで確認できます。

$ make kernelrelease
2.6.32-bc10-gdfb6acc

SDカードへの配置 2

SDカードを再度ビルドマシンにマウントします。
(マウント位置はSDカードへの配置1 と同じとします)

FAT32 パーティション

以前の u-boot.bin を削除し、u-boot-bc10 の u-boot.binを配置します。

$ rm /media/LABEL1/u-boot.bin 
$ cd ~/u-boot-bc10/
$ cp u-boot.bin /media/LABEL1/u-boot.bin

同じく以前の Linux Kernel を削除し bc10-rowboat-kernel の uImage を配置します。

$ rm /media/LABEL1/uImage
$ cd ~/bc10-rowboat-kernel/arch/arm/boot/
$ cp uImage /media/LABEL1/uImage

Linux パーティション

moduleを新たにコピーします。

$ cd ~/bc10-rowboat-kernel/
$ sudo tar xvfz modules-2.6.32-bc10-gdb6acc.tgz -C /media/LABEL2/

以上で、完了です。

参考

更新記録

2010/05/07 初稿記載。主にOpenEmbedded 構築用の設定までの説明。
2010/09/22 OpenEmbedded 設定方法の詳細、Angstromのインストール方法を追記。X-Loader、U-Bootについても記載。
2010/10/08 bc10-rowboat-kernel moduleのビルド時に付与されるサフィックスについて記載。


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS