Kernel debugging


#1

hey,
i’m using the hikey board in order to develop a thin hypervisor and ofcourse i’m having tons of problems and in desperate need of a debugger.

i was wondering if you know how i could do kernel debugging for the hikey board ?
can it be done over USB ?

thanks, asaf :slight_smile:


#2

I am doing some analysis on KVM and I am just using the standard kernel debugging capabilities (pretty much ftrace [1] and pr_debug in UP mode for simplicity - no reason to debug in SMP for me yet).

What do you mean by debugger? are you thinking about a JTAG or BDI sort of device?

[1] https://www.kernel.org/doc/Documentation/trace/ftrace.txt


#3

well the first thing is i’m trying to replace the hyp exception vector but the boards locks up and i very much would like to know why.

i’m used to working with kgdb on virtualized environments to solve such issues…
i was hoping for a simpler solution than jtag, something based on the otg port…


#4

I noticed that the virtualization group suggested you to look into how KVM does what you are trying to replicate (type 2 hyper-visor).

Not sure if you followed up my entry there but you can run a simple guest instance in HiKey 16.06 by installing kvmtools (either from source or via apt) and execute:

$ lkvm run --console serial -c2 -m256 -k /tmp/Image -n mode=user,trans=mmio -p "console=ttyS0 earlycon=uart,mmio,0x3f8"

[be sure to pass an uncompressed Image to lkvm: if you dont pass a kernel image, it will attempt to load bzImages/vmlinuz from /boot which obviously wont boot].


#5

Yes but that is not what I want…
I need to build an hypervisor not use an existing one…

The thing I didn’t understand is how identity mapping of the hyp vectors work.


#6

I think your question is understood.

I am simply letting you know that you can use kvm and lkvm on HiKey to find out the answer to your question - you are not going to do (architecturally speaking, maybe feature wise you will) anything that kvm is not doing already so understanding how kvm works might help.


#7

Oh lol, that’s exactly what im trying to understand, I looked at the code but when I try to replicate it in my module it won’t work due to the fact that I’m sending bad virtual address since it is not I’d mapped to physical memory.