Sunday, 26 May 2019

qemu 読み会最終日

今日は qemu-system-arm で Rasbian Linux を立ち上げて、それを gdb で追う方針で。

  Hide [12:12 PM]
  tlb_flush (cpu=0x555556877070) at /home/syster_clown/src/qemu-4.0.0/accel/tcg/cputlb.c:348
  #1 0x0000555555a42604 in dacr_write (env=0x55555687f330, ri=0x55555689b260, value=81)
    at /home/syster_clown/src/qemu-4.0.0/target/arm/helper.c:527

ってのがあったので、見てると memset で16kbyte clear するだけ。え〜なにそれ。


  for (int work = cf; work ; work &= work - 1) ...

ってのがあったんですが、

  0001001100001 work
  0001001100000 work-1
  0001001100000 &
  0001001011111 -1
  0001001000000 &

という3わけで、下から 1 のbit があるところを0にしていくループだそうです。

  for (int work = 1; work < 0x10 ; work <<= - 1)
   if ( cf & work ) {
    ...

でも良いんじゃないか説。

どうも、/dev/kvm を開けて、Linux kernel と連携するらしい。なので、

  /dev/kvm の mmap に qemu の host 側のPTE を置くみたいな方式

らしい。今回はここまでだけど、Linux kernel の virt/kvm も読む必要があるみたい。

でも、そこは qemu/kvm がやってくれるので、cpu emulation では PTE 書いて tlb_flush すれば良いだけみたい。

VMの研究が流行ったのは2000年代でググるとBitVisorとかが引っかかって懐かしいです。

No comments: