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 も起動して液晶ディスプレイにちゃんと表示されているので・・
画面、変な余白があって、文字も微妙に変な横線が入っているけど・・
rootfs をちゃんと作らないといけないんでしょうが、とりあえずよしとしましょう・・・。
ソースコードの入手方法とビルド方法は 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 も起動して液晶ディスプレイにちゃんと表示されているので・・
画面、変な余白があって、文字も微妙に変な横線が入っているけど・・
rootfs をちゃんと作らないといけないんでしょうが、とりあえずよしとしましょう・・・。
2011-08-08 22:28
nice!(1)
コメント(1)
トラックバック(0)
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)