[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 メーリングリストの案内