0

ARMv8 Foundation Model v2.1 で小さな ARMv7 カーネル (qemu vexpress モデルを使用して正常に動作) を起動しようとしています。モデルはレベル EL3 / 64 ビットで起動し、レベル EL1 / 32 ビットまで下げることができましたが、いくつかの問題が発生しました (つまり、タイマーが作動せず、いくつかの kprintf が欠落していますが、それは問題ではありません)。問題はこちら)。

UART の問題をデバッグするために、モデルが提供する led / スイッチを使用したいと考えました。ソフトウェアからそれらの値を簡単に読み取ることはできますが、どちらにも新しい値を書き込むことはできません。カーネルがハングしているようです。スイッチ レジスタに書き込む最小限の asm コードを次に示します。

.global Start
Start: 
    # we are in EL3 / 64 bits mode
    # create the 0x1C010000 + 0x4 address of switches
    mov  x0, #4
    movk x0, #0x1c01, lsl #16
    # value to write
    mov  w1, #0xaa
    # actual writing
    strb w1, [x0]

strb私は指示に行き詰まっているようです。記録のために、 に置き換えるstrbと、このレジスタの値を正しく読み取って表示できます (機能することを確認するためにldrb、フラグで遊んでみました)。--switches

ここで私が間違っていることを知っている人はいますか?

編集: unixsmurf の提案のおかげで、レベル変更なしで同期データ アボート例外が発生したこと、およびその理由が「同期外部アボート」であることを知りました。詳しく調べる方法がわからないので、ARM のフォーラムを試してみようと思います。

一番、

V.

4

1 に答える 1