串口打印调测

1 虚拟化打印调测

当启动一个OS时,loader跳转内核head.S后可能没有打印,在开MMU之前可以通过写串口寄存器物理地址直接打印,开MMU之后只能使用虚拟地址打印。

1.1 hvc指令

  • 用于虚拟机启动后,Hvc直接陷出到Hypervisor进行流程跟踪。
vm 中:head.s中开启mmu前,汇编代码hvc #2 或者c代码 asm("hvc #2") 
hyp侧:cou_vcpu_emulate_hvc64(),vmm_printf("hvc %u\n", iss)

1.2 串口调试

  1. C语言写串口
/* main.c增加vim2 uart串口打印接口,打印字符S */
/* pl011一般基地0x9000000,DR 0 */
void uart_pputc(void)
{
    while((*(uint32_t*)0xc81004cc) & (1 << 21))
              ;
          *(uint32_t*)0xc81004c0 = 'S';
    
}
  1. 汇编写串口
/* 或者使用汇编,使用x16,w17寄存器,以免使用常规寄存器干扰 */
    .globl uart_pputc
uart_pputc:
        mov  x16, #0x4cc             // #1288
        movk x16, #0xc810, lsl #16
        ldr  w16, [x16]
        and  w16, w16, #0x200000
        cbnz w16, .
        mov  x16, #0x4c0            // #1216
        mov  w17, #0x44             // #68
        movk x16, #0xc810, lsl #16
        str  w17, [x16]
        ret

/* head.S中preserve_boot_args进行跳转打印 */
preserve_boot_args:
        mov   x21, x0           // x21=FDT
        adr_1 x0, boot_args     // record the contents ofboot args
        stp   x21, x1, [x0]     // x0 .. x3 at kernel
entry
        stp   x2, x3, [x0, #16]
        b     uart_pputc        //debug print
        dmb   sy                // need before dc ivac
with MMU off 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值