rpi_start.Sを読む (第13回)
2013/11/10(日) 15:36 NetBSD はてブ情報 はてブに登録 はてブ数

いよいよMMUもONになり、大詰めに近づいてまいりました。

今回読むのは次の部分です。
    239 	/*
    240 	 * Ensure that the coprocessor has finished turning on the MMU.
    241 	 */
    242 	mrc	p15, 0, r0, c0, c0, 0	/* Read an arbitrary value. */
    243 	mov	r0, r0			/* Stall until read completes. */
    244 
    245 	/*
    246 	 * Jump to start in locore.S, which in turn will call initarm and main.
    247 	 */
    248 	mov	pc, lr
    249 	nop
    250 	nop
    251 	nop
    252 	nop
さっそく進めましょう。
    239 	/*
    240 	 * Ensure that the coprocessor has finished turning on the MMU.
    241 	 */
    242 	mrc	p15, 0, r0, c0, c0, 0	/* Read an arbitrary value. */
    243 	mov	r0, r0			/* Stall until read completes. */
MMUがONになったことをmrcで値を読み込んで確認します。マニュアルによると、このmrc操作はRead Main ID Registerと書いてあります。プロセッサの情報をとる命令のようです。

243行目のmov r0, r0でリードが完了するのを待つ、とコメントにあります。こういうのは慣用句なんでしょうかね。

進みましょう。
    245 	/*
    246 	 * Jump to start in locore.S, which in turn will call initarm and main.
    247 	 */
    248 	mov	pc, lr
いよいよ、このスタートアップルーチンとはお別れです。つまり、リンクレジスタに格納していた、飛び先つまりLstartにあったルーチンのアドレスをプログラムカウンタ(pc)に格納し、そちらに制御を移します。

ついに、rpi_start.Sを読み切りました!

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0815/tb/