2010/09/22
Ubuntu 10.04 を使って、the Angstrom Distribution の Building Angstrom の手順に従ってビルド環境用の設定をします。
Ubuntu デフォルトの sh は dash なので以下のコマンドを実行し bash に変更します。
sh が dash になっていると bitbake 実行時 bash を指定しているものがあり、予期せぬところでエラーが発生するためです。
$ sudo dpkg-reconfigure dash
「dash を /bin/sh インストールしますか?」と聞かれるので「No」を選択します。
これで sh は bash に変更されます。
OEandYourDistro の Debian の項 の通りに 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 は 組込向け 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
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 の完了です。
NOTE: Running task 2823 of 2910 (ID: 128, /home/beat/angstrom-setup-scripts /sources/openembedded/recipes/mtd/mtd-utils-native_1.0.0+git.bb, do_setscene) fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed ERROR: TaskFailed event exception, aborting ERROR: Build of /home/beat/angstrom-setup-scripts/sources/openembedded/recipes /u-boot/u-boot_git.bb do_fetch failed ERROR: Task 147 (/home/beat/angstrom-setup-scripts/sources/openembedded/recipes /u-boot/u-boot_git.bb, do_fetch) failed with 256 NOTE: Task failed: Unknown fetch Error: [Errno 2] No such file or directory: '/home/beat/angstrom-setup-scripts/sources/downloads/git_gitorious.org.u- boot-omap3.mainline.git_d363f9cb0918a1b6b92e2e20d01543d0c4f53274.tar.gz' NOTE: package u-boot2009.05+r30+gitrd363f9cb0918a1b6b92e2e20d01543d0c4f53274-r30: task do_fetch: Failed ERROR: TaskFailed event exception, aborting NOTE: package mtd-utils-native-1.0.0+git-r8: task do_compile: Succeeded ERROR: Build of /home/beat/angstrom-setup-scripts/sources/openembedded/recipes /u-boot/u-boot_git.bb do_fetch failed ERROR: Task 147 (/home/beat/angstrom-setup-scripts/sources/openembedded/recipes /u-boot/u-boot_git.bb, do_fetch) failed with 256bitbake 実行中にファイルの取得に失敗した場合このままエラーとして終了しますが、再度 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-
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という名前で保存する必要があります。
この時点で一度 bc10 の boot のために必要なファイル類を SD カードに
コピーします。
(注意:bc10は、設計上マイクロSDからブートは出来ません)
bc10/booting SDカード作成を参照し SD カードに FAT32パーティションと
Linux パーティションをそれぞれ作成します。
(以下 FAT32パーティションはLABEL1 Linuxパーティションは LABEL2 とします)
U-Bootから起動するOSとしてLinuxを使用することを前提として、最終的にはSDカード内の構成を以下のようにします。
1段目のブートローダであるX-Loaderは、SDカード上の配置方法に制限があります。必ず以下のように配置してください。
$ 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/
以下の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 が起動することを確かめます。
上記が確認できれば、bc10 用にカスタマイズしている u-boot と bc10-rowboat-kernelをビルドします。
kernel を入れ替えるときは 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 が生成されます。
$ 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
$ 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カードを再度ビルドマシンにマウントします。
(マウント位置はSDカードへの配置1 と同じとします)
以前の 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
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のビルド時に付与されるサフィックスについて記載。