1 虚拟化打印调测
当启动一个OS时,loader跳转内核head.S后可能没有打印,在开MMU之前可以通过写串口寄存器物理地址直接打印,开MMU之后只能使用虚拟地址打印。
1.1 hvc指令
- 用于虚拟机启动后,Hvc直接陷出到Hypervisor进行流程跟踪。
vm 中:head.s中开启mmu前,汇编代码hvc
hyp侧:cou_vcpu_emulate_hvc64(),vmm_printf("hvc %u\n", iss)
1.2 串口调试
- C语言写串口
void uart_pputc(void)
{
while((*(uint32_t*)0xc81004cc) & (1 << 21))
;
*(uint32_t*)0xc81004c0 = 'S';
}
- 汇编写串口
.globl uart_pputc
uart_pputc:
mov x16, #0x4cc
movk x16, #0xc810, lsl #16
ldr w16, [x16]
and w16, w16, #0x200000
cbnz w16, .
mov x16, #0x4c0
mov w17, #0x44
movk x16, #0xc810, lsl #16
str w17, [x16]
ret
preserve_boot_args:
mov x21, x0
adr_1 x0, boot_args
stp x21, x1, [x0]
entry
stp x2, x3, [x0, #16]
b uart_pputc
dmb sy
with MMU off