2012年04月13日

PARTNER-JetでU-bootを追いかける(2)

昨日の続きで、U-bootのコマンドループのところを見てみます。



昨日の再掲です。

partner_uboot001

U-bootのシリアルコンソールにプロンプトが出たところでEscを押して止めたところ。(クリックで拡大表示)

partner_uboot002

ファンクションキーF3を押してソースコード表示に切り替えたところ。(クリックで拡大表示)

char NS16550_getc (NS16550_t com_port)
{
        while ((com_port->lsr & LSR_DR) == 0) {
#ifdef CONFIG_USB_TTY
                extern void usbtty_poll(void);
                usbtty_poll();
#endif
        }
        return (com_port->rbr);
}

while文の中でシリアルコントローラのレジスタの受信データ有りのビットが立つのを待っています。

割り込みを使わずにシリアルインターフェイスから受信するときによくある手順です。

その上にある NS16550_putc はシリアルインターフェイスにデータを送信する関数です。ここにブレークポイントを設定してみましょう。

行番号のところをクリックするだけです。

partner_uboot003

行番号が細字になっている行は、それに対応するコードが存在しないことを示しています。

コンパイラの最適化によって不要になってしまった部分や#ifdefの条件コンパイルで外れている部分です。

関数NS16550_getcのところでは、CONFIG_USB_TTYは定義されていないことがわかります。

partner_uboot004

これでGo させると、(緑の三角形をクリックするか、コマンドウインドウで g を入力。)

NS16550_putc のところでブレークします。

バックトレースは画面右下に表示されています。

バックトレース画面の行をダブルクリックすると、その部分がコードウィンドウに表示されます。

NS16550_putc+C(com_port=*E1030000,c=D)
_serial_puts+18(s=*4109A3BE "\r\n\0",port=2)
fputs+24(file=E1030000,s=*0000000D "\xE5\x14\xE5\x14..")
readline_into_buffer+A8(prompt=*41099AEA "KZM-A9-D..",buffer=*410A0380 "\0")
main_loop+F0()
start_armboot+1C4()

ソースコードを見るときには、まずこのスタックトレースに出てきた関数から見ていくとよいです。

(続く。)



トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード