[Armadillo:05791] Re: CONFIG_SERIAL_8250=y と init 後の出力

mizo email@hidden
2010年 9月 9日 (木) 10:57:20 JST


溝渕です。

Yasuhisa Nakamura wrote:
> Armadillo-9にPC/104のシリアルボードをつなぐために
> カーネルconfigで
>  CONFIG_SERIAL_8250=y
> としました。
> 
> ポート数は、
> CONFIG_SERIAL_8250_NR_UARTS=4
> あるいは
> CONFIG_SERIAL_8250_NR_UARTS=8
> としています。(問題には影響なし)
> 
> 8250.cがインクルードするinclude/asm/serial.hは
> デフォルトのまま、空っぽです。
> 
> この8250ドライバを組み込んだカーネルを使ってブートすると、
> initのあとのデーモン等起動(/etc/rc.d/*)のメッセージが
> 一切でなくなってしまいます。

少しだけ調べてみました。

busyboxのinitの中で、consoleの設定をしています。該当するソースは、

usr/busybox/init/init.c: console_init()

です。この中で、/dev/ttyS0[1]が開けなければ、/dev/consoleをコンソールとする
処理を行なっています。この関数内で、printf()でコンソールの値を表示すると、
動きが良くわかります[2]。

8250は、ttyS*に割り当てられるので、8250を有効にした場合は、/dev/ttyS0が
コンソールになっています。

[1]: 実際には、ioctl(0, TIOCGSERIAL, &sr)で取得できるデバイスです。なぜttyS0
     が取得できるかまでは見ていません。

[2]: console_init()を抜けた直後で、ディスクリプタ0, 1, 2を差し変えているので、
     以降のprintf()は出力されないと思います。

> BusyBoxのinitのソースをざっと眺めてみてみましたが、
> コンソールが別にあると勘違いしているのかなぁ?、と
> いう気はするのですけど、どの部分がどのように影響して
> いるのかはさっぱり見当がつきません。
> あるいは、もっと別なところに原因があるのかもしれません。
> 
> モジュールとした場合はまったく問題はでません。
> (これが回避策なのですが・・・)

モジュールにした場合は、initの処理が開始した時点で、/dev/ttyS*に対応するデ
バイスが無いため、initの出力が表示されています。

> 組み込みの8250ドライバは早い段階で読み込まれるようで、
> 
> fb0: EP93xx frame buffer at 640x480x16
> Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
> ttyAM0 at MMIO 0x808c0000 (irq = 52) is a EP93XX
> ttyAM1 at MMIO 0x808d0000 (irq = 54) is a EP93XX
> ・・・
> こうなってました。

どう解決するのがスマートかまでは調べていませんが…。参考になればと思います。




armadillo メーリングリストの案内