So-net無料ブログ作成

U-BootのMLO部分の処理シーケンスを調べる(BBB)

U-Bootのソースを読んでいるが、#ifdefの嵐で読みづらい・・・。
しかも、信じられないくらいのCPU数、ボード数に対応してるから、今知りたいBBBに関係ないソースがほとんど。
ソースだけの検索結果はごみが多すなので、*.o ファイルからnmでシンボル情報を抜き出して、
関数の呼び出し関係を調べている。(これも面倒・・・)

今知りたいのは起動シーケンスで、大きな処理の順番としては、

   MLO -> u-boot.img

となっている。が、知りたいのはMLOの部分だけ。

MLOはビルド後に生成される spl/ フォルダーの下に、必要な情報がある。
この中の、u-boot-spl.lds (リンカースクリプト)を読むと、
エントリーポイントが_startで、それが入っている *.o が arch/arm/cpu/armv7/start.o と分かる。

さて、MLO の処理はざっくりいうと、

 (1)_start 
     -> (2) lowlevel_init
     -> (3) _main

になっている。
lowlevel_init は、UART、タイマー、クロックその他の初期化をしているようだ。
ここの処理が終わると、シリアルが初期化されて文字が出るようになる。

_main以降は、u-boot.img に橋渡しするための、いろんな部分の初期化をやっているようだが、
今の興味の対象はシリアルの初期化までなので、lowlevel_initの中まで。

流れを簡単にすると以下のとおり。
---------------------------------------------------------------------------------------------
_start:						arch/arm/cpu/armv7/start.S
-> lowlevel_init:				arch/arm/cpu/armv7/lowlevel_init.S
   -> s_init: 					arch/arm/cpu/armv7/am33xx/board.c
      -> save_omap_boot_params()		arch/arm/cpu/armv7/omap-common/boot-common.c
      -> watchdog_disable()			arch/arm/cpu/armv7/am33xx/board.c
      -> timer_init()				arch/arm/cpu/armv7/omap-common/timer.c
      -> set_uart_mux_conf():			board/ti/am335x/board.c
      -> setup_clocks_for_console()		arch/arm/cpu/armv7/am33xx/clock_am33xx.c
      -> uart_soft_reset()			arch/arm/cpu/armv7/am33xx/board.c
      -> preloader_console_init():		common/spl/spl.c
         -> serial_init(): 			drivers/serial/serial.c
            -> get_current() 			drivers/serial/serial.c
               -> default_serial_console():	drivers/serial/serial_ns16550.c
      -> prcm_init()				arch/arm/cpu/armv7/am33xx/clock.c
      -> set_mux_conf_regs()			board/ti/am335x/board.c
      -> rtc32k_enable()			arch/arm/cpu/armv7/am33xx/board.c
      -> sdram_init()				board/ti/am335x/board.c
---------------------------------------------------------------------------------------------



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。