SSブログ

beagleboard を触ろう - Linux ビルド [組み込みソフト]

続いて Linux のビルドです。

ソースコードの入手方法とビルド方法は http://elinux.org/BeagleBoard#Linux_kernel に書いてあります。

それでは書いてある通りにやってみましょう。
ソースコードの取得は、時間帯やネットワーク環境にも依るかもしれませんが、結構時間がかかります。
うちの ADSL 環境では10分から15分くらい。

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6↓

コンパイルは↓のように書いてあるのですが、CROSS_COMPILE の指定が抜けていますね。

$ cd linux-omap-2.6↓
$ make distclean↓
$ make ARCH=arm omap2plus_defconfig↓
$ make ARCH=arm uImage↓

以下のようにやりましょう。

$ cd linux-omap-2.6↓
$ make distclean↓
$ make ARCH=arm omap2plus_defconfig↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm uImage↓

arch/arm/boot ディレクトリに uImage が出来上がります。
この uImage を SD カードにコピーして、ブートしてみましょう。

・・・ところが、あらまー。
以下のメッセージを出すだけで、それ以上ピクリとも動きません!


Starting kernel ...

Uncompressing Linux... done, booting the kernel.


いろいろ調べてみると・・・

http://ameblo.jp/fadis/entry-10257409831.html

という非常に参考になるページが見つかりました。
このページによると、OpenEmbedded プロジェクトが linux-omap パッチを用意してくれているみたいです。
なので、OpenEmbedded の linux-omap パッチを取得します。

$ git clone git://git.openembedded.net/openembedded↓

openembedded ディレクトリができて、このディレクトリ下にパッチがダウンロードされます。

・・・

のはずなんですが、ダメですね。

$ git clone git://git.openembedded.net/openembedded
Cloning into openembedded...
git.openembedded.net[0: 140.211.169.165]: errno=Connection refused
fatal: unable to connect a socket (Connection refused)

というエラーが出て、サーバーに繋げません・・・。
1か月くらい前は OK だったのですが・・・。
うーん、とりあえず OpenEmbedded のホームページに行ってみましょう。

http://www.openembedded.org/index.php/Main_Page

左の方に、"git server" というリンクがあるので、ここをクリックすると、

http://cgit.openembedded.org/

に行きます。
ここのページで、一番左の列にある "openembedded" をクリックすると、

http://cgit.openembedded.org/cgit.cgi/openembedded/

に行きます。
ここから適当に取ってきましょう。
release2011.03 という shapshot が良さそうです。

http://cgit.openembedded.org/cgit.cgi/openembedded/snapshot/openembedded-release-2011.03.tar.bz2

を取ってきましょう。
これを解凍すると、openembedded-release-2011.03 というディレクトリができます。
この中に、パッチが入っています。

openembedded-release-2011.03/recipes/linux/ には、
   :
linux-omap-2.6-2.6.9-omap1
linux-omap-2.6.26
linux-omap-2.6.27
linux-omap-2.6.28
linux-omap-2.6.29
linux-omap-2.6.31
linux-omap-2.6.32
linux-omap-2.6.37
linux-omap-2.6.38
linux-omap-2.6.39
linux-omap-2.6_2.6.9-omap1.bb
   :

等のディレクトリがあります。
これらのディレクトリが、各カーネルバージョンに対応したパッチの模様です。
このどれかを使いましょう。

一方、kernel.org から取得済みの linux-omap-2.6 にどのようなブランチがあるか調べてみると、

$ cd linux-omap-2.6↓
$ git branch -r↓
   :
origin/omap-2.6.28
origin/omap-2.6.29
origin/omap-2.6.30
origin/omap-2.6.31
origin/omap-2.6.32
   :

とかがあります。
git の branch -r は、リモートのリポジトリにあるブランチをリストアップするコマンドです。

kernel.org の linux-omap ソースと、openembedded のパッチとを見比べて、その中で一番最新なバージョンにしましょう。
ということで、2.6.32 を選びます。

それでは omap-2.6.32 をベースにパッチを当てていきましょう。
まず、omap-2.6.32 ブランチに切り替えます。

$ git checkout origin/omap-2.6.32↓

この状態で作業を開始することもできますが、パッチを当ててソースコードを変更することになるので、自分用のブランチを作りましょう。

$ git checkout -b omap-2.6.32-beagle-patched↓

次に、openembedded の omap-2.6.32 パッチを当てていきます。
先ほど取得した openembedded-release-2011.03 ディレクトリのうち、omap-2.6.32 パッチのディレクトリ openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32 には、以下のファイルがあります。


0001-ARM-OMAP-Overo-Add-support-for-second-ethernet-po.patch
0002-ARM-OMAP-ehci-omap-use-new-location-for-usb.h-inc.patch
0003-drivers-net-smsc911x-return-ENODEV-if-device-is-n.patch
0004-drivers-input-touchscreen-ads7846-return-ENODEV.patch
0005-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board.patch
0006-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch
0007-ASoC-enable-audio-capture-by-default-for-twl4030.patch
0008-scripts-Makefile.fwinst-fix-typo-missing-space-in.patch
0009-MTD-NAND-omap2-proper-fix-for-subpage-read-ECC-error.patch
holes.patch
sctp-fix.patch

