熱燗がおいしい季節になりました。最近、なにかと忙しくてあまりTX-50弄る時間が取れなかったんですが、久しぶりに投稿します。シリアルドライバはちょっと行き詰まりぎみなので、保留ぎみで。年末休みとかで、がっつり時間とれるときに腰を据えてやろうかな。
そうそう、久々にIntelのサイトを覗いたらBLDKがアップデートされてました。CrownBay向けのパッケージは現在CB-EDKII-PostGold-2.3.6.7というのが最新です。しかもなんと、Linux向けのパッケージがリリースされてるじゃないですか。素敵です。Linuxだとgccでビルドできるっぽいです。しかし、デバッガとかどうなるんですかねえ、WinDbgベースのIntel UDK Debuggerは使えないでしょうし。今度、試してみます。
http://www.intel.com/p/ja_JP/embedded/hwsw/software/bldk?iid=subhdr-JP+hwsw_bldk#download
というわけで、ソースもいい感じでぐちゃぐちゃになって来たところなので、最新版で仕切りなおしました。動作上目立つところといえば、EfiShellが2.0になってますね。
ああ、あと、今までやったことを適用しても画面映らなかったっす。色々、思考錯誤した結果、CrownBayPlatformPkg.dscの中のgCrownBayPlatformTokenSpaceGuid.PcdGopBltEnable | 0x239A | FALSE というパラメータが原因のようです。これをTRUEにすることでVGAから画面出力でました。
それから、ちょっと開発手法を変えました。以前にVisualStudioでバッチファイルを使ってビルドする方法を紹介しましたが(TX-50開発キットで遊ぶ その3
)、あれ、どうやら問題がありまして、Intel BLDK Development Applicationで変更したパラメータはバッチファイルでビルドしたときに反映されないことが判りました。
どうやらIntel BLDK Development Applicationでパラメータ変更してアプリからビルドすることで、ソースを変更せずに、ビルド時にパラメータを適用しているようです。このパラメータってのは、すなわちCrownBayPlatformPkg.dscに記述されているPCDという仕組みで定義されているパラメータたちです。先述のgCrownBayPlatformTokenSpaceGuid.PcdGopBltEnable もそのひとつです。
ということは逆に、Intel BLDK Development Applicationを使わずに、CrownBayPlatformPkg.dscを直接編集すればバッチファイルからビルドしても設定値が反映されるというわけです。そもそもIntel BLDK Development Applicationは設定項目限られてるし、使いづらいし、TX-50の構成に完全に合致しているわけでもないので、使わないことにしました。
そして、ビルドシステムの仕組みが概ね、解ってきて、CrownBayPlatformPkgというのはそもそも、CrownBay特有のドライバ等のソースの集合体でして、汎用ドライバとかの、それ以外のモジュールはその他のパッケージからもってきて、ファームウェアを構成しています。それをコントロールしているのがCrownBayPlatformPkg.dscというわけです。で、BLDKはEDKII(http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK2)がベースとなっているんですが、EDKIIのソースを見ると、たとえば、ArmPkgや、Omap35xxPkg等、プラットフォームを構成するパッケージが見受けられます。で、ビルドしたいパッケージの.dscファイルを指定することで、ベースパッケージとか汎用ドライバを共有しつつ、そのプラットフォームのファームウェアや、モジュール単体をビルドできるようになってます。
つまり、今回Tx-50というプラットフォームへの移植を行うにあったって、Tx50Pkgというパッケージを作って、そんで、Tx50Pkg.dscを作るという手があるわけです。そうすることで、CrownBayPlatformPkg内のソースを一切変更することなく、必要なモジュールだけTx50Pkg.dscに記述してもってくればスマートです。そしてTx-50特有の部分だけパッケージ内にコピーして編集するなり、新規作成するなりして、Tx50Pkg.dscでそのモジュールを指定すればコントロールもしやすいし、完全に他のパッケージと分離された形で開発できて、いい感じなのです。ただし、この方法を使うとIntel BLDK Development ApplicationはCrownBayPlatformPkg内でしかビルドできないっぽいので、使おうと思っても完全に使えなくなります。まあ、未練はあんまりないんだけどね。あと、Tx50PkgのみをBldkに追加するだけでよくなるので、再配布もし易くなりますね。(需要があるかは解りませんが・・)
ちゅうことで、現在は、ソースのトップレベルにTx50Pkgディレクトリを作ってCrownBayPlatformPkgから.dec、.dsc、.fdfファイルをコピーしてTx50向けに直接編集しちゃいました。そんでカスタムiegd.efiを格納したGopBinaryモジュールと現在コーディング中のPciSerialDxeを追加して、ビルド用のバッチファイルをTx50Pkgをビルドするように編集しちゃって、VisualStudioでプロジェクト作って、VisualStuidoからビルドするという開発スタイルにしました。うーん。なかなか快適です。
C:\BLDKTX50\TX50PKG
│ features.txt
│ Tx50Pkg.dec
│ Tx50Pkg.dsc
│ Tx50Pkg.fdf
│
├─GopBinary
│ iegd.efi
│
└─PciSerialDxe
ComponentName.c
PciSerialDxe.inf
Serial.c
Serial.h
ああ、今日は文章ばっかりになっちゃいました。よし、とりあえず、シリアルドライバはほったらかして、来週は、ぼちぼちOS起動に挑戦しようかなー。
Hi,
返信削除is it possible to provide the source code of your PciSerialDxe. I have a CrownBay Devkit where I want to use the serial lines of the PCH. Thanks for your blog.
cu,
Daniel
Hi,
返信削除I'm sorry. I am not so good at English.
Thank you for reading my blog.
I try development hard from now on.
Probably, after stability, Tx50Pkg intends to provide it.
Ishihara
Hi Ishihara,
返信削除my Japanese is even worse. I do not speak Japanese at all. I used the Google translator to read your block. But unfortunately, the translation is not very good.
Do I understand it correctly, that your PciSerialDxe isn't running very stable currently?
cu,
Daniel
Hi Daniel,
返信削除Thanks for reply
Currently, PciSerialDxe is not stable.
"Drivers" and "Devices" Command are recognized in the EfiSehll.
However, serial console redirection not working with TerminalDxe.
I will try to analyze the problem, but with a personal project of the holiday time, development speed is very slow.
Ishihara