我正在學習使用 QEMU 作為模擬器的 ARM 裸機開發。我以這個 github repo為例。
向量是為 EL1 定義的:
vectors:
ventry sync_invalid_el1t // Synchronous EL1t
ventry irq_invalid_el1t // IRQ EL1t
ventry fiq_invalid_el1t // FIQ EL1t
ventry error_invalid_el1t // Error EL1t
ventry sync_invalid_el1h // Synchronous EL1h
ventry el1_irq // IRQ EL1h
ventry fiq_invalid_el1h // FIQ EL1h
ventry error_invalid_el1h // Error EL1h
ventry sync_invalid_el0_64 // Synchronous 64-bit EL0
ventry irq_invalid_el0_64 // IRQ 64-bit EL0
ventry fiq_invalid_el0_64 // FIQ 64-bit EL0
ventry error_invalid_el0_64 // Error 64-bit EL0
ventry sync_invalid_el0_32 // Synchronous 32-bit EL0
ventry irq_invalid_el0_32 // IRQ 32-bit EL0
ventry fiq_invalid_el0_32 // FIQ 32-bit EL0
ventry error_invalid_el0_32 // Error 32-bit EL0
.globl irq_vector_init
irq_vector_init:
adr x0, vectors // load VBAR_EL1 with virtual
msr vbar_el1, x0 // vector table address
ret
并設定好:
void enable_interrupt_controller()
{
put32(ENABLE_IRQS_1, SYSTEM_TIMER_IRQ_1);
}
處理程式定義如下:
el1_irq:
kernel_entry
bl handle_irq
kernel_exit
以下是計時器處理程式:
void handle_irq(void)
{
unsigned int irq = get32(IRQ_PENDING_1);
switch (irq) {
case (SYSTEM_TIMER_IRQ_1):
handle_timer_irq();
break;
default:
printf("Unknown pending irq: %x\r\n", irq);
}
}
我正在使用以下命令啟動二進制檔案,但我沒有得到計時器處理程式列印,盡管其他列印正在作業并且二進制對我來說作業正常:
$ qemu-system-aarch64 -M raspi3 -device loader,file=./kernel8.img,addr=0x0 -serial null -serial stdio -display none
編輯
環境細節:
naveen@workstation:~$ qemu-system-aarch64 --version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.18)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
naveen@workstation:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
uj5u.com熱心網友回復:
除錯的開始是在 QEMU 中打開與 bcm2835 系統計時器相關的事件的跟蹤,我認為這是您的代碼正在使用的。您可以使用命令列選項來做到這一點-d trace:bcm2835_systmr*。特別是“定時器 #1 已過期”(或任何定時器編號)訊息表明定時器已引發其中斷。如果計時器沒有引發中斷,那么您錯誤地對計時器進行了編程;如果是,那么您可能沒有正確設定中斷控制器。
您可能還應該仔細檢查您是否真的按照預期在 EL1 中執行。
舊版本的 QEMU 支持 raspi3 板,但沒有實作這個特定的系統計時器設備;因此,如果您沒有看到計時器到期跟蹤,那么值得檢查您的 QEMU 是否足夠新。6.2.0 肯定實作了這個設備。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424414.html
下一篇:標記堆疊區域變數(asm)