beagleboard/defconfig

cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch
cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch
cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch
cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch
cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch
cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch
cm-t35/0006-omap3-cm-t35-update-defconfig.patch

dss2/0012-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-pane.patch
dss2/0014-OMAP-DSS-Add-DSS2-support-for-Overo.patch
dss2/0015-OMAP-DSS-Add-DSS2-support-for-Beagle.patch
dss2/0016-video-add-timings-for-hd720.patch
dss2/beagle-dss2-support.diff

madc/0009-drivers-mfd-add-twl4030-madc-driver.patch
madc/0010-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
madc/0011-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
madc/0013-ARM-OMAP-Add-missing-twl4030-madc-header-file.patch

usb/ehci-omap.c-mach-to-plat.diff
usb/ehci.patch


openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32 ディレクトリ直下にある 11 個のパッチは当てるとして、他はどうしましょう。

cm-t35 というのは、CompuLab という会社が出している評価ボードのようです。
beagleboard とは無関係なので、cm-t35 ディレクトリのパッチは無視します。

madc ディレクトリ下のパッチ名に含まれている TWL4030 は、Texas Instruments 製の電源モジュールです。
beagleboard rev.C4 に搭載されている電源モジュールは TPS65950 というモジュールです。
TWL4030 は、rev.C2 以前の beagleboard に搭載されていたようですね。
Linux は TWL4030 を制御するつもりで TPS65950 にアクセスしにいきますが(※)、TWL4030 と TPS65950 はソフトウェア的には同じに見えるようなので、問題なしです。
madc ディレクトリのパッチは当てます。
※ Linux のブートメッセージで "twl4030" が出ていたので、そうかなと (^^;

DSS は、Display Sub System の略で、OMAP3530 搭載デバイスなので、dss2 ディレクトリのパッチも当てます。

また、OMAP3530 搭載の USB ホストコントローラは、EHCI コントローラなので、usb/ehci.patch も当てます。


$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0001-ARM-OMAP-Overo-Add-support-for-second-ethernet-po.patch↓
patching file arch/arm/mach-omap2/board-overo.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0002-ARM-OMAP-ehci-omap-use-new-location-for-usb.h-inc.patch↓
patching file drivers/usb/host/ehci-omap.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0003-drivers-net-smsc911x-return-ENODEV-if-device-is-n.patch↓
patching file drivers/net/smsc911x.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0004-drivers-input-touchscreen-ads7846-return-ENODEV.patch↓
patching file drivers/input/touchscreen/ads7846.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0005-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board.patch↓
patching file arch/arm/mach-omap2/board-omap3beagle.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0006-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch↓
patching file arch/arm/mach-omap2/board-omap3beagle.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0007-ASoC-enable-audio-capture-by-default-for-twl4030.patch↓
patching file sound/soc/codecs/twl4030.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0008-scripts-Makefile.fwinst-fix-typo-missing-space-in.patch↓
patching file scripts/Makefile.fwinst

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/0009-MTD-NAND-omap2-proper-fix-for-subpage-read-ECC-error.patch↓
patching file drivers/mtd/nand/omap2.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/holes.patch↓
patching file arch/arm/Kconfig
Hunk #1 succeeded at 687 (offset -12 lines).

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/sctp-fix.patch↓
patching file net/sctp/sysctl.c
Hunk #1 FAILED at 248. ← 該当箇所見当たらず
1 out of 1 hunk FAILED -- saving rejects to file net/sctp/sysctl.c.rej

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/dss2/0012-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-pane.patch↓
patching file drivers/video/omap2/displays/Kconfig
patching file drivers/video/omap2/displays/Makefile
patching file drivers/video/omap2/displays/panel-lgphilips-lb035q02.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/dss2/0014-OMAP-DSS-Add-DSS2-support-for-Overo.patch↓
patching file arch/arm/mach-omap2/board-overo.c
Hunk #8 FAILED at 536. ← このパッチ修正は既に行われている
Hunk #9 succeeded at 545 (offset -5 lines).
Hunk #10 succeeded at 567 (offset -5 lines).
Hunk #11 succeeded at 609 (offset -5 lines).
Hunk #12 succeeded at 632 (offset -5 lines).
1 out of 12 hunks FAILED -- saving rejects to file arch/arm/mach-omap2/board-overo.c.rej

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/dss2/0015-OMAP-DSS-Add-DSS2-support-for-Beagle.patch↓
patching file arch/arm/mach-omap2/board-omap3beagle.c
Hunk #5 succeeded at 495 (offset -5 lines).
Hunk #6 succeeded at 507 (offset -5 lines).
Hunk #7 succeeded at 583 (offset -5 lines).

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/dss2/0016-video-add-timings-for-hd720.patch↓
patching file drivers/video/modedb.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/madc/0009-drivers-mfd-add-twl4030-madc-driver.patch↓
patching file drivers/mfd/Kconfig
patching file drivers/mfd/Makefile
patching file drivers/mfd/twl4030-madc.c

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/madc/0010-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch↓
patching file arch/arm/mach-omap2/board-overo.c
Hunk #1 succeeded at 538 (offset 148 lines).

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/madc/0011-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch↓
patching file arch/arm/mach-omap2/board-omap3beagle.c
Hunk #1 succeeded at 395 (offset 81 lines).
Hunk #2 succeeded at 407 (offset 81 lines).

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/madc/0013-ARM-OMAP-Add-missing-twl4030-madc-header-file.patch
patching file include/linux/i2c/twl4030-madc.h

$ patch -p1 <../openembedded-release-2011.03/recipes/linux/linux-omap-2.6.32/usb/ehci.patch↓
patching file arch/arm/mach-omap2/Kconfig
Reversed (or previously applied) patch detected! Assume -R? [n] ←このパッチ修正は既に行われている

sctp-fix.patch の失敗が気になりますが、該当箇所が見つからないので、仕方ないっす。
修正ファイル一覧を見ると、こんな感じ。

$ git checkout↓
M arch/arm/Kconfig
M arch/arm/mach-omap2/board-omap3beagle.c
M arch/arm/mach-omap2/board-overo.c
M drivers/input/touchscreen/ads7846.c
M drivers/mfd/Kconfig
M drivers/mfd/Makefile
M drivers/mtd/nand/omap2.c
M drivers/net/smsc911x.c
M drivers/usb/host/ehci-omap.c
M drivers/video/modedb.c
M drivers/video/omap2/displays/Kconfig
M drivers/video/omap2/displays/Makefile
M scripts/Makefile.fwinst
M sound/soc/codecs/twl4030.c


これでソースが揃いました。
カーネルコンフィギュレーションファイルは、パッチディレクトリの中にある beagle/defconfig を使いましょう。
arch/arm/configs/omap3_beagleoe_defconfig という名前で beagle/defconfig をコピーします。

ではビルドしてブートしてみましょう。

   :

あれあれ・・・。
さっきと全く同じ現象ですねー。


Starting kernel ...

Uncompressing Linux... done, booting the kernel.


ここで止まっちゃいます。

むー、どうしよう。
よく分かんないけど、カーネルコンフィギュレーションを変えてみようかしら。
Angstrom のカーネルコンフィギュレーションでも試してみますか。
Angstrom の demo image

http://www.angstrom-distribution.org/beagleboard-demo-image-available

でブートさせて # zcat /proc/config.gz↓ でコンフィギュレーションを見ることができます。
これをそのままコピーして、arch/arm/configs/omap3_beagleangstrom_defconfig という名前のコンフィギュレーションファイルを作ります。
あ、コンフィギュレーションファイルの改行コードは、CRLF でなくて LF でないとダメかも。

それでは再びビルドです。


$ make distclean↓
$ make ARCH=arm omap3_beagleangstrom_defconfig↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm uImage↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules_install INSTALL_MOD_PATH=./modules↓


ビルドが終わると、カーネルイメージ arch/arm/boot/uImage が出来上がり、./modules ディレクトリにはローダブルモジュールファイルが出来上がります。

出来上がったローダブルモジュールを見てみると・・・

うむー。
GPU とか DSP とかのローダブルモジュールが出来てないなあ。
GPU, DSP のローダブルモジュールは、angstrom のデモ rootfs の中には /lib/modules/2.6.32/ 以下に存在しているんです。
ひょっとしたらビルドできていないかなあと思っていましたが、ダメでした。
でも、まあいいや。
ビルドしたカーネルはバージョン 2.6.32 で、angstrom デモのカーネルバージョンと同じなので、ローダブルモジュールはそのまま使えるはず。

ビルドしたファイルでブートしてみましょう。
uImage を SD カードの FAT32 領域にコピーします。
ローダブルモジュールはせっかくビルドしましたが、angstrom デモの rootfs にあるローダブルモジュールをそのまま使うので、何もせずです。

それではブートです。


:
FATAL: Error inserting cmemk (/lib/modules/2.6.32/kernel/drivers/dsp/cmemk.ko): Invalid module format
:


ありゃ。
バージョンミスマッチですかあ。
カーネルバージョン同じなだけじゃダメなんだっけ?

まあ、でも一応ブートして X も起動して液晶ディスプレイにちゃんと表示されているので・・
画面、変な余白があって、文字も微妙に変な横線が入っているけど・・

angstromX.png

angstromXfont.png

rootfs をちゃんと作らないといけないんでしょうが、とりあえずよしとしましょう・・・。

nice!(1)  コメント(1)  トラックバック(0) 

nice! 1

コメント 1

Lesprealm

Cialis Dangers http://buyciallisonline.com/#798 - Cialis Amoxicillin Glab <a href=http://buyciallisonline.com/#687>п»їcialis</a> Propecia 5 Mg For Sale No
by Lesprealm (2020-02-01 08:15) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。