[Armadillo:00785] Armadillo-9: bssを多く消費するkernelではboot不可?
SATO Yusuke
email@hidden
2006年 1月 12日 (木) 22:34:12 JST
こんにちわ
佐藤(ゆ)と申します
初めて投稿します。
最近Armadillo-9のケースモデルを入手いたしまして、いろいろといじってい
るのですが、一点不可解な現象に遭遇してしまいました。アドバイスをいただ
けないでしょうか?
いま、カーネル2.6向けユーザランドである romfs-20051017-2.6.12.3-a9-1.img.gz
を書き込んだ Armadillo-9に対して、linux-2.6.12.3-a9-1.tar.gz をベース
に、自分の好みのパッチを当てたkernelを作成し、それでブートさせようと考
えています。 自分好みのパッチというのは、具体的には LIDS というもので
す(http://www.lids.org/)。
しかし、linux-2.6.12.3-a9-1.tar.gz にLIDS patchを当てると、常にbootで
きないkernelが作られてしまうことに気づきました。
具体的には、LIDSを有効にしたkernelでbootしようとすると、
Hermit-At v1.0.0 (armadillo9) compiled at 18:43:28, Sep 26 2005
hermit> b
Uncompressing kernel...........................................................
............................done.
Uncompressing ramdisk...........................................................
................................................................................
....................................................................done.
Doing console=ttyAM0,115200
Doing mtdparts=armadillo9-nor:0x10000(bootloader)ro,0x170000(kernel),0x670000(us
erland),-(config)
ここでピタッと止まってしまいます。kernelの一番最初のprintkまで辿り着い
ていないような感じです。なお、純正のlinux-2.6.12.3-a9-1.bin.gz を書き
込んだ場合は、もちろん正常に起動します。
いろいろ調べてみたところ、どうも、.bssを使いすぎるとbootできないkernel
になるようなのです。たとえば、LIDS patchを当てていない、素のカーネルソー
スをベースに、(どのファイルでもいいんですがたとえば) kernel/printk.c の
冒頭に、
volatile char this_is_dummy[1086500];
と追記すると、起動できないkernelになります。1086500ではなく、
volatile char this_is_dummy[1086400];
か、あるいはもっと小さな配列にすると起動できますので、このあたりが閾値
のようです。
起動する場合のSystem.mapは、
-------------------------------------------------
c0014000 A swapper_pg_dir
c0018000 T __init_begin
...
c027e000 D __data_start
...
c02cf0d0 D _edata
c02cf0e0 B __bss_start
...
c02db51c B this_is_dummy
c03e48dc b logbuf_lock
...
c03ff000 B _end
-------------------------------------------------
となっています。起動しない場合は、
-------------------------------------------------
c0014000 A swapper_pg_dir
c0018000 T __init_begin
...
c027e000 D __data_start
...
c02cf0d0 D _edata
c02cf0e0 B __bss_start
...
c02db51c B this_is_dummy
c03e4940 b logbuf_lock
...
c03ff060 B _end
-------------------------------------------------
です。_end と __bss_start のアドレスの差は、
起動する場合: 0x0012ff20
起動しない場合: 0x0012ff80
ですね。
クロス開発環境としては
binutils-arm-linux-2.15-6.i386.rpm
cpp-3.4-arm-linux-3.4.3-13.i386.rpm
g++-3.4-arm-linux-3.4.3-13.i386.rpm
gcc-3.4-arm-linux-3.4.3-13.i386.rpm
libc6-arm-cross-2.3.2.ds1-22.noarch.rpm
libgcc1-arm-cross-3.4.3-13.noarch.rpm
linux-kernel-headers-arm-cross-2.5.999_test7_bk-17.noarch.rpm
などを (CentOS4/x86上で) 使用しています。
LIDS側にbssの消費を抑えるような変更を加えることも可能ではありますが、
もし
・この現象が起きる原因
・この現象をArmadillo-9側でどうにか回避する方法
などがわかる方がいらっしゃいましたら、ぜひ教えてください。
よろしくお願いいたします。
--
SATO Yusuke / 佐藤 祐介 <email@hidden>
armadillo メーリングリストの案内